五子棋图型库文件源码
五子棋图型库头文件实现
但是在悔棋的时候有问题,导致不可以悔棋成功,如果有朋友能高抬贵手指点一二我将感激不尽。
//主函数
#include"manplay.h"
#include"machplay.h"
int main()
{
initgraph(699, 696);//初始化图形系统
initGame();
while (1);//防止闪退
return 0;
}
//头文件
#pragma once
#include<graphics.h>//图形库头文件
#include<mmsystem.h>//播放音乐头文件
#include<conio.h>//控制台输入输出
#include<stdlib.h>
#include<time.h>
#pragma comment(lib,"winmm.lib")//播放音乐库文件
HWND gc;//定义一个窗口控件
int flag = 0;//表示下棋次数
int board[15][15] = { 0 };//初始化棋盘的状态
int score[15][15] = { 0 };//初始化棋盘的分数
int rrhuiqi[2];//用一维数组记录人下棋的 x , y 的位置
int rjhuiqi[2][2];//用二维数组记录人机下棋的位置
int judgeChess(int a, int b);//判断输赢
void chessBorad();//绘画棋盘
void initGame();//进入游戏
void initStrat();//进入游戏初始化
void manplayChess();//人人对战
void machineplayChess();//人机对战
void chessNaive(int& x, int& y);//电脑获取最优解位置
void evaluateNaive();//用权值法评估空格分值
void regretChess();//人人对战重来
void regmachineChess();//人机对战重来
void surrWin(int);//投降
void getOver();//结束游戏关闭绘图
void machprintChess();//打印人机棋盘
#pragma once
#include"gobang.h"
#include"orther.h"
//人人对决函数
void manplayChess()
{
MOUSEMSG m;//保存鼠标消息
int x, y;
int a = 0, b = 0;
rectangle(550, 385, 628, 435);
settextcolor(RED);
setbkmode(0);
outtextxy(560, 400, "黑棋下");
while (1)
{
m = GetMouseMsg();
for (int i = 1; i <= 15; i++)//每行15个交点可以下,每格长宽25
{
for (int j = 1; j <= 15; j++)
{
if (abs(m.x - (150 + (i * 25))) < 12 && abs(m.y - (150 + (j * 25))) < 12)//使得落子在交点上
{
x = 150 + i * 25;//第一条线在150,边边线不下,从第二条线开始即150
y = 150 + j * 25;
a = i;
b = j;//用a,b记录鼠标点击位置方便后续判断
}
}
}
//下棋
if (m.uMsg == WM_LBUTTONDOWN && (m.x > 162 && m.x < 537 && m.y >162 && m.y < 537))//鼠标消息为鼠标左键在棋盘区域内按下时
{
if (board[a][b] != 0)//不能重复下棋
{
MessageBox(NULL, "这里有棋子了请重新选择", "提示", MB_OK);//提示框,null为消息框没有拥有窗口
continue;
}
if (flag % 2 == 0)//利用flag不断+1时奇偶性地不断变化来判断轮到哪个玩家下
{
clearrectangle(550, 385, 628, 435);
rectangle(550, 385, 628, 435);
settextcolor(YELLOW);
setbkmode(OPAQUE);
outtextxy(560, 400, "绿棋下");
setfillcolor(BLACK);//当flag为偶数则黑棋下
solidcircle(x, y, 10);//获得鼠标x,y为画一个圆的圆心,半径10
board[a][b] = 1;//玩家1在棋盘的(a,b)位置下了棋,则设置board为1,表示该位置玩家1有棋
//outtextxy(300, 600, "绿棋下");
}
else
{
clearrectangle(550, 385, 628, 435);
rectangle(550, 385, 628, 435);
settextcolor(YELLOW);
setbkmode(OPAQUE);
outtextxy(560, 400, "黑棋下");
setfillcolor(GREEN);
solidcircle(x, y, 10);
board[a][b] = 2;//玩家2下棋记录为2
//outtextxy(300, 600, "黑棋下");
}
flag++;//每次下一个棋,flag就加1
rrhuiqi[0] = a;//利用一维数组来储存最近的一个落子点,rrhuiqi[0]记录落子点x值
rrhuiqi[1] = b;//rrhuiqi[1]记录落子点y值
}
//悔棋 左键鼠标落在悔棋区域
else if ((m.uMsg == WM_LBUTTONDOWN) && (m.x > 550 && m.x < 630 && m.y > 120 && m.y < 155))
{
if (board[a][b] != 0 && rrhuiqi[0] == a && rrhuiqi[1] == b)
{//棋盘有子处且是最近的落子点,即只能是悔最近的棋子,不能无限悔棋,不能跨步悔棋
board[a][b] = 0;//悔棋后重置board数组该点处为空
chessBorad();//重绘棋盘上未落上一棋的局势
for (int i = 0; i <= 14; i++)
{
for (int j = 0; j <= 14; j++)
{
if (board[i][j] == 1)
{
setfillcolor(BLACK);
solidcircle(150 + (i * 25), 150 + (j * 25), 10);
}
if (board[i][j] == 2)
{
setfillcolor(GREEN);
solidcircle(150 + (i * 25), 150 + (j * 25), 10);
}
}
}
flag--;//悔棋玩家再下一次
}
//无子或不在棋盘区域
else
{
MessageBox(NULL, "悔棋失败", "提示", MB_OK);//提示框
continue;
}
}
if ((m.uMsg == WM_LBUTTONDOWN))
{
//投降
if (m.x > 550 && m.x < 630 && m.y > 185 && m.y < 220)
{
memset(board, 0, sizeof(board));//清空board数组,即把sizeof(board)长度的board数组里的值全为0
flag = 0;
surrWin(flag % 2);
}
//重开
if (m.x > 550 && m.x < 630 && m.y > 155 && m.y < 185)
{
memset(board, 0, sizeof(board));//清空board数组,即把sizeof(board)长度的board数组里的值全为0
flag = 0;
regretChess();
}
}
if (judgeChess(a, b))//每下一子判断是否产生赢家
{
if ((flag - 1) % 2 == 1)//绿棋落子后产生赢家
{
MessageBox(NULL, "绿棋获胜", "游戏结束", MB_OK);
memset(board, 0, sizeof(board));//清空board数组,即把sizeof(board)长度的board数组里的值全为0
flag = 0;
initGame();//进入游戏
}
else
{
MessageBox(NULL, "黑棋获胜", "游戏结束", MB_OK);
memset(board, 0, sizeof(board));//清空board数组,即把sizeof(board)长度的board数组里的值全为0
flag = 0;
initGame();//进入游戏
}
}
if (!judgeChess(a, b) && flag == 225)
{
MessageBox(NULL, "平局", "游戏结束", MB_OK);
memset(board, 0, sizeof(board));//清空board数组,即把sizeof(board)长度的board数组里的值全为0
flag = 0;
initGame();//进入游戏
}
//点击返回游戏初始化界面
if ((m.uMsg == WM_LBUTTONDOWN) && m.x >= 500 && m.x <= 660 && m.y >= 90 && m.y <= 130)
{
memset(board, 0, sizeof(board));//清空board数组,即把sizeof(board)长度的board数组里的值全为0
flag = 0;
initGame();//进入游戏
}
}
}
//判断输赢
int judgeChess(int a, int b)
{
int i = 0, j = 0;//初始化,防止出现BUG
int t = 2 - flag % 2;//玩家1时,board记录也为1,玩家2则board也为2
for (i = a - 4, j = b; i <= a; i++)//判断横方向的5个棋子是否连成
{
if (i >= 0 && i <= 15 && t == board[i][j] && t == board[i + 1][j] && t == board[i + 2][j] && t == board[i + 3][j] && t == board[i + 4][j])
return 1;
}
for (i = a, j = b - 4; j <= b; j++)//判断竖方向的5个棋子是否连成
{
if (j >= 0 && j <= 15 && t == board[i][j] && t == board[i][j + 1] && t == board[i][j + 2] && t == board[i][j + 3] && t == board[i][j + 4])
return 1;
}
for (i = a - 4, j = b - 4; i <= a && j <= b; j++, i++)//判断斜左上方的5个棋子是否连成
{
if (j >= 0 && j <= 15 && i >= 0 && i <= 15 && t == board[i][j] && t == board[i + 1][j + 1] && t == board[i + 2][j + 2] && t == board[i + 3][j + 3] && t == board[i + 4][j + 4])
return 1;
}
for (i = a + 4, j = b - 4; i >= a && j <= b; i--, j++)//判断斜右上方的5个棋子是否连成
{
if (j >= 0 && j <= 15 && i >= 0 && i <= 15 && t == board[i][j] && t == board[i - 1][j + 1] && t == board[i - 2][j + 2] && t == board[i - 3][j + 3] && t == board[i - 4][j + 4])
return 1;
}
return 0;
}
//人人对战重来
void regretChess()
{
chessBorad();
manplayChess();
}
#pragma once
#include"gobang.h"
#include"orther.h"
//每个空子的评估函数 权值法
//需要对人落子和电脑已落子进行评价。人落子电脑要堵,电脑自己落子要做成5子
void evaluateNaive()
{
memset(score, 0, sizeof(score));//清空score数组,即把sizeof(score)长度的score数组里的值全为0
int number1, number2, empty;//number1为方向上人子数,number2为方向上电脑子数,empty为空子数
for (int x = 0; x <= 14; ++x)
{
for (int y = 0; y <= 14; ++y)
{
if (board[x][y] == 0)//评估每个空子
{
for (int i = -1; i <= 1; ++i)
{
for (int j = -1; j <= 1; ++j)//每个空位的8个方向
{
if (!(i == 0 && j == 0))//0,0不动不用算
{
int k = 0;//初始化,防止出现BUG
number1 = 0, number2 = 0, empty = 0;
//对人落子评分(要对人所下的子进行围堵,玩家在这儿落子后的估分越高,电脑就越有必要下在这儿,来打破玩家的意图)
//每个方向上的正方向
for (k = 1; k <= 5; ++k)
if (x + i * k >= 0 && x + i * k <= 14 && y + j * k >= 0 && y + j * k <= 14 && board[x + i * k][y + j * k] == 1)
++number1;
else if (x + i * k >= 0 && x + i * k <= 14 && y + j * k >= 0 && y + j * k <= 14 && board[x + i * k][y + j * k] == 0)
{
++empty;
break;
}
else
break;
//每个方向上的反方向
for (k = -1; k >= -5; --k)
if (x + i * k >= 0 && x + i * k <= 14 && y + j * k >= 0 && y + j * k <= 14 && board[x + i * k][y + j * k] == 1)
++number1;
else if (x + i * k >= 0 && x + i * k <= 14 && y + j * k >= 0 && y + j * k <= 14 && board[x + i * k][y + j * k] == 0)
{
++empty;
break;
}
else
break;
if (number1 == 1)
score[x][y] += 1; //人若下该空子,就两子了,那么不管死活都是+1
else if (number1 == 2)
{
if (empty == 1)
score[x][y] += 5; //三子,死,+5
else if (empty == 2)
score[x][y] += 10;//三子,活,+10
}
else if (number1 == 3)
{
if (empty == 1)
score[x][y] += 20;//形成死四,+20
else if (empty == 2)
score[x][y] += 100;//形成活四,+100
}
else if (number1 == 4)
score[x][y] += 1000;//五子,+1000
//对电脑落子评分(我自己下了这个空子,会怎样)
empty = 0;
for (k = 1; k <= 5; ++k)
if (x + i * k >= 0 && x + i * k <= 14 && y + j * k >= 0 && y + j * k <= 14 && board[x + i * k][y + j * k] == 2)
++number2;
else if (x + i * k >= 0 && x + i * k <= 14 && y + j * k >= 0 && y + j * k <= 14 && board[x + i * k][y + j * k] == 0)
{
++empty;
break;
}
else
break;
for (k = -1; k >= -5; --k)
if (x + i * k >= 0 && x + i * k <= 14 && y + j * k >= 0 && y + j * k <= 14 && board[x + i * k][y + j * k] == 2)
++number2;
else if (x + i * k >= 0 && x + i * k <= 14 && y + j * k >= 0 && y + j * k <= 14 && board[x + i * k][y + j * k] == 0)
{
++empty;
break;
}
else
break;//碰到边
if (number2 == 0)
score[x][y] += 1; //电脑若下了该空子,就一子了,那么不管死活都是+1
else if (number2 == 1)
score[x][y] += 2; //两子,+2
else if (number2 == 2)
{
if (empty == 1)
score[x][y] += 8; //三子,死,+8
else if (empty == 2)
score[x][y] += 30;//三子,活,+30
}
else if (number2 == 3)
{
if (empty == 1)
score[x][y] += 50;//四子,死,+50
else if (empty == 2)
score[x][y] += 200;//四子,活,+200
}
else if (number2 == 4)
score[x][y] += 10000; //五子,+10000
}
}
}
}
}
}
}
//电脑获取最优解位置
void chessNaive(int& x, int& y)
{
//搜的是当前的第一个最优解
evaluateNaive();
int maxpos = 0;
for (int i = 0; i <= 14; ++i)
{
for (int j = 0; j <= 14; ++j)
{
if (score[i][j] > maxpos)
{
maxpos = score[i][j];
x = i;
y = j;//找出分数最高的点,记录并返回
}
}
}
}
//人机下棋
void machineplayChess()
{
MOUSEMSG m;//保存鼠标消息
int x = 0, y = 0;
int a = 0, b = 0;
while (1)
{
if (flag % 2 == 0)
{
m = GetMouseMsg();
clearrectangle(550, 385, 628, 435);
rectangle(550, 385, 628, 435);
settextcolor(YELLOW);
setbkmode(OPAQUE);
outtextxy(560, 400, "玩家下");
for (int i = 0; i <= 14; i++)
{
for (int j = 0; j <= 14; j++)
{
if (abs(m.x - (150 + (i * 25))) < 12 && abs(m.y - (150 + (j * 25))) < 12)
{
x = 150 + i * 25;
y = 150 + j * 25;
a = i;
b = j;
}
}
}
//人下棋
if (m.uMsg == WM_LBUTTONDOWN && (m.x > 160 && m.x < 557 && m.y >162 && m.y < 557))
{
if (board[a][b] != 0)//不能重复下棋
{
MessageBox(NULL, "这里有棋子了请重新选择", "提示", MB_OK);//提示框
continue;
}
setfillcolor(BLACK);
solidcircle(x, y, 10);//获得鼠标x,y为画一个圆的圆心,半径10
board[a][b] = 1;
flag++;//每次下一个棋,flag就加1
rjhuiqi[0][0] = a;
rjhuiqi[0][1] = b;
if (judgeChess(a, b))
{
MessageBox(NULL, "玩家获胜", "游戏结束", MB_OK);
memset(board, 0, sizeof(board));
memset(score, 0, sizeof(score));
flag = 0;
initGame();//进入游戏
}
if (!judgeChess(a, b) && flag == 225)
{
MessageBox(NULL, "平局", "游戏结束", MB_OK);
memset(board, 0, sizeof(board));//清空board数组,即把sizeof(board)长度的board数组里的值全为0
memset(score, 0, sizeof(score));//清空score数组,即把sizeof(score)长度的score数组里的值全为0
flag = 0;
initGame();//进入游戏
}
}
if ((m.uMsg == WM_LBUTTONDOWN))
{
//投降
if (m.x > 550 && m.x < 630 && m.y > 185 && m.y < 220)
{
memset(board, 0, sizeof(board));//清空board数组,即把sizeof(board)长度的board数组里的值全为0
memset(score, 0, sizeof(score));//清空score数组,即把sizeof(score)长度的score数组里的值全为0
flag = 0;
surrWin(flag % 2);
}
//人机对战重开
if (m.x > 550 && m.x < 630 && m.y > 155 && m.y < 185)
{
//全部重置
memset(board, 0, sizeof(board));//清空board数组,即把sizeof(board)长度的board数组里的值全为0
memset(score, 0, sizeof(score));//清空score数组,即把sizeof(score)长度的score数组里的值全为0
flag = 0;
regmachineChess();
}
}
//人悔棋
if ((m.uMsg == WM_LBUTTONDOWN) && (m.x > 550 && m.x < 630 && m.y > 120 && m.y < 155))
{
if (board[a][b] != 0 && (rjhuiqi[0][0] == a && rjhuiqi[0][1] == b))
{
board[a][b] = 0;
board[rjhuiqi[1][0]][rjhuiqi[1][1]] = 0;//电脑下的上一步也退回
chessBorad();
for (int i = 0; i <= 14; i++)
{
for (int j = 0; j <= 14; j++)
{
if (board[i][j] == 1)
{
setfillcolor(BLACK);
solidcircle(150 + (i * 25), 150 + (j * 25), 10);
}
if (board[i][j] == 2)
{
setfillcolor(GREEN);
solidcircle(150 + (i * 25), 150 + (j * 25), 10);
}
}
}
flag -= 2;//人和电脑都退
}
else
{
MessageBox(NULL, "不可悔棋", "提示", MB_OK);//提示框
continue;
}
}
//人机返回大厅
if ((m.uMsg == WM_LBUTTONDOWN) && m.x >= 450 && m.x <= 625 && m.y >= 50 && m.y <= 100)
{
//全部重置
memset(board, 0, sizeof(board));//清空board数组,即把sizeof(board)长度的board数组里的值全为0
memset(score, 0, sizeof(score));//清空score数组,即把sizeof(score)长度的score数组里的值全为0
flag = 0;
initGame();
}
}
if (flag % 2 == 1)
{
clearrectangle(550, 385, 628, 435);
rectangle(550, 385, 628, 435);
settextcolor(YELLOW);
setbkmode(OPAQUE);
outtextxy(560, 400, "电脑下");
chessNaive(a, b);//评估人下的每一个棋子
setfillcolor(GREEN);
solidcircle(150 + a * 25, 150 + b * 25, 10);
board[a][b] = 2;
flag++;
rjhuiqi[1][0] = a;//人机悔棋记录坐标,rjhuiqi[1][0]记录x坐标,rjhuiqi[1][1] = b记录y坐标
rjhuiqi[1][1] = b;
if (judgeChess(a, b))
{
MessageBox(NULL, "电脑获胜", "游戏结束", MB_OK);
memset(board, 0, sizeof(board));//清空board数组,即把sizeof(board)长度的board数组里的值全为0
memset(score, 0, sizeof(score));//清空score数组,即把sizeof(score)长度的score数组里的值全为0
flag = 0;
initGame();//进入游戏
}
if (!judgeChess(a, b) && flag == 225)
{
MessageBox(NULL, "平局", "游戏结束", MB_OK);
memset(board, 0, sizeof(board));//清空board数组,即把sizeof(board)长度的board数组里的值全为0
memset(score, 0, sizeof(score));//清空score数组,即把sizeof(score)长度的score数组里的值全为0
flag = 0;
initGame();//进入游戏
}
}
}
}
//人机对战重来
void regmachineChess()
{
machprintChess();
machineplayChess();
}
//打印人机棋盘
void machprintChess()
{
loadimage(NULL, "背景.jpg", 699, 699);
setlinecolor(RED);//画线条为红色
for (int i = 175; i < 550; i += 25)//循环画线
{
line(i, 175, i, 525);//画线函数,画竖线:第一个点(i,175),第二个点(i,525)
line(175, i, 525, i);//画横线,第一个点(175,i),第二个点(525,i)
}
setfillcolor(BLACK);
solidcircle(350, 350, 4);
solidcircle(250, 250, 4);
solidcircle(450, 250, 4);
solidcircle(250, 450, 4);
solidcircle(450, 450, 4);
settextstyle(20, 0, "宋体");
settextcolor(RED);
setbkmode(0);//去掉玩家背景
outtextxy(500, 30, "玩家:黑棋");
outtextxy(500, 60, "电脑:绿棋");
outtextxy(500, 90, "返回进入游戏界面");
setlinecolor(RED);
rectangle(550, 120, 630, 220);
line(550, 155, 630, 155);
line(550, 185, 630, 185);
outtextxy(565, 130, "悔 棋");
outtextxy(565, 160, "重 来");
outtextxy(565, 190, "投 降");
}
#pragma once
#include"gobang.h"
//进入游戏
void initGame()
{
initStrat();
HWND hWnd = GetHWnd();//获取窗口句柄,即窗口的唯一标识符
SetWindowText(hWnd, "五子棋游戏");//改变窗口标题
IMAGE backgrand;//创建一个图像对象
loadimage(&backgrand, "背景.jpg", 699, 699);//装载光标,图标,位图,此为装载游戏大厅背景图
putimage(0, 0, &backgrand);//在屏幕上输出一个位图
MOUSEMSG m; // 定义鼠标消息
}
//绘画棋盘
void chessBorad()
{
loadimage(NULL, "背景.jpg", 699, 699);
setlinecolor(RED);//画线条为红色
for (int i = 175; i < 550; i += 25)//循环画线
{
line(i, 175, i, 525);//画线函数,画竖线:第一个点(i,175),第二个点(i,525)
line(175, i, 525, i);//画横线,第一个点(175,i),第二个点(525,i)
}
setfillcolor(BLACK);
solidcircle(350, 350, 4);
solidcircle(250, 250, 4);
solidcircle(450, 250, 4);
solidcircle(250, 450, 4);
solidcircle(450, 450, 4);
settextstyle(20, 0, "宋体");
settextcolor(RED);
setbkmode(0);//去掉玩家背景
outtextxy(500, 30, "玩家1:黑棋");
outtextxy(500, 60, "玩家2:绿棋");
outtextxy(500, 90, "返回进入游戏界面");
setlinecolor(RED);
rectangle(550, 120, 630, 220);
line(550, 155, 630, 155);
line(550, 185, 630, 185);
outtextxy(565, 130, "悔 棋");
outtextxy(565, 160, "重 来");
outtextxy(565, 190, "投 降");
}
//进入游戏初始化
void initStrat()
{
int cont = 0;
loadimage(NULL, "背景.jpg", 699, 696);
cleardevice();
settextcolor(RED); //设置文字颜色
settextstyle(100, 0, "宋体"); //设置字体大小、宽度、字体
outtextxy(100, 100, "欢乐五子棋");
setlinecolor(RED);
rectangle(230, 250, 470, 520);//画方框
rectangle(240, 260, 460, 510);
line(240, 340, 460, 340);
line(240, 430, 460, 430);//画直线
settextstyle(40, 0, "欢乐五子棋");
outtextxy(270, 280, "人机大战");
outtextxy(270, 370, "双人对战");
outtextxy(270, 450, "退出系统");
setlinecolor(WHITE);
settextcolor(WHITE);
outtextxy(600, 25, "音乐");
circle(580, 45, 15);
IMAGE gc;
loadimage(&gc, "背景.jpg");
putimage(220, 696, &gc);
while (true)
{
MOUSEMSG m;
m = GetMouseMsg();
if (m.uMsg == WM_LBUTTONDOWN)
{
if (m.x > 250 && m.x < 450 && m.y > 250 && m.y < 340) //玩家对战区域
{
machprintChess(); //棋盘界面初始化
machineplayChess();//人机对战
}
if (m.x > 250 && m.x < 450 && m.y > 340 && m.y < 440) //人机对战区域
{
chessBorad(); //棋盘界面初始化
manplayChess();//人人对战
}
if (m.x >= 580 && m.x <= 610 && m.y >= 45 && m.y <= 75) //音乐开区域
{
mciSendString(TEXT(" open 于梓贝 - 处处吻 (钢琴版).mp3 alias mysong"), NULL, 0, NULL);
mciSendString(TEXT("play mysong"), NULL, 0, NULL);//设置背景音乐 多媒体控制接口
}
if (m.x >= 580 && m.x <= 610 && m.y >= 45 && m.y <= 75) //音乐关区域
{
mciSendString("pause 于梓贝 - 处处吻 (钢琴版).mp3", NULL, 0, NULL);
}
if (m.x > 250 && m.x < 450 && m.y > 440 && m.y < 520)
{
//退出系统
exit(0);
}
}
}
}
//投降
void surrWin(int x)
{
initgraph(699, 696);
cleardevice();//清除图形屏幕
if (x == 1)
{
settextcolor(RED);//字体颜色
settextstyle(55, 0, "欢乐五子棋");
outtextxy(360, 200, "黑棋获胜");
}
else
{
settextcolor(RED);
settextstyle(55, 0, "欢乐五子棋");
outtextxy(250, 200, "绿棋获胜");
}
settextcolor(WHITE);
settextstyle(30, 0, "欢乐五子棋");
outtextxy(300, 420, "返回游戏界面");
outtextxy(500, 570, " 结束游戏");
while (1)
{
int ID;
MOUSEMSG n;
n = GetMouseMsg();
switch (n.uMsg)
{
case WM_LBUTTONDOWN:
if (n.x <= 500 && n.x >= 300 && n.y <= 450 && n.y >= 410)
initStrat();
if (n.x <= 600 && n.x >= 500 && n.y <= 600 && n.y >= 560)
{
gc = GetHWnd(); //弹窗前置
ID = MessageBox(gc, "是否关闭游戏?", "", MB_YESNO);
if (ID == IDYES)
getOver();
}
}
}
}
//结束游戏关闭绘图
void getOver()
{
initgraph(500, 500);//背景大小
settextcolor(RED);//字体颜色
settextstyle(100, 0, "欢乐五子棋");//设置字体
outtextxy(120, 200, "再见!");
Sleep(900);
closegraph(); // 关闭绘图窗口
}