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 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> 井字棋小游戏代码 -> 正文阅读

[游戏开发]井字棋小游戏代码

?

编译器:VS2019(C++)

基本构思:

????????本程序是一款市面上少有的井字棋游戏,有单人模式和双人模式两种模式。单人模式下的规则是玩家先走,人机后走的模式,玩家一旦有疏漏计算机就可能会赢。双人模式下:可实现玩家一和玩家二的下棋对决,用鼠标进行操控即可。需要注意的是:在游戏中每个格子只能点击一次且不能点到边线上,否则会使程序停止运行。如果卡顿请停止游戏重新启动即可。

?

#include<graphics.h>
#include<conio.h>
#include<iostream>
#define W 500
#define H 600
using namespace std;

//一些全局变量
MOUSEMSG m;		// 定义鼠标消息
IMAGE hand;		//鼠标图案
int k = 0;		//控制一步一棋子//k = 0,a; // k = 1,b;
int mood = 0;   //mood = 1:单人模式;mood = 2:双人模式;
int w = 0;//判断胜负
int c = 0;//计算a下的次数
int wina = 0;// = 1:a赢了
int winb = 0; // = 2:b赢了
int winc = 0; // = 3: 平局
int v = 0;//堵截成功v = 1
int n = 0;//b胜利了n = 1
int g = 0;
int q = 1;//q = 0,则武器可下

void wordwin();
void wordawin();
void wordbwin();

char map[3][4] = {
	"www",
	"www",
	"www",
};

void draw()//绘制棋局函数 只适用于gamebegin()函数-----------目前适用于检测各种结点
{
	cleardevice();
	initgraph(600, 600);
	setbkcolor(RGB(250, 250, 250));//蓝红黄
	cleardevice();
	setlinecolor(RED);
	for (int i = 0; i < 3; i++)
	{
		for (int j = 0; j < 3; j++)
		{
			if (map[i][j] == 'w')
			{
				rectangle(j * 200, i * 200, (j + 1) * 200, (i + 1) * 200);
			}
		}
	}
}

void huizhijiemian()//绘制界面函数,只应用于gamebegin函数内
{
	IMAGE hand;
	loadimage(&hand, "hand.png", 50, 50);
	BeginBatchDraw();
	int x1, x2, y1, y2, y3, y4;//用来绘制界面的线框坐标
	int wid = 50;//线框宽度
	int len = 200;//线框长度
	x1 = 200; x2 = x1 + len;
	y1 = 250; y2 = y1 + wid;
	y3 = y1 + wid + 50; y4 = y3 + wid;
	setlinecolor(RED);
	rectangle(x1, y1, x2, y2);
	rectangle(x1, y2, x2, y3);
	rectangle(x1, y3, x2, y4);
	setbkmode(TRANSPARENT);//显示透明文字
	settextcolor(RED);
	settextstyle(70, 0, _T("隶书"));
	outtextxy(W / 2 - 100, 100, "井 字 棋");
	settextstyle(30, 0, _T("隶书"));
	outtextxy(x1 + 30, y1 + 5, "单人模式");
	settextstyle(30, 0, _T("隶书"));
	outtextxy(x1 + 30, y2 + 5, "双人模式");
	settextstyle(30, 0, _T("隶书"));
	outtextxy(x1 + 30, y3 + 5, "退出游戏");
	//putimage(m.x, m.y, &hand);
	FlushBatchDraw();
	EndBatchDraw();
}
void huizhijiemian_1()//二次绘制界面函数,只应用于gamebegin函数内
{
	IMAGE hand;
	loadimage(&hand, "hand.png", 50, 50);
	BeginBatchDraw();
	int x1, x2, y1, y2, y3, y4;//用来绘制界面的线框坐标
	int wid = 50;//线框宽度
	int len = 200;//线框长度
	x1 = 200; x2 = x1 + len;
	y1 = 250; y2 = y1 + wid;
	y3 = y1 + wid + 50; y4 = y3 + wid;
	setlinecolor(YELLOW);
	rectangle(x1, y1, x2, y2);
	rectangle(x1, y2, x2, y3);
	rectangle(x1, y3, x2, y4);
	setbkmode(TRANSPARENT);//显示透明文字
	settextcolor(BLUE);
	settextstyle(50, 0, _T("隶书"));
	outtextxy(W / 4 - 75, 100, "欢迎来玩井字棋小游戏");
	outtextxy(W / 2 - 100, 150, "请在次确认模式");
	settextstyle(30, 0, _T("隶书"));
	outtextxy(x1 + 30, y1 + 5, "单人模式");
	settextstyle(30, 0, _T("隶书"));
	outtextxy(x1 + 30, y2 + 5, "双人模式");
	settextstyle(30, 0, _T("隶书"));
	outtextxy(x1 + 30, y3 + 5, "退出游戏");
	//putimage(m.x, m.y, &hand);
	FlushBatchDraw();
	EndBatchDraw();
}
void gamebegin()  	// 游戏开始
{
	w = 0;
	q = 1;
	k = 0;
	if (w == 0)
	{
		int exit = 0;//循环出口
		int x1, x2, y1, y2, y3, y4;
		int wid = 50;//线框宽度
		int len = 200;//线框长度
		x1 = 200; x2 = x1 + len;
		y1 = 250; y2 = y1 + wid;
		y3 = y1 + wid + 50; y4 = y3 + wid;
		initgraph(600, 600);
		setfillcolor(GREEN);//鼠标点击颜色
		setbkcolor(RGB(250, 250, 250));//蓝红黄
		cleardevice();
		while (exit != 1)
		{
			huizhijiemian();//绘制界面函数
			// 获取一条鼠标消息
			m = GetMouseMsg();
		//	putimage(m.x, m.y, &hand);
			cleardevice();
			switch (m.uMsg)
			{
			case WM_MOUSEMOVE:
				// 鼠标移动的时候画红色的小点
			//	putimage(m.x, m.y, &hand);
				break;
			case WM_LBUTTONDOWN://点击左键
				if (m.x >= x1 && m.x <= x2 && m.y >= y1 && m.y <= y2)
				{//单人模式
					fillcircle(m.x, m.y, 10);
					Sleep(1);
					mood = 1;//单人模式
					exit = 1;//退出循环结束此函数
					closegraph();
				}
				else if (m.x >= x1 && m.x <= x2 && m.y >= y2 && m.y <= y3)
				{//双人模式
					fillcircle(m.x, m.y, 10);
					Sleep(1);
					mood = 2;//双人模式
					exit = 1;//退出循环结束此函数
					closegraph();
				}
				else if (m.x >= x1 && m.x <= x2 && m.y >= y3 && m.y <= y4)
				{
					fillcircle(m.x, m.y, 10);
					closegraph();
					break;
				}
				else {
					int step = 20;
					setlinestyle(PS_SOLID, 20);//设置线条宽度
					setlinecolor(RED);
					line(m.x - step, m.y - step, m.x + step, m.y + step);
					line(m.x + step, m.y - step, m.x - step, m.y + step);
					setlinestyle(PS_SOLID, 0);//还原线条宽度
				}
				break;
			case WM_RBUTTONUP:// 按鼠标右键退出程序
				setlinestyle(PS_SOLID, 20);//设置线条宽度
				setlinecolor(BLUE);
				circle(m.x, m.y, 20);
				setlinestyle(PS_SOLID, 0);//还原线条宽度
				break;
			}
		}
		draw();//展开新棋局
	}
	BeginBatchDraw();//开始第二次批量绘制
}
void gamebegin_1()  	// 二次游戏开始界面
{
	//所有全局变量全都重新初始化
	k = 0;		//控制一步一棋子//k = 0,a; // k = 1,b;
	mood = 0;   //mood = 1:单人模式;mood = 2:双人模式;
	w = 0;//判断胜负
	c = 0;//计算a下的次数
	wina = 0;// = 1:a赢了
	winb = 0; // = 2:b赢了
	winc = 0; // = 3: 平局
	v = 0;//堵截成功v = 1
	n = 0;//b胜利了n = 1
	g = 0;
	q = 1;//q = 0,则武器可下

	if (w == 0)
	{
		int exit = 0;//循环出口
		int x1, x2, y1, y2, y3, y4;
		int wid = 50;//线框宽度
		int len = 200;//线框长度
		x1 = 200; x2 = x1 + len;
		y1 = 250; y2 = y1 + wid;
		y3 = y1 + wid + 50; y4 = y3 + wid;
		initgraph(600, 600);
		setfillcolor(GREEN);//鼠标点击颜色
		setbkcolor(RGB(250, 250, 250));//蓝红黄
		cleardevice();
		while (exit != 1)
		{
			huizhijiemian_1();//二次绘制界面函数
			// 获取一条鼠标消息
			m = GetMouseMsg();
		//	putimage(m.x, m.y, &hand);
			cleardevice();
			switch (m.uMsg)
			{
			case WM_MOUSEMOVE:
				// 鼠标移动的时候画红色的小点
			//	putimage(m.x, m.y, &hand);
				break;
			case WM_LBUTTONDOWN://点击左键
				if (m.x >= x1 && m.x <= x2 && m.y >= y1 && m.y <= y2)
				{//单人模式
					fillcircle(m.x, m.y, 10);
					Sleep(1);
					mood = 1;//单人模式
					exit = 1;//退出循环结束此函数
					closegraph();
				}
				else if (m.x >= x1 && m.x <= x2 && m.y >= y2 && m.y <= y3)
				{//双人模式
					fillcircle(m.x, m.y, 10);
					Sleep(1);
					mood = 2;//双人模式
					exit = 1;//退出循环结束此函数
					closegraph();
				}
				else if (m.x >= x1 && m.x <= x2 && m.y >= y3 && m.y <= y4)
				{
					fillcircle(m.x, m.y, 10);
					closegraph();
					break;
				}
				else {
					int step = 20;
					setlinestyle(PS_SOLID, 20);//设置线条宽度
					setlinecolor(RED);
					line(m.x - step, m.y - step, m.x + step, m.y + step);
					line(m.x + step, m.y - step, m.x - step, m.y + step);
					setlinestyle(PS_SOLID, 0);//还原线条宽度
				}
				break;
			case WM_RBUTTONUP:// 按鼠标右键退出程序
				setlinestyle(PS_SOLID, 20);//设置线条宽度
				setlinecolor(BLUE);
				circle(m.x, m.y, 20);
				setlinestyle(PS_SOLID, 0);//还原线条宽度
				break;
			}
		}
		//重开一局
		map[0][0] = 'w';
		map[0][1] = 'w';
		map[0][2] = 'w';
		map[1][0] = 'w';
		map[1][1] = 'w';
		map[1][2] = 'w';
		map[2][0] = 'w';
		map[2][1] = 'w';
		map[2][2] = 'w';
		draw();
	}
	BeginBatchDraw();//开始第二次批量绘制
}
void gameshow()	// 显示
{
	cleardevice();
	setlinecolor(RED);
	int i, j;
	for (int i = 0; i < 3; i++)
	{
		for (int j = 0; j < 3; j++)
		{
			if (map[i][j] == 'w')
			{
				rectangle(j * 200, i * 200, (j + 1) * 200, (i + 1) * 200);
			}
			if (map[i][j] == 'a')
			{
				rectangle(j * 200, i * 200, (j + 1) * 200, (i + 1) * 200);
				setlinestyle(PS_SOLID, 20);//设置线条宽度
				setlinecolor(BLUE);
				circle((j * 200 + (j + 1) * 200) / 2, (i * 200 + (i + 1) * 200) / 2, 50);//在格子中心点画圆
				setlinestyle(PS_SOLID, 0);//还原线条宽度
			}
			if (map[i][j] == 'b')
			{
				rectangle(j * 200, i * 200, (j + 1) * 200, (i + 1) * 200);
				setlinestyle(PS_SOLID, 20);//设置线条宽度
				setlinecolor(RED);
				line((j * 200 + (j + 1) * 200) / 2 - 50, (i * 200 + (i + 1) * 200) / 2 - 50, (j * 200 + (j + 1) * 200) / 2 + 50, (i * 200 + (i + 1) * 200) / 2 + 50);
				line((j * 200 + (j + 1) * 200) / 2 + 50, (i * 200 + (i + 1) * 200) / 2 - 50, (j * 200 + (j + 1) * 200) / 2 - 50, (i * 200 + (i + 1) * 200) / 2 + 50);
				setlinestyle(PS_SOLID, 0);//还原线条宽度
			}
			if (map[0][0] != 'w' && map[0][1] != 'w' && map[0][2] != 'w' &&
				map[1][0] != 'w' && map[1][1] != 'w' && map[1][2] != 'w' &&
				map[2][0] != 'w' && map[2][1] != 'w' && map[2][2] != 'w')
			{
				q = 0;
			}
		}
	}
	FlushBatchDraw();
}

void updatenotautomation_1()		// 单人模式下的手动的更新
{
	int exit = 0;
	cleardevice();
	while (exit != 1)
	{
		// 获取一条鼠标消息
		m = GetMouseMsg();
		cleardevice();
		switch (m.uMsg)
		{
		case WM_LBUTTONDOWN://点击左键下棋将w变成a
			if (k == 0)//k = 0,轮到a下
			{
				if (m.y < 200 && m.y>0)//在第一排
				{
					if (m.x > 0 && m.x < 200 && map[0][0] == 'w')//在第1个格子
					{
						map[0][0] = 'a';
						exit = 1;//退出循环
					}
					else if (m.x > 200 && m.x < 400 && map[0][1] == 'w')//在第2个格子
					{
						map[0][1] = 'a';
						if (c == 2)
							g = 1;
						exit = 1;//退出循环
					}
					else if (m.x > 400 && m.x < 600 && map[0][2] == 'w')//在第3个格子
					{
						map[0][2] = 'a';
						exit = 1;//退出循环
					}
				}
				else if (m.y < 400 && m.y>200)//在第一排
				{
					if (m.x > 0 && m.x < 200 && map[1][0] == 'w')//在第4个格子
					{
						map[1][0] = 'a';
						if (c == 2)
							g = 1;
						exit = 1;//退出循环
					}
					else if (m.x > 200 && m.x < 400 && map[1][1] == 'w')//在第5个格子
					{
						map[1][1] = 'a';
						if (c == 2)
							g = 1;
						exit = 1;//退出循环
					}
					else if (m.x > 400 && m.x < 600 && map[1][2] == 'w')//在第6个格子
					{
						map[1][2] = 'a';
						exit = 1;//退出循环
					}
				}
				else if (m.y < 600 && m.y>400)//在第3排
				{
					if (m.x > 0 && m.x < 200 && map[2][0] == 'w')//在第7个格子
					{
						map[2][0] = 'a';
						exit = 1;//退出循环
					}
					else if (m.x > 200 && m.x < 400 && map[2][1] == 'w')//在第8个格子
					{
						map[2][1] = 'a';
						if (c == 2)
							g = 1;
						exit = 1;//退出循环
					}
					else if (m.x > 400 && m.x < 600 && map[2][2] == 'w')//在第9个格子
					{
						map[2][2] = 'a';
						exit = 1;//退出循环
					}
				}
				k = 1;//令k = 1,轮到b下。
				c++;//a下一次count++
			}
		}
	}
	k = 1;//方便重复玩
}
void AIbuding(int r)//随机情况
{
	if (r == 1 && map[0][0] == 'w') {
		map[0][0] = 'b';
	}
	else if (r == 2 && map[0][1] == 'w') {
		map[0][1] = 'b';
	}
	else if (r == 3 && map[0][2] == 'w') {
		map[0][2] = 'b';
	}
	else if (r == 4 && map[1][0] == 'w') {
		map[1][0] = 'b';
	}
	else if (r == 5 && map[1][1] == 'w') {
		map[1][1] = 'b';
	}
	else if (r == 6 && map[1][2] == 'w') {
		map[1][2] = 'b';
	}
	else if (r == 7 && map[2][0] == 'w') {
		map[2][0] = 'b';
	}
	else if (r == 8 && map[2][1] == 'w') {
		map[2][1] = 'b';
	}
	else if (r == 9 && map[2][2] == 'w') {
		map[2][2] = 'b';
	}
}
void AIbuding_2()//所有围堵情况
{
	if (map[0][0] == 'w' && map[0][1] == 'a' && map[0][2] == 'a' ||
		map[0][0] == 'w' && map[1][1] == 'a' && map[2][2] == 'a' ||
		map[0][0] == 'w' && map[1][0] == 'a' && map[2][0] == 'a')
	{
		map[0][0] = 'b';
		v = 1;
	}
	else if (map[0][1] == 'w' && map[0][0] == 'a' && map[0][2] == 'a' ||
		map[0][1] == 'w' && map[1][1] == 'a' && map[2][1] == 'a')
	{
		map[0][1] = 'b';
		v = 1;
	}
	else if (map[0][2] == 'w' && map[0][0] == 'a' && map[0][1] == 'a' ||
		map[0][2] == 'w' && map[1][1] == 'a' && map[2][0] == 'a' ||
		map[0][2] == 'w' && map[1][2] == 'a' && map[2][2] == 'a')
	{
		map[0][2] = 'b';
		v = 1;
	}
	else if (map[1][0] == 'w' && map[0][0] == 'a' && map[2][0] == 'a' ||
		map[1][0] == 'w' && map[1][1] == 'a' && map[1][2] == 'a')
	{
		map[1][0] = 'b';
		v = 1;
	}
	else if (map[1][1] == 'w' && map[1][0] == 'a' && map[1][2] == 'a' ||
		map[1][1] == 'w' && map[0][1] == 'a' && map[2][1] == 'a' ||
		map[1][1] == 'w' && map[0][0] == 'a' && map[2][2] == 'a' ||
		map[1][1] == 'w' && map[0][2] == 'a' && map[2][0] == 'a')
	{
		map[1][1] = 'b';
		v = 1;
	}
	else if (map[1][2] == 'w' && map[0][2] == 'a' && map[2][2] == 'a' ||
		map[1][2] == 'w' && map[1][0] == 'a' && map[1][1] == 'a')
	{
		map[1][2] = 'b';
		v = 1;
	}
	else if (map[2][0] == 'w' && map[0][0] == 'a' && map[1][0] == 'a' ||
		map[2][0] == 'w' && map[1][1] == 'a' && map[0][2] == 'a' ||
		map[2][0] == 'w' && map[2][1] == 'a' && map[2][2] == 'a')
	{
		map[2][0] = 'b';
		v = 1;
	}
	else if (map[2][1] == 'w' && map[2][0] == 'a' && map[2][2] == 'a' ||
		map[2][1] == 'w' && map[1][1] == 'a' && map[0][1] == 'a')
	{
		map[2][1] = 'b';
		v = 1;
	}
	else if (map[2][2] == 'w' && map[2][0] == 'a' && map[2][1] == 'a' ||
		map[2][2] == 'w' && map[0][2] == 'a' && map[1][2] == 'a' ||
		map[2][2] == 'w' && map[0][0] == 'a' && map[1][1] == 'a')
	{
		map[2][2] = 'b';
		v = 1;
	}
}
void AIbuding_3()//必胜
{
	if (map[0][0] == 'w' && map[0][1] == 'b' && map[0][2] == 'b' ||
		map[0][0] == 'w' && map[1][1] == 'b' && map[2][2] == 'b' ||
		map[0][0] == 'w' && map[1][0] == 'b' && map[2][0] == 'b')
	{
		map[0][0] = 'b';
		n = 1;
	}
	else if (map[0][1] == 'w' && map[0][0] == 'b' && map[0][2] == 'b' ||
		map[0][1] == 'w' && map[1][1] == 'b' && map[2][1] == 'b')
	{
		map[0][1] = 'b';
		n = 1;
	}
	else if (map[0][2] == 'w' && map[0][0] == 'b' && map[0][1] == 'b' ||
		map[0][2] == 'w' && map[1][1] == 'b' && map[2][0] == 'b' ||
		map[0][2] == 'w' && map[1][2] == 'b' && map[2][2] == 'b')
	{
		map[0][2] = 'b';
		n = 1;
	}
	else if (map[1][0] == 'w' && map[0][0] == 'b' && map[2][0] == 'b' ||
		map[1][0] == 'w' && map[1][1] == 'b' && map[1][2] == 'b')
	{
		map[1][0] = 'b';
		n = 1;
	}
	else if (map[1][1] == 'w' && map[1][0] == 'b' && map[1][2] == 'b' ||
		map[1][1] == 'w' && map[0][1] == 'b' && map[2][1] == 'b' ||
		map[1][1] == 'w' && map[0][0] == 'b' && map[2][2] == 'b' ||
		map[1][1] == 'w' && map[0][2] == 'b' && map[2][0] == 'b')
	{
		map[1][1] = 'b';
		n = 1;
	}
	else if (map[1][2] == 'w' && map[0][2] == 'b' && map[2][2] == 'b' ||
		map[1][2] == 'w' && map[1][0] == 'b' && map[1][1] == 'b')
	{
		map[1][2] = 'b';
		n = 1;
	}
	else if (map[2][0] == 'w' && map[0][0] == 'b' && map[1][0] == 'b' ||
		map[2][0] == 'w' && map[1][1] == 'b' && map[0][2] == 'b' ||
		map[2][0] == 'w' && map[2][1] == 'b' && map[2][2] == 'b')
	{
		map[2][0] = 'b';
		n = 1;
	}
	else if (map[2][1] == 'w' && map[2][0] == 'b' && map[2][2] == 'b' ||
		map[2][1] == 'w' && map[1][1] == 'b' && map[0][1] == 'b')
	{
		map[2][1] = 'b';
		n = 1;
	}
	else if (map[2][2] == 'w' && map[2][0] == 'b' && map[2][1] == 'b' ||
		map[2][2] == 'w' && map[0][2] == 'b' && map[1][2] == 'b' ||
		map[2][2] == 'w' && map[0][0] == 'b' && map[1][1] == 'b')
	{
		map[2][2] = 'b';
		n = 1;
	}
}
void jiexue()//解穴函数--疗伤函数
{
	if (map[0][0] == 'w') {
		map[0][0] = 'b';
	}
	else if (map[0][1] == 'w') {
		map[0][1] = 'b';
	}
	else if (map[0][2] == 'w') {
		map[0][2] = 'b';
	}
	else if (map[1][0] == 'w') {
		map[1][0] = 'b';
	}
	else if (map[1][1] == 'w') {
		map[1][1] = 'b';
	}
	else if (map[1][2] == 'w') {
		map[1][2] = 'b';
	}
	else if (map[2][0] == 'w') {
		map[2][0] = 'b';
	}
	else if (map[2][1] == 'w') {
		map[2][1] = 'b';
	}
	else if (map[2][2] == 'w') {
		map[2][2] = 'b';
	}
}

void Artificial_Intelligence()			//人工智能函数——让ai与自己对弈,实现b堵截功能
{
	int r = rand() % 9 + 1;//生成1~9的随机数
	if (k == 1)//轮到AI下棋了
	{
		if (c == 1)//第一轮:随机
		{
			if (map[1][2] == 'a')
			{
				AIbuding(5);
			}
			else if (map[0][1] == 'a')
			{
				AIbuding(5);
			}
			else if (map[1][0] == 'a')
			{
				AIbuding(5);
			}
			else if (map[2][1] == 'a')
			{
				AIbuding(5);
			}
			else if (map[1][1] == 'a')//破解三角阵
			{
				map[0][0] = 'b';//map[0][2] = 'b'    map[2][0] = 'b'      map[2][2] = 'b'
			}
			else if (map[0][0] == 'a')//破解三角阵
			{
				map[1][1] = 'b';//以点破面
			}
			else if (map[0][2] == 'a')//破解三角阵
			{
				map[1][1] = 'b';//以点破面
			}
			else if (map[2][0] == 'a')//破解三角阵
			{
				map[1][1] = 'b';//以点破面
			}
			else if (map[2][2] == 'a')//破解三角阵
			{
				map[1][1] = 'b';//以点破面
			}
		}
		else if (c == 2)//第二轮:要么堵,要么随机
		{
			if (map[1][0] == 'a' && map[0][1] == 'a' && map[1][1] == 'b')
			{
				AIbuding(1);//1 3 7 9  6
			}
			else if (map[1][0] == 'a' && map[2][1] == 'a' && map[1][1] == 'b')
			{
				AIbuding(7);//1 3 7 9  6
			}
			else if (map[1][2] == 'a' && map[2][1] == 'a' && map[1][1] == 'b')
			{
				AIbuding(9);//1 3 7 9  4
			}
			else if (map[1][2] == 'a' && map[0][1] == 'a' && map[1][1] == 'b')
			{
				AIbuding(3);//1 3 7 9  6
			}
			else if (map[2][0] == 'a' && map[0][1] == 'a' && map[1][1] == 'b')
			{
				AIbuding(1);//
			}
			else if (map[2][1] == 'a' && map[0][0] == 'a' && map[1][1] == 'b')
			{
				AIbuding(3);//
			}
			else if (map[2][2] == 'a' && map[0][1] == 'a' && map[1][1] == 'b')
			{
				AIbuding(3);//
			}
			else if (map[0][2] == 'a' && map[2][1] == 'a' && map[1][1] == 'b')
			{
				AIbuding(1);//
			}
			else if (map[0][0] == 'a' && map[1][2] == 'a' && map[1][1] == 'b')
			{
				AIbuding(7);//
			}
			else if (map[0][2] == 'a' && map[1][0] == 'a' && map[1][1] == 'b')
			{
				AIbuding(9);//
			}
			else if (map[2][0] == 'a' && map[1][2] == 'a' && map[1][1] == 'b')
			{
				AIbuding(1);//
			}
			else if (map[2][2] == 'a' && map[1][0] == 'a' && map[1][1] == 'b')
			{
				AIbuding(3);//
			}
			//包夹
			else if (map[2][2] == 'a' && map[0][0] == 'a' && map[1][1] == 'b')
			{
				AIbuding(6);//
			}
			else if (map[2][0] == 'a' && map[0][2] == 'a' && map[1][1] == 'b')
			{
				AIbuding(4);//
			}
			else if (map[1][0] == 'a' && map[1][2] == 'a' && map[1][1] == 'b')
			{
				AIbuding(1);//
			}
			else if (map[2][1] == 'a' && map[0][1] == 'a' && map[1][1] == 'b')
			{
				AIbuding(3);//
			}
			else if (map[2][2] == 'a' && map[1][1] == 'a' && map[0][0] == 'b')
			{
				AIbuding(3);//
			}
			else if (v == 0)
			{
				AIbuding_2();
			}
		}
		else if (c == 3)//第三轮:要么堵,要么随机
		{
			int q = 1;
			if (map[1][0] == 'a' && map[0][1] == 'a' && map[1][1] == 'a' && map[1][2] == 'b' && map[2][1] == 'b')//双毒性
			{
				AIbuding(9);
				q = 0;
			}
			else if (map[1][0] == 'a' && map[0][1] == 'a' && map[1][1] == 'a' && map[1][2] == 'b' && map[0][0] == 'b')//双毒性
			{
				AIbuding(8);
				q = 0;
			}
			else if (map[1][0] == 'a' && map[0][1] == 'a' && map[1][1] == 'a' && map[2][1] == 'b' && map[0][0] == 'b')//双毒性
			{
				AIbuding(6);
				q = 0;
			}
			//
			else if (map[1][0] == 'a' && map[2][1] == 'a' && map[1][1] == 'a' && map[1][2] == 'b' && map[0][1] == 'b')//双毒性
			{
				AIbuding(3);
				q = 0;
			}
			//
			else if (map[1][0] == 'a' && map[2][1] == 'a' && map[0][1] == 'a' && map[1][2] == 'b' && map[1][1] == 'b')//双毒性
			{
				AIbuding(3);
				q = 0;
			}
			else if (map[1][0] == 'a' && map[2][1] == 'a' && map[0][1] == 'a' && map[0][2] == 'b' && map[1][1] == 'b')//双毒性
			{
				AIbuding(9);
				q = 0;
			}
			else if (map[1][0] == 'a' && map[2][1] == 'a' && map[0][1] == 'a' && map[0][0] == 'b' && map[1][1] == 'b')//双毒性
			{
				AIbuding(9);
				q = 0;
			}
			//
			else if (map[1][0] == 'a' && map[1][2] == 'a' && map[0][1] == 'a' && map[0][2] == 'b' && map[1][1] == 'b')//双毒性
			{
				AIbuding(1);
				q = 0;
			}
			else if (map[1][0] == 'a' && map[1][2] == 'a' && map[0][1] == 'a' && map[2][0] == 'b' && map[1][1] == 'b')//双毒性
			{
				AIbuding(1);
				q = 0;
			}
			else if (map[1][0] == 'a' && map[1][2] == 'a' && map[0][1] == 'a' && map[0][0] == 'b' && map[1][1] == 'b')//双毒性
			{
				AIbuding(3);
				q = 0;
			}
			//
			else if (map[2][1] == 'a' && map[1][2] == 'a' && map[0][1] == 'a' && map[2][0] == 'b' && map[1][1] == 'b')//双毒性
			{
				AIbuding(1);
				q = 0;
			}
			else if (map[2][1] == 'a' && map[1][2] == 'a' && map[0][1] == 'a' && map[0][2] == 'b' && map[1][1] == 'b')//双毒性
			{
				AIbuding(9);
			}
			else if (map[2][1] == 'a' && map[1][2] == 'a' && map[0][1] == 'a' && map[0][0] == 'b' && map[1][1] == 'b')//双毒性
			{
				AIbuding(3);
				q = 0;
			}
			//
			else if (map[2][1] == 'a' && map[1][0] == 'a' && map[1][2] == 'a' && map[0][0] == 'b' && map[1][1] == 'b')//双毒性
			{
				AIbuding(3);
				q = 0;
			}
			else if (map[2][1] == 'a' && map[1][0] == 'a' && map[1][2] == 'a' && map[0][0] == 'b' && map[1][1] == 'b')//双毒性
			{
				AIbuding(3);
				q = 0;
			}
			//
			else if (map[2][1] == 'a' && map[1][0] == 'a' && map[0][2] == 'a' && map[2][0] == 'b' && map[1][1] == 'b')
			{
				AIbuding(9);
				q = 0;
			}
			else if (map[2][2] == 'a' && map[1][0] == 'a' && map[0][1] == 'a' && map[0][0] == 'b' && map[1][1] == 'b')
			{
				AIbuding(7);
				q = 0;
			}
			else if (map[2][1] == 'a' && map[0][0] == 'a' && map[1][2] == 'a' && map[2][2] == 'b' && map[1][1] == 'b')
			{
				AIbuding(7);
				q = 0;
			}
			else if (map[0][1] == 'a' && map[1][2] == 'a' && map[2][0] == 'a' && map[0][2] == 'b' && map[1][1] == 'b')
			{
				AIbuding(9);
				q = 0;
			}
			else if (map[2][0] == 'a' && map[1][2] == 'a' && map[0][0] == 'a' && map[1][0] == 'b' && map[1][1] == 'b')//大三角
			{
				AIbuding(2);//8 3 9
				q = 0;
			}
			else if (map[2][1] == 'a' && map[0][2] == 'a' && map[0][0] == 'a' && map[1][1] == 'b' && map[0][1] == 'b')//大三角
			{
				AIbuding(4);//4 6 7 9
				q = 0;
			}
			else if (map[2][2] == 'a' && map[0][2] == 'a' && map[1][0] == 'a' && map[1][1] == 'b' && map[1][2] == 'b')//大三角
			{
				AIbuding(2);//1 2 7 8
				q = 0;
			}
			else if (map[2][0] == 'a' && map[0][1] == 'a' && map[2][2] == 'a' && map[1][1] == 'b' && map[2][1] == 'b')//大三角
			{
				AIbuding(1);//1   3    4   6
				q = 0;
			}
			//
			else if (map[0][1] == 'a' && map[1][1] == 'a' && map[2][0] == 'a' && map[0][0] == 'b' && map[0][2] == 'b')//插缝
			{
				AIbuding(8);
				q = 0;
			}
			else if (map[0][1] == 'a' && map[1][1] == 'a' && map[2][2] == 'a' && map[0][0] == 'b' && map[0][2] == 'b')//插缝
			{
				AIbuding(8);
				q = 0;
			}
			else if (q == 1)
			{
				AIbuding_3();
			}
			if (n == 0)
			{
				AIbuding_2();
			}
		}
		else if (c == 4)//第4轮://赢,堵,随机
		{
			int q = 1;
			if (map[1][0] == 'a' && map[0][1] == 'a' && map[1][1] == 'a' && map[2][2] == 'a' && map[1][2] == 'b' && map[2][1] == 'b' && map[0][0] == 'b')//三毒性
			{
				AIbuding(3);//7
				q = 0;
			}
			else if (map[1][0] == 'a' && map[2][1] == 'a' && map[1][1] == 'a' && map[0][2] == 'a' && map[1][2] == 'b' && map[2][0] == 'b' && map[0][1] == 'b')//三毒性
			{
				AIbuding(0);//9
				q = 0;
			}
			else if (map[1][0] == 'a' && map[2][1] == 'a' && map[1][1] == 'a' && map[0][2] == 'a' && map[1][2] == 'b' && map[2][0] == 'b' && map[0][1] == 'b')//三毒性
			{
				AIbuding(0);//9
				q = 0;
			}
			else if (map[1][0] == 'a' && map[2][2] == 'a' && map[1][1] == 'a' && map[0][2] == 'a' && map[1][2] == 'b' && map[2][0] == 'b' && map[0][0] == 'b')//三毒性
			{
				AIbuding(2);//8
				q = 0;
			}
			else if (map[2][0] == 'a' && map[2][2] == 'a' && map[1][1] == 'a' && map[0][1] == 'a' && map[0][2] == 'b' && map[2][1] == 'b' && map[0][0] == 'b')//三毒性
			{
				AIbuding(4);//6
				q = 0;
			}
			else if (map[2][1] == 'a' && map[2][2] == 'a' && map[1][0] == 'a' && map[1][2] == 'a' && map[0][1] == 'b' && map[1][1] == 'b' && map[1][2] == 'b')//三毒性
			{
				AIbuding(7);//6
				q = 0;
			}
			else if (q == 1)
			{
				AIbuding_3();
			}
			if (n == 0)
			{
				AIbuding_2();
			}
		}
		k = 0;//b下完让k等于0,a才能继续下
	}
}

void updatenotautomation_2()	    // 双人模式下的手动的更新
{
	int exit = 0;
	cleardevice();
	while (exit != 1)
	{
		// 获取一条鼠标消息
		m = GetMouseMsg();
		cleardevice();
		switch (m.uMsg)
		{
		case WM_LBUTTONDOWN://点击左键下棋将w变成a
			if (k == 0)//k = 0,轮到a下
			{
				if (m.y < 200 && m.y>0)//在第一排
				{
					if (m.x > 0 && m.x < 200 && map[0][0] == 'w')//在第1个格子
					{
						map[0][0] = 'a';
						exit = 1;//退出循环
					}
					else if (m.x > 200 && m.x < 400 && map[0][1] == 'w')//在第2个格子
					{
						map[0][1] = 'a';
						exit = 1;//退出循环
					}
					else if (m.x > 400 && m.x < 600 && map[0][2] == 'w')//在第3个格子
					{
						map[0][2] = 'a';
						exit = 1;//退出循环
					}
				}
				else if (m.y < 400 && m.y>200)//在第2排
				{
					if (m.x > 0 && m.x < 200 && map[1][0] == 'w')//在第4个格子
					{
						map[1][0] = 'a';
						exit = 1;//退出循环
					}
					else if (m.x > 200 && m.x < 400 && map[1][1] == 'w')//在第5个格子
					{
						map[1][1] = 'a';
						exit = 1;//退出循环
					}
					else if (m.x > 400 && m.x < 600 && map[1][2] == 'w')//在第6个格子
					{
						map[1][2] = 'a';
						exit = 1;//退出循环
					}
				}
				else if (m.y < 600 && m.y>400)//在第3排
				{
					if (m.x > 0 && m.x < 200 && map[2][0] == 'w')//在第7个格子
					{
						map[2][0] = 'a';
						exit = 1;//退出循环
					}
					else if (m.x > 200 && m.x < 400 && map[2][1] == 'w')//在第8个格子
					{
						map[2][1] = 'a';
						exit = 1;//退出循环
					}
					else if (m.x > 400 && m.x < 600 && map[2][2] == 'w')//在第9个格子
					{
						map[2][2] = 'a';
						exit = 1;//退出循环
					}
				}
				k = 1;//令k = 1,轮到b下。
			}
			else if (k == 1)//k = 0,轮到 b 下
			{
				if (m.y < 200 && m.y > 0)//在第1排
				{
					if (m.x > 0 && m.x < 200 && map[0][0] == 'w')//在第1个格子
					{
						map[0][0] = 'b';
						exit = 1;//退出循环
					}
					else if (m.x > 200 && m.x < 400 && map[0][1] == 'w')//在第2个格子
					{
						map[0][1] = 'b';
						exit = 1;//退出循环
					}
					else if (m.x > 400 && m.x < 600 && map[0][2] == 'w')//在第3个格子
					{
						map[0][2] = 'b';
						exit = 1;//退出循环
					}
				}
				else if (m.y < 400 && m.y > 200)//在第2排
				{
					if (m.x > 0 && m.x < 200 && map[1][0] == 'w')//在第4个格子
					{
						map[1][0] = 'b';
						exit = 1;//退出循环
					}
					else if (m.x > 200 && m.x < 400 && map[1][1] == 'w')//在第5个格子
					{
						map[1][1] = 'b';
						exit = 1;//退出循环
					}
					else if (m.x > 400 && m.x < 600 && map[1][2] == 'w')//在第6个格子
					{
						map[1][2] = 'b';
						exit = 1;//退出循环
					}
				}
				else if (m.y < 600 && m.y>400)//在第3排
				{
					if (m.x > 0 && m.x < 200 && map[2][0] == 'w')//在第7个格子
					{
						map[2][0] = 'b';
						exit = 1;//退出循环
					}
					else if (m.x > 200 && m.x < 400 && map[2][1] == 'w')//在第8个格子
					{
						map[2][1] = 'b';
						exit = 1;//退出循环
					}
					else if (m.x > 400 && m.x < 600 && map[2][2] == 'w')//在第9个格子
					{
						map[2][2] = 'b';
						exit = 1;//退出循环
					}
				}
				k = 0;
			}
			break;
		case WM_RBUTTONUP:// 按鼠标右键撤回将a变成w
			break;
		}
	}
}
void wordawin()//显示a赢文字存放于判断胜负函数
{
	setbkmode(TRANSPARENT);//显示透明文字
	settextcolor(BLUE);//设置字体颜色
	settextstyle(80, 0, _T("宋体"));
	outtextxy(80, 200, _T("蓝棋胜利"));
	w = 1;
	FlushBatchDraw();
}
void wordbwin()//显示b赢文字存放于判断胜负函数
{
	setbkmode(TRANSPARENT);//显示透明文字
	settextcolor(RED);//设置字体颜色
	settextstyle(80, 0, _T("宋体"));
	outtextxy(80, 200, _T("红棋胜利"));
	w = 1;
	FlushBatchDraw();
}
void wordwin()//显示
{
	setbkmode(TRANSPARENT);//显示透明文字
	settextcolor(GREEN);//设置字体颜色
	settextstyle(80, 0, _T("宋体"));
	outtextxy(80, 200, _T("平局"));
	FlushBatchDraw();
	Sleep(2000);
}
void panduanshengfu_a()//判断a的胜负函数存放于自动更新函数内
{
	if (map[0][0] == 'a' && map[0][1] == 'a' && map[0][2] == 'a')//1排a胜
	{
		wina = 1;
		wordawin();
		w = 1;
	}
	else if (map[1][0] == 'a' && map[1][1] == 'a' && map[1][2] == 'a')//2排a胜
	{
		wina = 1;
		wordawin();
		w = 1;
	}
	else if (map[2][0] == 'a' && map[2][1] == 'a' && map[2][2] == 'a')//3排a胜
	{
		wina = 1;
		wordawin();
		w = 1;
	}
	else if (map[0][0] == 'a' && map[1][0] == 'a' && map[2][0] == 'a')//1列a胜
	{
		wina = 1;
		wordawin();
		w = 1;
	}
	else if (map[0][1] == 'a' && map[1][1] == 'a' && map[2][1] == 'a')//2列a胜
	{
		wina = 1;
		wordawin();
		w = 1;
	}
	else if (map[0][2] == 'a' && map[1][2] == 'a' && map[2][2] == 'a')//3列a胜
	{
		wina = 1;
		wordawin();
		w = 1;
	}
	else if (map[0][0] == 'a' && map[1][1] == 'a' && map[2][2] == 'a')//左斜a胜
	{
		wina = 1;
		wordawin();
		w = 1;
	}
	else if (map[0][2] == 'a' && map[1][1] == 'a' && map[2][0] == 'a')//右斜a胜
	{
		wina = 1;
		wordawin();
		w = 1;
	}
}
void panduanshengfu_b()//判断b的胜负函数存放于自动更新函数内
{
	if (map[0][0] == 'b' && map[0][1] == 'b' && map[0][2] == 'b')//1排b胜
	{
		winb = 1;
		wordbwin();
		w = 1;
	}
	else if (map[1][0] == 'b' && map[1][1] == 'b' && map[1][2] == 'b')//2排b胜
	{
		winb = 1;
		wordbwin();
		w = 1;
	}
	else if (map[2][0] == 'b' && map[2][1] == 'b' && map[2][2] == 'b')//3排b胜
	{
		winb = 1;
		wordbwin();
		w = 1;
	}
	else if (map[0][0] == 'b' && map[1][0] == 'b' && map[2][0] == 'b')//1列b胜
	{
		winb = 1;
		wordbwin();
		w = 1;
	}
	else if (map[0][1] == 'b' && map[1][1] == 'b' && map[2][1] == 'b')//2列b胜
	{
		winb = 1;
		wordbwin();
		w = 1;
	}
	else if (map[0][2] == 'b' && map[1][2] == 'b' && map[2][2] == 'b')//3列b胜
	{
		winb = 1;
		wordbwin();
		w = 1;
	}
	else if (map[0][0] == 'b' && map[1][1] == 'b' && map[2][2] == 'b')//左斜b胜
	{
		winb = 1;
		wordbwin();
		w = 1;
	}
	else if (map[0][2] == 'b' && map[1][1] == 'b' && map[2][0] == 'b')//右斜b胜
	{
		winb = 1;
		wordbwin();
		w = 1;
	}
}
void updateautomation()	 // 自动更新
{
	panduanshengfu_a();//判断a赢的所有可能性
	panduanshengfu_b();//判断b赢的所有可能性
}
void gameover()		//游戏结束
{
	closegraph();
}
int main() // 主函数
{
	gamebegin();  	// 初始化
	if (mood == 1)//单人模式+++++++
	{
		while (true)       // 一直循环
		{
			gamebegin_1();  	// 二次初始化
			if (mood == 1)
			{
				while (1)
				{
					updateautomation(); // 与输入无关的更新(单双人都可目前的功能只负责判断胜负)
					if (w == 1) { Sleep(2000); break; }
					gameshow();  // 显示(单双人都可)
					if (q == 0) { wordwin(); break; }
					updatenotautomation_1();    // 与输入有关的更新_1代表单人模式
					Artificial_Intelligence();//人工智能函数——让ai与自己对弈,实现b堵截功能
				}
			}
			if (mood == 2)
			{
				while (1)
				{
					updateautomation(); // 与输入无关的更新(单双人都可目前的功能只负责判断胜负)
					if (w == 1) { Sleep(2000); break; }
					gameshow();  // 显示(单双人都可)
					if (q == 0) { Sleep(1000); break; }
					updatenotautomation_2();    // 与输入有关的更新_2代表双人
				}

			}
		}
	}
	else if (mood == 2)//双人模式++++++++
	{
		while (true)       // 一直循环
		{
			gamebegin_1();  	// 二次初始化
			if (mood == 2)
			{
				while (1)
				{
					updateautomation(); // 与输入无关的更新(单双人都可目前的功能只负责判断胜负)
					if (w == 1) { Sleep(2000); break; }
					gameshow();  // 显示(单双人都可)
					if (q == 0) { Sleep(1000); break; }
					updatenotautomation_2();    // 与输入有关的更新_2代表双人
				}

			}
			if (mood == 1)
			{
				while (1)
				{
					updateautomation(); // 与输入无关的更新(单双人都可目前的功能只负责判断胜负)
					if (w == 1) { Sleep(2000); break; }
					gameshow();  // 显示(单双人都可)
					if (q == 0) { wordwin(); break; }
					updatenotautomation_1();    // 与输入有关的更新_1代表单人模式
					Artificial_Intelligence();//人工智能函数——让ai与自己对弈,实现b堵截功能
				}
			}
		}
	}
	gameover();
	return 0;
}

  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2021-08-27 12:12:28  更:2021-08-27 12:12:56 
 
开发: 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年5日历 -2024/5/3 17:15:00-

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