c基于easyx做的一个简易五子棋

实现了五子棋简单的功能`

#include "stdafx.h"
#include <graphics.h>
#include <mmsystem.h>
#pragma comment(lib,"winmm.lib")

IMAGE img;


void initgame();
void playchess();


int board[20][20] = { 0 };
int flag = 0;   //标记下棋状态
int judge(int a, int b);


int _tmain(int argc, _TCHAR* argv[])
{
	initgame(); //初始化游戏界面
	playchess();


	while (1);
	return 0;
}



void initgame()
{
	initgraph(600, 500);
	loadimage(&img, "1.jpg", 600, 500);
	putimage(0, 0, &img);
	mciSendString("open 感谢你曾经来过.mp3", 0, 0, 0);
	mciSendString("play 感谢你曾经来过.mp3 repeat", 0, 0, 0);
	setlinecolor(BLACK);
	for (int i = 0; i < 20; i++)
	{
		line(0, i * 25, 500, i * 25);   //25 50 75 100
		line(i * 25, 0, i * 25, 500);
	}
	setlinestyle(PS_SOLID, 2);  //画实线 宽度2
	line(500, 0, 500, 500);
	outtextxy(512, 60, "玩家1:黑棋");
	outtextxy(512, 120, "玩家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, "玩家一取得胜利", "游戏结束", MB_OK);
				return;
			}
			else
			{
				MessageBox(hwnd, "玩家二取得胜利", "游戏结束", MB_OK);
				return;
			}
		}
		
	}


}


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 <= a; 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;
}

`

  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
### 回答1: 好的,我可以回答这个问题。要实现一个五子棋AI游戏,需要使用C语言EasyX图形库。首先,需要实现五子棋的规则和界面,然后使用算法实现AI的思考和下棋。可以使用博弈树搜索、极大极小值算法等方法来实现AI的决策。同时,还需要考虑优化算法,提高AI的效率和准确性。 ### 回答2: 使用C语言结合EasyX图形库编写一个简单的五子棋AI游戏,需要分为以下几个步骤: 1. 创建棋盘:使用EasyX库中的绘图函数创建一个棋盘的图形界面,可以使用数组来模拟棋盘的状态。 2. 绘制棋盘:使用绘图函数将棋盘的边界、线条和交叉点绘制出来,形成一个完整的棋盘。 3. 实现落子功能:通过鼠标事件或键盘事件获取用户下棋的位置,并在棋盘上绘制相应的棋子。为了简化代码,可以将用户和AI的棋子分别用不同的颜色表示。 4. 判断胜负:每当用户或AI下完一颗棋子后,需要判断是否有五颗连成一线的棋子,若存在则判断为胜利,并结束游戏。 5. AI下棋:实现AI的基本策略,可以采用简单的算法进行决策,例如在当前棋盘上选择一个空位进行落子。为了增加游戏的难度,可以采用更复杂的算法,如Minimax算法。 6. 实现游戏终止:当判断出胜负后,停止用户和AI的落子动作,并显示游戏结束信息。 7. 可选的功能:可以添加一些额外的功能,如悔棋、重新开始、提供游戏提示等,提高游戏的可玩性。 以上是一个简单的五子棋AI游戏的基本实现思路,根据具体需求和个人技术水平,还可以进行更多的扩展和优化。 ### 回答3: 写一个五子棋AI游戏涉及到很多方面的知识和技巧,需要运用到C语言EasyX库的基础知识。首先,我们需要了解五子棋的规则和棋盘表示方法。 在C语言中使用EasyX库,我们可以通过绘制图形窗口和接受鼠标点击事件等功能实现五子棋游戏的界面交互。具体步骤如下: 1. 初始化游戏界面:通过EasyX库创建一个图形窗口,设置窗口的大小和标题。 2. 绘制棋盘:使用EasyX的图形绘制函数,绘制一个15×15的棋盘。可以使用for循环语句和直线绘制函数绘制棋盘的横竖线。 3. 处理鼠标点击事件:通过EasyX的消息处理函数,判断鼠标的点击位置,并在对应的棋盘位置上放置相应的棋子。 4. 实现AI的下棋算法:可以采用蒙特卡洛树搜索(MCTS)等算法,对可能的下棋位置进行搜索和评估。通过对各种可能性的模拟,得出最优解。 5. 判断游戏胜负:实时判断游戏是否胜利,即是否有五个连续的棋子。可以编写判断连续棋子的函数,并在每次下棋后进行调用。 6. 交替下棋:在玩家和AI之间交替下棋,通过一个标记变量记录当前是哪一方下棋。 7. 结束游戏:当有一方取得胜利或者棋盘下满时,结束游戏并显示胜利方。 通过以上的步骤,我们可以实现一个简单的五子棋AI游戏。当然,还可以继续优化算法和界面交互,增加一些其他功能,如悔棋、重新开始等。总之,通过运用C语言EasyX库的知识和技巧,我们可以很好地实现一个五子棋AI游戏。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值