「源码分享」C++五子棋简易小游戏

「源码分享」C++五子棋简易小游戏

编码文章call10242025-02-01 4:01:0628A+A-

01

编码过程

  • 定义函数和变量
  • 游戏初始化,绘制界面
  • 游戏过程函数,绘制鼠标点击位置的棋子
  • 判断鼠标点击位置是否超出边界

02

效果展示


03

代码分享

#include 
#include 
#include 
#include 
#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语言学习基地!

点击这里复制本文地址 以上内容由文彬编程网整理呈现,请务必在转载分享时注明本文地址!如对内容有疑问,请联系我们,谢谢!
qrcode

文彬编程网 © All Rights Reserved.  蜀ICP备2024111239号-4