C语言五子棋
程序员文章站
2022-04-07 15:48:48
...
先看一下效果
思路:
①函数封装绘制游戏界面
void InitGame()
{
initgraph(600, 500);
loadimage(NULL, "背景.jpg");
mciSendString("open 琵琶语.mp3", 0, 0, 0);
mciSendString("play 琵琶语.mp3", 0, 0, 0);//添加音乐
setlinecolor(BLACK);
for (int i = 25; i <= 500; i += 25) //绘制棋盘线条
{
line(i, 0, i, 500);
line(0,i,500,i);
}
line(501,0,501,500);
outtextxy(510,100,"玩家1:黑");
outtextxy(510,120,"玩家2:紫");
}
②绘制棋子
void PlayChess()
{
MOUSEMSG m;
int x, y, a=0, b=0;
while (1)
{
m = GetMouseMsg(); //获取一个鼠标消息
for(int i=1;i<=20;i++)
for (int j = 1; j <= 20; j++)
{
if (abs(m.x - i * 25) < 12 && abs(m.y - j * 25) < 12)
{
x = i * 25;
y = j * 25;
a = i;
b = j;
}
}
if (m.uMsg == WM_LBUTTONDOWN)
{
if (board[a][b] != 0)
{
MessageBox(NULL,"已有棋子!","提示",MB_OK);
continue;
}
if (flag % 2 == 0)
{
setfillcolor(BLACK);
solidcircle(x,y,10);
board[a][b] = 1; //黑子置数组元素为1
}
else
{
setfillcolor(RGB(220,150,250));
solidcircle(x, y, 10);
board[a][b] = 2; //紫色置数组元素为2
}
flag++; //控制不同颜色棋子的输出
}
if (judge(a, b)) //判断是否分出胜负的函数
{
if (flag % 2 == 1)
{
MessageBox(NULL, "黑棋获胜", "GAMEOVER!", MB_OK);
exit(0);
}
else
{
MessageBox(NULL, "紫棋获胜", "GAMEOVER!", MB_OK);
exit(0);
}
}
}
}
③判断胜负的函数
int judge(int a, int b)
{
int i, j;
int t = 2 - flag % 2;
for (i = a - 4, j = b; i <= a; i++)
{
if (i >= 0 && i <= 16 && 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++)
{
if (j >= 0 && j <= 16 && 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++)
{
if (i>=0&&i<=16&&j >= 0 && j <= 16 && 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; j >=0,i<=a; j--,i++)
{
if (i>=0&&i<=16&&j >= 0 && j <= 16 && 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;
}
注:
判断时,分为四个方向,横,竖,左斜,右斜。
完整代码:
#include<graphics.h>
#include<mmsystem.h>
#include<math.h>
#pragma comment(lib,"winmm.lib")
int judge(int a, int b);
int flag = 0;
int board[20][20] = {0};
void InitGame()
{
initgraph(600, 500);
loadimage(NULL, "背景.jpg");
mciSendString("open 琵琶语.mp3", 0, 0, 0);
mciSendString("play 琵琶语.mp3", 0, 0, 0);
setlinecolor(BLACK);
for (int i = 25; i <= 500; i += 25) //绘制棋盘线条
{
line(i, 0, i, 500);
line(0,i,500,i);
}
line(501,0,501,500);
outtextxy(510,100,"玩家1:黑");
outtextxy(510,120,"玩家2:紫");
}
void PlayChess()
{
MOUSEMSG m;
int x, y, a=0, b=0;
while (1)
{
m = GetMouseMsg(); //获取一个鼠标消息
for(int i=1;i<=20;i++)
for (int j = 1; j <= 20; j++)
{
if (abs(m.x - i * 25) < 12 && abs(m.y - j * 25) < 12)
{
x = i * 25;
y = j * 25;
a = i;
b = j;
}
}
if (m.uMsg == WM_LBUTTONDOWN)
{
if (board[a][b] != 0)
{
MessageBox(NULL,"已有棋子!","提示",MB_OK);
continue;
}
if (flag % 2 == 0)
{
setfillcolor(BLACK);
solidcircle(x,y,10);
board[a][b] = 1; //黑子置数组元素为1
}
else
{
setfillcolor(RGB(220,150,250));
solidcircle(x, y, 10);
board[a][b] = 2; //紫色置数组元素为2
}
flag++; //控制不同颜色棋子的输出
}
if (judge(a, b))
{
if (flag % 2 == 1)
{
MessageBox(NULL, "黑棋获胜", "GAMEOVER!", MB_OK);
exit(0);
}
else
{
MessageBox(NULL, "紫棋获胜", "GAMEOVER!", MB_OK);
exit(0);
}
}
}
}
int judge(int a, int b)
{
int i, j;
int t = 2 - flag % 2;
for (i = a - 4, j = b; i <= a; i++)
{
if (i >= 0 && i <= 16 && 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++)
{
if (j >= 0 && j <= 16 && 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++)
{
if (i>=0&&i<=16&&j >= 0 && j <= 16 && 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; j >=0,i<=a; j--,i++)
{
if (i>=0&&i<=16&&j >= 0 && j <= 16 && 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;
}
int main()
{
InitGame();
PlayChess();
while (1);
return 0;
}
下一篇: 利用Python发送邮件