首页 > 其他分享 >EasyX学习-井字棋

EasyX学习-井字棋

时间:2024-07-18 21:18:27浏览次数:10  
标签:学习 return 200 true EasyX 井字棋 board && data

使用EasyX制作的井字棋

点击查看代码
#include <iostream>
#include<Windows.h>
#include<graphics.h>
const int fps = 60;
static const int row = 3;
static const int col = 3;
char board_data[row][col] =
{
	{'-', '-', '-'},
	{'-', '-', '-'},
	{'-', '-', '-'},
};
char current_piece = 'O';
/// <summary>
/// 检测指定棋子的玩家是否获胜
/// </summary>
/// <param name="c"></param>
/// <returns></returns>
bool CheckWin(char c)
{
	if (board_data[0][0] == c && board_data[0][1] == c && board_data[0][2] == c)
		return true;
	if (board_data[1][0] == c && board_data[1][1] == c && board_data[1][2] == c)
		return true;
	if (board_data[2][0] == c && board_data[2][1] == c && board_data[2][2] == c)
		return true;
	if (board_data[0][0] == c && board_data[1][0] == c && board_data[2][0] == c)
		return true;
	if (board_data[0][1] == c && board_data[1][1] == c && board_data[2][1] == c)
		return true;
	if (board_data[0][2] == c && board_data[1][2] == c && board_data[2][2] == c)
		return true;
	if (board_data[0][0] == c && board_data[1][1] == c && board_data[2][2] == c)
		return true;
	if (board_data[0][2] == c && board_data[1][1] == c && board_data[2][0] == c)
		return true;
	return false;
}
/// <summary>
/// 检测当前是否出现平局
/// </summary>
/// <returns></returns>
bool CheckDraw()
{
	for (size_t i = 0; i < row; i++)
	{
		for (size_t j = 0; j < col; j++)
		{
			if (board_data[i][j] == '-')//如果数组中有没下的棋子则说明不是平局
			{
				return false;
			}
		}
	}
	return true;
}
/// <summary>
/// 绘制棋盘网格
/// </summary>
void DrawBoard()
{
	line(0, 200, 600, 200);
	line(0, 400, 600, 400);
	line(200, 0, 200, 600);
	line(400, 0, 400, 600);
}
/// <summary>
/// 绘制棋子
/// </summary>
void DrawPiece()
{
	for (size_t i = 0; i < row; i++)
	{
		for (size_t j = 0; j < col; j++)
		{
			switch (board_data[i][j])
			{
			case 'O': //绘制O
			{
				circle(200 * j + 100, 200 * i + 100, 100);
			}
				break;
			case 'X': //绘制X
			{
				line(200 * j, 200 * i, 200 * (j + 1), 200 * (i + 1));
				line(200 * (j + 1), 200 * i, 200 * j, 200 * (i + 1));
			}
				break;
			case '-':
				break;
			default:
				break;
			}
		}
	}
}
/// <summary>
/// 绘制提示信息
/// </summary>
void DrawTipText()
{
	static TCHAR str[64] = {};
	_stprintf_s(str, _T("当前棋子类型:%c"), current_piece);
	settextcolor(RGB(255, 175, 45));
	outtextxy(0, 0, str);
}
int main()
{
	int w = 600;
	int h = 600;
	HWND hwnd = initgraph(w, h);
	bool running = true;
	BeginBatchDraw();
	ExMessage msg = {};
	while (running)
	{
		ULONGLONG start = GetTickCount64();
		while (peekmessage(&msg))
		{
			if (msg.message == WM_LBUTTONDOWN)
			{
				//计算点击位置
				int x = msg.x;
				int y = msg.y;
				int index_x = x / 200;
				int index_y = y / 200;

				//尝试落子
				if (board_data[index_y][index_x] == '-')
				{
					board_data[index_y][index_x] = current_piece;
					if (current_piece == 'O')
						current_piece = 'X';
					else
						current_piece = 'O';
				}
			}
		}
		
		cleardevice();
		DrawBoard();
		DrawPiece();
		DrawTipText();
		FlushBatchDraw();
		if (CheckWin('X'))
		{
			MessageBox(hwnd, _T("X 玩家获胜"), _T("游戏结束"), MB_OK);
			running = false;
		}
		else if (CheckWin('O'))
		{
			MessageBox(hwnd, _T("O 玩家获胜"), _T("游戏结束"), MB_OK);
			running = false;
		}
		else if (CheckDraw())
		{
			MessageBox(hwnd, _T("平局!"), _T("游戏结束"), MB_OK);
			running = false;
		}

		ULONGLONG end = GetTickCount64();
		ULONGLONG delta = end - start;
		if (delta < 1000 / fps)
		{
			Sleep(1000 / fps - delta);//延时
		}
	}
	EndBatchDraw();
	return 0;
}

学习视频

标签:学习,return,200,true,EasyX,井字棋,board,&&,data
From: https://www.cnblogs.com/zzr-stdio/p/18310464

相关文章

  • HTML学习1:网页基本信息
    <!--html注释--><!--ctrl+/注释的快捷键--><!--DOCTYPE:告诉浏览器,我们要使用什么规范--><!DOCTYPEhtml><htmllang="en"><!--head标签代表网页头部--><head>  <!--meta为描述性标签,它用来描述我们网站的一些信息-->  <!--meta一般用来做SEO(搜索......
  • HTML学习1:网页基本标签
    <!DOCTYPEhtml><htmllang="en"><head>  <metacharset="UTF-8">  <metaname="viewport"content="width=device-width,initial-scale=1.0">  <title>网页基本标签</title></......
  • 7-18学习笔记
    一、字符串        String类引用类型默认值null不是""1、声明字符串Stringstr="abc你好";str=newString();str=newString("你好");char[]arr={'a','b','c',97};str=newStr......
  • Vue3学习---1
    Vue3学习1.初识Vue1.1HelloWorld程序<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"><ti......
  • XGBoost模型构建+SHAP解析-Python代码——用XGBoost模型实现机器学习并进行黑箱过程解
    一、XGBoost模型简介1.1适用范围XGBoost(ExtremeGradientBoosting)是一个基于梯度提升(GradientBoosting)框架的增强算法,广泛应用于分类、回归、排序等任务。常见的应用包括:信用风险评估销售预测病毒检测图像识别1.2原理XGBoost是梯度提升树(GradientBoostedDecisionTree......
  • 决策树模型构建+调参Python代码——用决策树模型实现机器学习
    一、决策树模型简介1.1适用范围决策树模型(DecisionTree)可以用于分类和回归任务,广泛应用于以下领域:客户细分信用风险评估医疗诊断营销策略优化1.2原理决策树是一种树形结构的预测模型,通过一系列的特征测试(即节点的分裂)将数据集逐步划分,从而形成一个树状的决策路径。每个节......
  • 蓝桥杯单片学习总结(Day12 串口通讯实验)
    实验现象:        通过串口调试助手发送数字1~8,板子上面的对应指示灯亮。注意此处发送应选择文本模式发送。 实例代码:#include<STC15F2K60S2.H>#defineBUAD 9600//所需波特率、#defineSYSTEMCLOCK 11059200L//系统时钟频率,L表示该数据为长整型voiduart_......
  • 嵌入式学习——C语言字符数组及其函数
    目录一、字符数组    1、定义    2、初始化                    3、引用字符数组元素二、字符串和字符串结束的标志三、字符数组的输入输出        1、字符串的输入:scanf    2、注意事项四、字符串处理函数......
  • Python学习之推导式
    目录一、列表推导式二、集合推导式三、字典推导式四、元组推导式一、列表推导式[expressionforiteminiterableifcondition]介绍:(1)expression:生成元素的表达式。(2)item:可迭代对象中的每个元素。(3)iterable:可迭代对象,如列表、元组、字符串等。(4)condition(可选):筛选......
  • 扩展 KMP/exKMP(Z 函数)学习笔记
    声明本文章转载自shangruolin的博客,已经过作者(存疑)同意,帮TA宣传一下。扩展KMP/exKMP(Z函数)学习笔记兼P10479匹配统计题解。LCP:最长公共前缀。Z函数,又称扩展KMP(exKMP),能够在\(O(n)\)的时间内求出一个字符串与其所有后缀的LCP的长度。定义\(z_i\)为字符串\(s\)......