IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 12月8日学习总结 -> 正文阅读

[C++知识库]12月8日学习总结

昨日已经创建好了棋盘游戏棋盘,今天写一写如何落子,和输赢的判别。

1.落子:

? ? ? ?这里用到了图形库中的结构体MOUSEMSG,他的具体作用是保存一个鼠标信息,判断鼠标是否点下,并保存他的坐标。具体的点击坐标与二维数组之间的关系可根据自己创建的棋盘计算,我这里用到的是500*500的棋盘,横纵均为20的二维数组。

这里信息量有点大,我直接将落子和最后输赢的输出写在了同一个函数当中,代码的大概思路是:

(1)用结构体变量保存鼠标点击的坐标,我们划定一个12*12的矩形当点击这个区域的时候均认为点击的是一个区域内黑线相交的点,接下来判断鼠标左键是否按下即(m.uMsg == WM_LBUTTONDOWN)若点击的位置超出棋盘或者该点已有棋子(二维数组的对应值不为零)则对用户进行提示,如果在棋盘区域内且没有落子,则利用库函数solidcircle(x,y,10)画一个棋子,这个函数也比较容易理解,那便是以x,y为圆心画一个半径为10的圆,为了使颜色出现黑白双色,我们需要 定义一个flag变量进行记数操作,当flag的值变化的时候我们利用setfillcolor函数对改圆圈填充另一种颜色。

//对局
void playChess()
{
	int x = 0, y = 0;
	int a = 0, b = 0;
	MOUSEMSG m;//存放鼠标信息
	HWND hwnd = GetHWnd();
	loadimage(&back, "悔棋.jpg");//悔棋背景
	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 (m.x >= 520 && m.x <= 570 && m.y>=190 && m.y <= 230)
				{
					BackChess(m.x,m.y);
				}
				else if (m.x > 500 || m.y > 500 || x < 0 || y < 0)
					MessageBox(NULL, "请在棋盘中落子!","温馨提示",MB_OK);
				else if (board[a][b] != 0)
				{
					outtextxy(0, 565, "这里已经有棋子了,请重新选择");
					continue;
				}
				else if (flag % 2 == 0)
				{
					setfillcolor(BLACK);//当flag为偶数,下黑棋,否则下白棋
					solidcircle(x, y, 10);//画一个圆圈包含于图形库
					board[a][b] = 1;
				}
				else
				{
					setfillcolor(WHITE);
					solidcircle(x, y, 10);//获取鼠标点击位置
					board[a][b] = 2;
				}
				loadimage(&img, "背景7.jpg");
				putimage(0, 565, 225,17, &img, 0, 0);
				flag++;
			}
			if (judge(a, b))
			{
				if (flag % 2 == 0)
				{
					MessageBox(hwnd, "玩家2获胜", "游戏结束", MB_OK);
					system("cls");
					Newgame();
				}
				else
				{
					MessageBox(hwnd, "玩家1获胜", "游戏结束", MB_OK);
					system("cls");
					Newgame();
				}
			}
			 
	

2.输赢算法判断:

? ? ? ?横着方向遍历一遍二维数组,看是否有五个1相连,或者五个2相连,再纵向遍历一遍棋盘,若有则证明有一方赢,结束程序,具体代码实现如下,没有太大难度,只是两个for循环遍历数组而已。

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

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-12-09 11:28:26  更:2021-12-09 11:28:44 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 11:40:01-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码