[源码分享]C++五子棋简易小游戏

​01

编码过程

定义函数和变量

游戏初始化,绘制界面

游戏过程函数,绘制鼠标点击位置的棋子

判断鼠标点击位置是否超出边界

02

效果展示

03

代码分享

#include <graphics.h>

#include <stdio.h>

#include <math.h>

#include <mmsystem.h>

#pragma comment(lib,"winmm.lib")

void initGame();//函数声明

void playChess();

int judge(int a, int b);

int flag = 0;//标记轮到谁下棋

int board[20][20] = { 0 };//0表示没有下棋的状态

int main()

{

initGame();//函数调用,不加返回值类型和参数类型

playChess();

closegraph();

return 0;

}

void initGame()

{

initgraph(600, 500);//绘图环境

loadimage(NULL, "背景.jpg"); //背景图片

mciSendString("open G弦之歌.mp3", 0, 0, 0);//打开音乐

mciSendString("play G弦之歌.mp3", 0, 0, 0);//播放音乐

//绘制棋盘

setlinecolor(BLACK);//设置线条颜色为黑色

for (int i = 1; i < 20; i++)

{

line(0, i * 25, 500, i * 25);//绘制线条

line(i * 25, 0, i * 25, 500);

}

setlinestyle(PS_SOLID, 2);//设置线条为实线,宽度为2

line(500, 0, 500, 500);//边界线

outtextxy(512, 60, "玩家1:黑棋");

outtextxy(512, 100, "玩家2:白棋");

}

void playChess()

{

int x=0, y=0;

int a=0, b=0;

MOUSEMSG m;//定义鼠标消息

HWND hwnd;

hwnd = GetHWnd();

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)

{

a = i;

b = j;

x = i * 25;

y = j * 25;

}

}

}

if (m.uMsg == WM_LBUTTONDOWN)//判断当前鼠标消息是不是鼠标左键按下

{

if (board[a][b] != 0)

{

MessageBox(hwnd, "这里已经有棋子了,请重新选择.", "五子棋", MB_OK);

continue;

}

if (flag % 2 == 0)

{

setfillcolor(BLACK);

solidcircle(x, y, 10);

board[a][b] = 1;

}

else

{

setfillcolor(WHITE);

solidcircle(x, y, 10);

board[a][b] = 2;

}

flag++;

}

if (judge(a, b))

{

if (1 == flag % 2)

{

MessageBox(hwnd, "玩家1胜利", "游戏结束", MB_OK);

return; //修复BUG

}

else

{

MessageBox(hwnd, "玩家2胜利", "游戏结束", MB_OK);

return; //修复BUG

}

}

}

}

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 >= 1 && 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 >= 1 && 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; i++, j++)

{

if (i >= 1 && i < 16 && j >= 1 && 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; i <= a, j >= b; i++, j--)

{

if (i >= 1 && i < 16 && j >= 1 && 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;

}

更多有关C语言和C++的知识和学习资料,欢迎关注微信公众号:C语言学习基地!

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容