启动!!!!!!井字棋

#include <easyx.h>
#include<iostream>
char board_data[3][3] =
{
	{'-', '-','-'},
	{'-', '-','-'},
	{'-', '-','-'},
};
char current_piece = 'O';
//检测指定棋子的玩家是否获胜
bool CheckWin(char c)
{
	if (board_data[0][0] == c && board_data[0][1] == c && board_data[0][2])
		return true;
	if (board_data[1][0] == c && board_data[1][1] == c && board_data[1][2])
		return true;
	if (board_data[2][0] == c && board_data[2][1] == c && board_data[2][2])
		return true;
	if (board_data[0][0] == c && board_data[1][0] == c && board_data[2][0])
		return true;
	if (board_data[0][1] == c && board_data[1][1] == c && board_data[2][1])
		return true;
	if (board_data[0][2] == c && board_data[1][2] == c && board_data[2][2])
		return true;
	if (board_data[0][0] == c && board_data[1][1] == c && board_data[2][2])
		return true;
	if (board_data[2][0] == c && board_data[1][1] == c && board_data[0][2])
		return true;
	return false;
}
//检测当前是否出现平局
bool CheckDraw()
{
	for (int i=0; i < 3; i++)
	{
		for (int j=0; j < 3;j++)
		{
			if (board_data[i][j] == '-')
			{
				return false;
			}
		}
	}
	return true;
}
//绘制棋盘
void DrawBoard()
{
	line(200, 0, 200, 600);
	line(400, 0, 400, 600);
	line(0, 200, 600, 200);
	line(0, 400, 600, 400);
}
//绘制棋子
void DrawPlece()
{
	for (int i=0; i < 3; i++)
	{
		for (int j=0; j < 3; j++)
		{
			switch (board_data[i][j])
			{
			case'O':
				circle(200 * j + 100, 200 * i + 100, 100);
				break;
			case'X':
				line(200 * j, 200 * i, 200 * j + 200, 200 * i + 200);
				line(200 * j + 200, 200 * i, 200 * j, 200 * i + 200);
				break;
			case'-':
				break;
			}
		}
	}
}
//绘制提示信息
void DrawTipText()
{
	static TCHAR str[64];
	_stprintf_s(str, _T("当前棋子类型 :%c"), current_piece);
	settextcolor(RGB(255, 175, 45));
	outtextxy(0, 0, str);
}
int main()
{
	initgraph(600, 600);
	bool running = true;
	ExMessage msg;
	BeginBatchDraw();
	while (running)
	{
		while (&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();
		DrawPlece();
		DrawTipText();
		FlushBatchDraw();
		if (CheckWin('x'))
		{
			MessageBox(GetHWnd(), _T("X 玩家获胜"), _T("游戏结束"), MB_OK);
			running = false;
		}
		else if (CheckWin('O'))
		{
			MessageBox(GetHWnd(), _T("O 玩家获胜"), _T("游戏结束"), MB_OK);
			running = false;
		}
		else if (CheckDraw())
		{
			MessageBox(GetHWnd(), _T("平局"), _T("游戏结束"), MB_OK);
			running = false;
		}
	}
	EndBatchDraw();
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值