【五子棋】纯C语言 不含MFC制作

这篇文章的知识落后了
这是新版机器人的做法
比这个的更简单、高效
https://blog.csdn.net/Turm_Xsk/article/details/106116830

本蒟蒻第二个制作的游戏,奈何不会用MFC,就自己摸索出了纯C语言制作的五子棋,正在努力学习。网上都有制作教程,而且比我的跟详实美观,我就贴上几个核心程序吧,包括机器人棋手。
以下是效果图
在这里插入图片描述

光标显示坐标

void Pos(int x, int y) {//设置光标位置
	COORD pos;
	//HANDLE hOutput;
	pos.X = x;//光标要设置的位置x
	pos.Y = y;//光标要设置的位置y
	HANDLE hOutput = GetStdHandle(STD_OUTPUT_HANDLE);//使用GetStdHandle(STD_OUTPUT_HANDLE)来获取标准输出的句柄
	SetConsoleCursorPosition(hOutput, pos);//设置光标位置
	/*
typedef struct _COORD {
	SHORT X;
	SHORT Y;
} COORD, *PCOORD;
*/
}

生成地图

void CreatMap() {//生成游戏初始地图
	for (int j = 2; j < 16*3 + 2; j += 3) { // 横
		for (int i = 8; i <= 16 * 6 + 2; i++) {
			Pos(i, j);
			printf("_");
		}
	}
	for (int i = 8; i < 16*6 + 5; i += 6) { // 竖
		for (int j = 3; j < 16 * 3; j++) {
			Pos(i, j);
			printf("|");
		}
	}
	//装饰
	
	for(int i = 7; i < 16*6 + 4; i++) {
		Pos(i, 1);
		printf("_");
		Pos(i, 16*3);
		printf("_");
	}
	for(int j = 2; j < 16*3 + 1; j++) {
		Pos(7, j);
		printf("|");
		Pos(16*6 + 3, j);
		printf("|");
	} 
}

人机对战循环块

void RobotGame(int sum) {//人机对战 
	int op = 1; // 黑子 为 1  白子 为 2 
	//sum判断平局情况 
	Pos(130, 2);
	printf("按住空格悔棋 只能悔棋一步");
	Pos(130, 4);
	printf("棋局未刷新 点击右键刷新");
	Pos(130, 6);
	printf("全屏开始游戏 点击右键下棋");
	Pos(130, 8);
	printf("自制机器人 太笨别怪");
	Pos(130, 10);
	printf("点击棋盘边缘 弃局"); 
	Pos(130, 12);
	printf("按住回车保存棋局");
	RankListinGame();
	while (1) {
		if (GetAsyncKeyState(VK_RETURN))	SaveRobotGame();
		if (GetAsyncKeyState(VK_SPACE) && sum % 2 == 0 && sum) {
			Map[pre1x][pre1y] = Map[pre2x][pre2y] = 0;
			BlankPut(10 + pre1x * 6, 3 + pre1y * 3);
			BlankPut(10 + pre2x * 6, 3 + pre2y * 3);
			sum -= 2;
			Sleep(400);
		}
		if (op == 1) {//黑子下 
			POINT pt;
			GetCursorPos(&pt);
			Pos(130, 14);
			int x = (pt.x - 70)/48, y = (pt.y - 70)/48;
			if (x >= 0 && y >= 0 && x < 15 && y < 15)	printf("当前玩家下棋位置  x:%4d   y:%4d", x + 1, y + 1);
			if (GetAsyncKeyState(VK_RBUTTON) && CheckArray(x, y) && Map[x][y] == 0) {
				if (x >= 0 && y >= 0 && x < 15 && y < 15) {
					Map[x][y] = 1;
					BlackPut(10 + 6*x, 3 + 3*y);
				}
				if (CheckWin(x, y, op)) {
					Pos(113, 44);
					printf("玩家胜        ");
					WinTips(op);
					system("pause");
					system("cls");
					RankEnd(op, 500 - 2*sum);
					system("pause");
					return;
				}
				op = 2;
				Sleep(100);
				sum++;
				pre1x = x, pre1y = y;
			}
		} else {// 白子下(机器人下) 
			int x, y;
			if (RobotPut()) {
				Pos(113, 44);
				printf("机器人获得胜利     ");
				WinTips(op);
				system("pause");
				system("cls");
				RankEnd(op, sum);
				system("pause");
				return;
			}
			op = 1;
			Sleep(100);
			sum++;
		}
		if (sum >= 15 * 15) {
			system("cls");
			Pos(113, 44);
			printf("平局 ");
			system("pause");
			return;

		}
	}
}

判断胜利函数

从上一个下棋的点开始 ,向上下、左右、左斜、右斜四个角度向两方探索,看是否满足胜利条件,无须遍历棋盘。

bool CheckWin(int x, int y, int op) {//判断胜利程序 从下棋起电两头扫 
	int i1 = x, i2 = x, cnt1 = 0;
	while (Map[i1][y] == op && i1 < 15) {//横向 
		cnt1++;
		i1++;
	}
	while (Map[i2][y] == op && i2 >= 0) {
		cnt1++;
		i2--;
	}
	if (cnt1 >= 6)	return true;
	int j1 = y, j2 = y, cnt2 = 0;
	while (Map[x][j1] == op && j1 < 15) {//竖向 
		cnt2++;
		j1++;
	}
	while (Map[x][j2] == op && j2 >= 0) {
		cnt2++;
		j2--;
	}
	if (cnt2 >= 6)	return true;
	int a1 = x, a2 = x, b1 = y, b2 = y, cnt3 = 0;
	while (Map[a1][b1] == op && a1 < 15 && b1 < 15) {//斜向 
		cnt3++;
		a1++;
		b1++;
	}
	while (Map[a2][b2] == op && a2 >= 0 && b2 >= 0) {
		cnt3++;
		a2--;
		b2--;
	}
	if (cnt3 >= 6)	return true;
	a1 = x, a2 = x, b1 = y, b2 = y, cnt3 = 0;
	while (Map[a1][b1] == op && a1 < 15 && b1 >= 0) {//斜向 
		cnt3++;
		a1++;
		b1--;
	}
	while (Map[a2][b2] == op && a2 >= 0 && b2 <= 15) {
		cnt3++;
		a2--;
		b2++;
	}
	if (cnt3 >= 6)	return true;
	return false;

}

机器人下棋模块

这个当然是最重要的,,,数据量小的棋盘15*15,贪心算法是机器人的核心思路,不用担心复杂度,就一遍一遍地扫棋盘, 看起来吓人的1000行码量,其实大多都是复制粘贴的!!!!

bool RobotPut() {//机器人程序  贪心算法   先凑多后凑少   攻击与防御同等权重 
	int x = 0, y = 0, flag = 1;
	srand((unsigned)time(NULL));
	while (Map[x][y] != 0 || x <= 0 || y <= 0 || x >= 14 || y >= 14)	x = rand() % 15, y = rand() % 15;

///	
	for (int i = 0; i < 15 && flag; i++) {//进攻横4 
		for (int j = 0; j + 3 < 15 && flag; j++) {
			if (Map[i][j] == 2 && Map[i][j + 1] == 2 && Map[i][j + 2] == 2 && Map[i][j + 3] == 2) {
				if ((j - 1 >= 0 && Map[i][j - 1] == 0)) {
					x = i, y = j - 1, flag = 0;
					break;
				}
				if ((j + 4 < 15 && Map[i][j + 4] == 0)) {
					x = i, y = j + 4, flag = 0;
					break;
				}
			}
			if (Map[i][j] == 2 && Map[i][j + 2] == 2 && Map[i][j + 4] == 2 && (Map[i][j + 1] == 2 || Map[i][j + 3] == 2) && j + 4 < 15) {
				if (Map[i][j + 1] == 0) {
					x = i, y = j + 1, flag = 0;
					break;
				}
				if (Map[i][j + 3] == 0) {
					x = i, y = j + 3, flag = 0;
					break;
				}
			}
			if (Map[i][j] == 2 && Map[i][j + 1] == 2 && Map[i][j + 3] == 2 && Map[i][j + 4] == 2 && j + 4 < 15) {
				if (Map[i][j + 2] == 0) {
					x = i, y = j + 2, flag = 0;
					break;
				}
			}
		}
	}
	for(int j = 0; j < 15 && flag; j++) {//进攻竖4 
		for (int i = 0; i + 3 < 15 && flag; i++) {
			if (Map[i][j] == 2 && Map[i + 1][j] == 2 && Map[i + 2][j] == 2 && Map[i + 3][j] == 2) {
				if ((i - 1 >= 0 && Map[i - 1][j] == 0)) {
					x = i - 1, y = j, flag = 0;
					break;
				}
				if ((i + 4 < 15 && Map[i + 4][j] == 0)) {
					x = i + 4, y = j, flag = 0;
					break;
				}

			}
			if (Map[i][j] == 2 && Map[i + 2][j] == 2 && Map[i + 4][j] == 2 && (Map[i + 1][j] == 2 || Map[i + 3][j] == 2) && i + 4 < 15) {
				if (Map[i + 1][j] == 0) {
					x = i + 1, y = j, flag = 0;
					break;
				}
				if (Map[i + 3][j] == 0) {
					x = i + 3, y = j, flag = 0;
					break;
				}
			}
			if (Map[i][j] == 2 && Map[i + 1][j] == 2 && Map[i + 3][j] == 2 && Map[i + 4][j] == 2 && i + 4 < 15) {
				if (Map[i + 2][j] == 0) {
					x = i + 2, y = j, flag = 0;
					break;
				}
			}
		}
	}
	
	for (int i = 0; flag && i + 3 < 15; i++) {//进攻左斜4 
		for (int j = 0; flag && j + 3 < 15; j++) {
			if (Map[i][j] == 2 && Map[i + 1][j + 1] == 2 && Map[i + 2][j + 2] == 2 && Map[i + 3][j + 3] == 2) {
				if (i - 1 >= 0 && j - 1 >= 0 && Map[i - 1][j - 1] == 0) {
					x = i - 1, y = j - 1, flag = 0;
					break;
				}
				if (i + 4 < 15 && j + 4 < 15 && Map[i + 4][j + 4] == 0) {
					x = i + 4, y = j + 4, flag = 0;
					break;
				}
			}
			if (Map[i][j] == 2 && Map[i + 2][j + 2] == 2 && Map[i + 4][j + 4] == 2 && (Map[i + 1][j + 1] == 2 || Map[i + 3][j + 3] == 2) && i + 4 < 15 && j + 4 < 15) {
				if (Map[i + 1][j + 1] == 0) {
					x = i + 1, y = j + 1, flag = 0;
					break;
				}
				if (Map[i + 3][j + 3] == 0) {
					x = i + 3, y = j + 3, flag = 0;
					break;
				}
			}
			if (Map[i][j] == 2 && Map[i + 1][j + 1] == 2 && Map[i + 3][j + 3] == 2 && Map[i + 4][j + 4] == 2 && i + 4 < 15 && j + 4 < 15) {
				if (Map[i + 2][j + 2] == 0) {
					x = i + 2, y = j + 2, flag = 0;
					break;
				}
			}
		}
	}
	
	for (int j = 14; flag && j - 3 >= 0; j--) {//进攻右斜4 
		for (int i = 0; flag && i + 3 < 15; i++) {
			if (Map[i][j] == 2 && Map[i + 1][j - 1] == 2 && Map[i + 2][j - 2] == 2 && Map[i + 3][j - 3] == 2) {
				if (i - 1 >= 0 && j + 1 < 15 && Map[i - 1][j + 1] == 0) {
					x = i - 1, y = j + 1, flag = 0;
					break;
				}
				if (i + 4 < 15 && j - 4 >= 0 && Map[i + 4][j - 4] == 0) {
					x = i + 4, y = j - 4, flag = 0;
					break;
				}
			}
			if (Map[i][j] == 2 && Map[i + 2][j - 2] == 2 && Map[i + 4][j - 4] == 2 && (Map[i + 1][j - 1] == 2 || Map[i + 3][j - 3] == 2) && i + 4 < 15 && j - 4 >= 0) {
				if (Map[i + 1][j - 1] == 0) {
					x = i + 1, y = j - 1, flag = 0;
					break;
				}
				if (Map[i + 3][j - 3] == 0) {
					x = i + 3, y = j - 3, flag = 0;
					break;
				}
			}
			if (Map[i][j] == 2 && Map[i + 1][j - 1] == 2 && Map[i + 3][j - 3] == 2 && Map[i + 4][j - 4] == 2 && i + 4 < 15 && j - 4 >= 0) {
				if (Map[i + 2][j - 2] == 0) {
					x = i + 2, y = j - 2, flag = 0;
					break;
				}
			}
		}
	}
	///	
	for (int i = 0; i < 15 && flag; i++) {//防御竖4 
		for (int j = 0; j + 3 < 15 && flag; j++) {
			if (Map[i][j] == 1 && Map[i][j + 1] == 1 && Map[i][j + 2] == 1 && Map[i][j + 3] == 1) {
				if ((j - 1 >= 0 && Map[i][j - 1] == 0)) {
					x = i, y = j - 1, flag = 0;
					break;
				}
				if ((j + 4 < 15 && Map[i][j + 4] == 0)) {
					x = i, y = j + 4, flag = 0;
					break;
				}
			}
			if (Map[i][j] == 1 && Map[i][j + 2] == 1 && Map[i][j + 4] == 1 && (Map[i][j + 1] == 1 || Map[i][j + 3] == 1) && j + 4 < 15) {
				if (Map[i][j + 1] == 0) {
					x = i, y = j + 1, flag = 0;
					break;
				}
				if (Map[i][j + 3] == 0) {
					x = i, y = j + 3, flag = 0;
					break;
				}
			}
			if (Map[i][j] == 1 && Map[i][j + 1] == 1 && Map[i][j + 3] == 1 && Map[i][j + 4] == 1 && j + 4 < 15) {
				if (Map[i][j + 2] == 0) {
					x = i, y = j + 2, flag = 0;
					break;
				}
			}
		}
	}
	
	for (int j = 0; j < 15 && flag; j++) {//防御横4 
		for (int i = 0; i + 3 < 15 && flag; i++) {
			if (Map[i][j] == 1 && Map[i + 1][j] == 1 && Map[i + 2][j] == 1 && Map[i + 3][j] == 1) {
				if ((i - 1 >= 0 && Map[i - 1][j] == 0)) {
					x = i - 1, y = j, flag = 0;
					break;
				}
				if ((i + 4 < 15 && Map[i + 4][j] == 0)) {
					x = i + 4, y = j, flag = 0;
					break;
				}

			}
			if (Map[i][j] == 1 && Map[i + 2][j] == 1 && Map[i + 4][j] == 1 && (Map[i + 1][j] == 1 || Map[i + 3][j] == 1) && i + 4 < 15) {
				if (Map[i + 1][j] == 0) {
					x = i + 1, y = j, flag = 0;
					break;
				}
				if (Map[i + 3][j] == 0) {
					x = i + 3, y = j, flag = 0;
					break;
				}
			}
			if (Map[i][j] == 1 && Map[i + 1][j] == 1 && Map[i + 3][j] == 1 && Map[i + 4][j] == 1 && i + 4 < 15) {
				if (Map[i + 2][j] == 0) {
					x = i + 2, y = j, flag = 0;
					break;
				}
			}
		}
	}
	
	for (int i = 0; flag && i + 3 < 15; i++) {//防御左斜4 
		for (int j = 0; flag && j + 3 < 15; j++) {
			if (Map[i][j] == 1 && Map[i + 1][j + 1] == 1 && Map[i + 2][j + 2] == 1 && Map[i + 3][j + 3] == 1) {
				if (i - 1 >= 0 && j + 1 >= 0 && Map[i - 1][j - 1] == 0) {
					x = i - 1, y = j - 1, flag = 0;
					break;
				}
				if (i + 4 < 15 && j + 4 < 15 && Map[i + 4][j + 4] == 0) {
					x = i + 4, y = j + 4, flag = 0;
					break;
				}
			}
			if (Map[i][j] == 1 && Map[i + 2][j + 2] == 1 && Map[i + 4][j + 4] == 1 && (Map[i + 1][j + 1] == 1 || Map[i + 3][j + 3] == 1) && i + 4 < 15 && j + 4 < 15) {
				if (Map[i + 1][j + 1] == 0) {
					x = i + 1, y = j + 1, flag = 0;
					break;
				}
				if (Map[i + 3][j + 3] == 0) {
					x = i + 3, y = j + 3, flag = 0;
					break;
				}
			}
			if (Map[i][j] == 1 && Map[i + 1][j + 1] == 1 && Map[i + 3][j + 3] == 1 && Map[i + 4][j + 4] == 1 && i + 4 < 15 && j + 4 < 15) {
				if (Map[i + 2][j + 2] == 0) {
					x = i + 2, y = j + 2, flag = 0;
					break;
				}
			}
		}
	}
	
	for (int j = 14; flag && j - 3 >= 0; j--) {//防御右斜4 
		for (int i = 0; flag && i + 3 < 15; i++) {
			if (Map[i][j] == 1 && Map[i + 1][j - 1] == 1 && Map[i + 2][j - 2] == 1 && Map[i + 3][j - 3] == 1) {
				if (i - 1 >= 0 && j + 1 < 15 && Map[i - 1][j + 1] == 0) {
					x = i - 1, y = j + 1, flag = 0;
					break;
				}
				if (i + 4 < 15 && j - 4 >= 0 && Map[i + 4][j - 4] == 0) {
					x = i + 4, y = j - 4, flag = 0;
					break;
				}
			}
			if (Map[i][j] == 1 && Map[i + 2][j - 2] == 1 && Map[i + 4][j - 4] == 1 && (Map[i + 1][j - 1] == 1 || Map[i + 3][j - 3] == 1) && i + 4 < 15 && j - 4 >= 0) {
				if (Map[i + 1][j - 1] == 0) {
					x = i + 1, y = j - 1, flag = 0;
					break;
				}
				if (Map[i + 3][j - 3] == 0) {
					x = i + 3, y = j - 3, flag = 0;
					break;
				}
			}
			if (Map[i][j] == 1 && Map[i + 1][j - 1] == 1 && Map[i + 3][j - 3] == 1 && Map[i + 4][j - 4] == 1 && i + 4 < 15 && j - 4 >= 0) {
				if (Map[i + 2][j - 2] == 0) {
					x = i + 2, y = j - 2, flag = 0;
					break;
				}
			}
		}
	}
	///	
	
	for(int i = 0; i < 15&&flag; i++) {//特殊阵型 - 防御 
		for(int j = 0; j < 15&&flag; j++) {
			if(Map[i][j] == 0&&i + 2 < 15&&j + 2 < 15&&Map[i + 1][j] == 1&&Map[i + 2][j] == 1&&Map[i][j + 1] == 1&&Map[i][j + 2] == 1) {
				x = i, y = j, flag = 0;
			}
			if(Map[i][j] == 0&&i - 2 >= 0&&j - 2 >= 0&&Map[i - 1][j] == 1&&Map[i - 2][j] == 1&&Map[i][j - 1] == 1&&Map[i][j - 2] == 1) {
				x = i, y = j, flag = 0;
			}
			if(Map[i][j] == 0&&i + 2 < 15&&j - 2 >= 0&&Map[i + 1][j] == 1&&Map[i + 2][j] == 1&&Map[i][j - 1] == 1&&Map[i][j - 2] == 1) {
				x = i, y = j, flag = 0;
			}
			if(Map[i][j] == 0&&i - 2 >= 0&&j + 2 < 15&&Map[i - 1][j] == 1&&Map[i - 2][j] == 1&&Map[i][j + 1] == 1&&Map[i][j + 2] == 1) {
				x = i, y = j, flag = 0;
			}
			if(Map[i][j] == 0&&j + 2 < 15&&i + 2 < 15&&i - 2 >= 0&&Map[i - 1][j + 1] == 1&&Map[i - 2][j + 2] == 1&&Map[i + 1][j + 1] == 1&&Map[i + 2][j + 2] == 1) {
				x = i, y = j, flag = 0;
			}
			if(Map[i][j] == 0&&j - 2 >= 0&&i + 2 < 15&&i - 2 >= 0&&Map[i - 1][j - 1] == 1&&Map[i - 2][j - 2] == 1&&Map[i + 1][j - 1] == 1&&Map[i + 2][j - 2] == 1) {
				x = i, y = j, flag = 0;
			}
			if(Map[i][j] == 0&&i + 2 < 15&&j - 2 >= 0&&j + 2 < 15&&Map[i + 1][j - 1] == 1&&Map[i + 2][j - 2] == 1&&Map[i + 1][j + 1] == 1&&Map[i + 2][j + 2] == 1) {
				x = i, y = j, flag = 0;
			}
			if(Map[i][j] == 0&&i - 2 >= 0&&j - 2 >= 0&&j + 2 < 15&&Map[i - 1][j - 1] == 1&&Map[i - 2][j - 2] == 1&&Map[i - 1][j + 1] == 1&&Map[i - 2][j + 2] == 1) {
				x = i, y = j, flag = 0;
			}
		}
	} 
	for(int i = 0; i < 15&&flag; i++) {//特殊阵型 - 攻击 
		for(int j = 0; j < 15&&flag; j++) {
			if(Map[i][j] == 0&&i + 2 < 15&&j + 2 < 15&&Map[i + 1][j] == 2&&Map[i + 2][j] == 2&&Map[i][j + 1] == 2&&Map[i][j + 2] == 2) {
				x = i, y = j, flag = 0;
			}
			if(Map[i][j] == 0&&i - 2 >= 0&&j - 2 >= 0&&Map[i - 1][j] == 2&&Map[i - 2][j] == 2&&Map[i][j - 1] == 2&&Map[i][j - 2] == 2) {
				x = i, y = j, flag = 0;
			}
			if(Map[i][j] == 0&&i + 2 < 15&&j - 2 >= 0&&Map[i + 1][j] == 2&&Map[i + 2][j] == 2&&Map[i][j - 1] == 2&&Map[i][j - 2] == 2) {
				x = i, y = j, flag = 0;
			}
			if(Map[i][j] == 0&&i - 2 >= 0&&j + 2 < 15&&Map[i - 1][j] == 2&&Map[i - 2][j] == 2&&Map[i][j + 1] == 2&&Map[i][j + 2] == 2) {
				x = i, y = j, flag = 0;
			}
			if(Map[i][j] == 0&&j + 2 < 15&&i + 2 < 15&&i - 2 >= 0&&Map[i - 1][j + 1] == 2&&Map[i - 2][j + 2] == 2&&Map[i + 1][j + 1] == 2&&Map[i + 2][j + 2] == 2) {
				x = i, y = j, flag = 0;
			}
			if(Map[i][j] == 0&&j - 2 >= 0&&i + 2 < 15&&i - 2 >= 0&&Map[i - 1][j - 1] == 2&&Map[i - 2][j - 2] == 2&&Map[i + 1][j - 1] == 2&&Map[i + 2][j - 2] == 2) {
				x = i, y = j, flag = 0;
			}
			if(Map[i][j] == 0&&i + 2 < 15&&j - 2 >= 0&&j + 2 < 15&&Map[i + 1][j - 1] == 2&&Map[i + 2][j - 2] == 2&&Map[i + 1][j + 1] == 2&&Map[i + 2][j + 2] == 2) {
				x = i, y = j, flag = 0;
			}
			if(Map[i][j] == 0&&i - 2 >= 0&&j - 2 >= 0&&j + 2 < 15&&Map[i - 1][j - 1] == 2&&Map[i - 2][j - 2] == 2&&Map[i - 1][j + 1] == 2&&Map[i - 2][j + 2] == 2) {
				x = i, y = j, flag = 0;
			}
		}
	} 
	for(int i = 1; i < 14; i++) {//特殊阵型2 - 防御 
		for(int j = 1; j < 14; j++) {
			if(Map[i][j] == 0&&Map[i + 1][j] == 1&&Map[i][j + 1] == 1&&Map[i - 1][j] == 1&&Map[i][j - 1] == 1) {
				x = i, y = j, flag = 0;
			} 
		}
	}
	
	///	
	for (int i = 0; i < 15 && flag; i++) {//防御竖3 
		for (int j = 0; j + 2 < 15 && flag; j++) {
			if (Map[i][j] == 1 && Map[i][j + 1] == 1 && Map[i][j + 2] == 1&&((Map[i][j - 2] == 0&&Map[i][j - 1] == 0&&j - 2 >= 0)||(Map[i][j + 3] == 0&&Map[i][j - 1] == 0&&j + 3 < 15&&j - 1 >= 0)||(Map[i][j + 3] == 0&&Map[i][j + 4] == 0&&j + 4 < 15))) {
				if ((j - 1 >= 0 && Map[i][j - 1] == 0)) {
					x = i, y = j - 1, flag = 0;
					break;
				}
				if ((j + 3 < 15 && Map[i][j + 3] == 0)) {
					x = i, y = j + 3, flag = 0;
					break;
				}
			}
			
			if ((Map[i][j - 1] == 0||Map[i][j + 4] == 0)&&Map[i][j] == 1 && Map[i][j + 3] == 1 && (Map[i][j + 1] == 1||Map[i][j + 2] == 1) && j + 4 < 15&& j - 1 >= 0) {
				if (Map[i][j + 1] == 0) {
					x = i, y = j + 1, flag = 0;
					break;
				}
				if (Map[i][j + 2] == 0) {
					x = i, y = j + 2, flag = 0;
					break;
				}
			}
			
			if (Map[i][j] == 1 && Map[i][j + 2] == 1 && Map[i][j + 4] == 1 && j + 4 < 15) {
				if (Map[i][j + 1] == 0) {
					x = i, y = j + 1, flag = 0;
					break;
				}
				if (Map[i][j + 3] == 0) {
					x = i, y = j + 3, flag = 0;
					break;
				}
			}
		}
	}
	
	for (int j = 0; j < 15 && flag; j++) {//防御横3 
		for (int i = 0; i + 2 < 15 && flag; i++) {
			if (Map[i][j] == 1 && Map[i + 1][j] == 1 && Map[i + 2][j] == 1&&((Map[i - 2][j] == 0&&Map[i - 1][j] == 0&&i - 2 >= 0)||(Map[i + 3][j] == 0&&Map[i - 1][j] == 0&&i + 3 < 15&&i - 1 >= 0)||(Map[i + 3][j] == 0&&Map[i + 4][j] == 0&&i + 4 < 15))) {
				if ((i - 1 >= 0 && Map[i - 1][j] == 0)) {
					x = i - 1, y = j, flag = 0;
					break;
				}
				if ((i + 3 < 15 && Map[i + 3][j] == 0)) {
					x = i + 3, y = j, flag = 0;
					break;
				}
			}
			
			if ((Map[i - 1][j] == 0||Map[i + 3][j] == 0)&&Map[i][j] == 1 && (Map[i + 1][j] == 1||Map[i + 2][j] == 1) && Map[i + 3][j] == 1 && i + 4 < 15&& i - 1 >= 0) {
				if (Map[i + 1][j] == 0) {
					x = i + 1, y = j, flag = 0;
					break;
				}
				if (Map[i + 2][j] == 0) {
					x = i + 2, y = j, flag = 0;
					break;
				}
			}
			
			if (Map[i][j] == 1 && Map[i + 2][j] == 1 && Map[i + 4][j] == 1 && i + 4 < 15) {
				if (Map[i + 1][j] == 0) {
					x = i + 1, y = j, flag = 0;
					break;
				}
				if (Map[i + 3][j] == 0) {
					x = i + 3, y = j, flag = 0;
					break;
				}
			}
		}
	}
	
	for (int i = 0; flag && i + 2 < 15; i++) {//防御左斜3 
		for (int j = 0; flag && j + 2 < 15; j++) {
			if (Map[i][j] == 1 && Map[i + 1][j + 1] == 1 && Map[i + 2][j + 2] == 1&&((Map[i - 2][j - 2] == 0&&Map[i - 1][j - 1] == 0&&i - 2 >= 0&&j - 2 >= 0)||(Map[i + 3][j + 3] == 0&&Map[i - 1][j - 1] == 0&&i + 3 < 15&&j + 3 < 15&&i - 1 >= 0&&j - 1 >= 0)||(Map[i + 3][j + 3] == 0&&Map[i + 4][j + 4] == 0&&i + 4 < 15&&j + 4 < 15))) {
				if (i - 1 >= 0 && j + 1 >= 0 && Map[i - 1][j - 1] == 0) {
					x = i - 1, y = j - 1, flag = 0;
					break;
				}
				if (i + 3 < 15 && j + 3 < 15 && Map[i + 3][j + 3] == 0) {
					x = i + 3, y = j + 3, flag = 0;
					break;
				}
			}
			
			if ((Map[i - 1][j - 1] == 0||Map[i + 4][j + 4] == 0)&&Map[i][j] == 1 && (Map[i + 1][j + 1] == 1||Map[i + 2][j + 2] == 1) && Map[i + 3][j + 3] == 1 && i + 4 < 15 && j + 4 < 15&&i - 1 >= 0&& j - 1 >= 0) {
				if (Map[i + 1][j + 1] == 0) {
					x = i + 1, y = j + 1, flag = 0;
					break;
				}
				if (Map[i + 2][j + 2] == 0) {
					x = i + 2, y = j + 2, flag = 0;
					break;
				}
			}
			
			if (Map[i][j] == 1 && Map[i + 2][j + 2] == 1 && Map[i + 4][j + 4] == 1 && i + 4 < 15 && j + 4 < 15) {
				if (Map[i + 1][j + 1] == 0) {
					x = i + 1, y = j + 1, flag = 0;
					break;
				}
				if (Map[i + 3][j + 3] == 0) {
					x = i + 3, y = j + 3, flag = 0;
					break;
				}
			}
		}
	}
	
	for (int j = 14; flag && j - 2 >= 0; j--) {//防御右斜3 
		for (int i = 0; flag && i + 2 < 15; i++) {
			if (Map[i][j] == 1 && Map[i + 1][j - 1] == 1 && Map[i + 2][j - 2] == 1&&((Map[i - 2][j + 2] == 0&&Map[i - 1][j + 1] == 0&&i - 2 >= 0&&j + 2 < 15)||(Map[i + 3][j - 3] == 0&&Map[i - 1][j + 1] == 0&&i + 3 < 15&&j + 1 < 15&&i - 1 >= 0&&j - 3 >= 0)||(Map[i + 3][j - 3] == 0&&Map[i + 4][j - 4] == 0&&i + 4 < 15&&j - 4 >= 0))) {
				if (i - 1 >= 0 && j + 1 < 15 && Map[i - 1][j + 1] == 0) {
					x = i - 1, y = j + 1, flag = 0;
					break;
				}
				if (i + 3 < 15 && j - 3 >= 0 && Map[i + 3][j - 3] == 0) {
					x = i + 3, y = j - 3, flag = 0;
					break;
				}
			}
			
			if ((Map[i - 1][j + 1] == 0||Map[i + 4][j - 4] == 0)&&Map[i][j] == 1 && (Map[i + 1][j - 1] == 1||Map[i + 2][j - 2] == 1) && Map[i + 3][j - 3] == 1 && i + 4 < 15 && j - 4 >= 0&&i - 1 >= 0&& j + 1 < 15) {
				if (Map[i + 1][j - 1] == 0) {
					x = i + 1, y = j - 1, flag = 0;
					break;
				}
				if (Map[i + 2][j - 2] == 0) {
					x = i + 2, y = j - 2, flag = 0;
					break;
				}
			}
			
			if (Map[i][j] == 1 && Map[i + 2][j - 2] == 1 && Map[i + 4][j - 4] == 1 && i + 4 < 15 && j - 4 >= 0) {
				if (Map[i + 1][j - 1] == 0) {
					x = i + 1, y = j - 1, flag = 0;
					break;
				}
				if (Map[i + 3][j - 3] == 0) {
					x = i + 3, y = j - 3, flag = 0;
					break;
				}
			}
		}
	}
///	
	
	for (int i = 0; i < 15 && flag; i++) {//进攻竖3 
		for (int j = 0; j + 2 < 15 && flag; j++) {
			if (Map[i][j] == 2 && Map[i][j + 1] == 2 && Map[i][j + 2] == 2&&((Map[i][j - 2] == 0&&Map[i][j - 1] == 0&&j - 2 >= 0)||(Map[i][j + 3] == 0&&Map[i][j - 1] == 0&&j + 3 < 15&&j - 1 >= 0)||(Map[i][j + 3] == 0&&Map[i][j + 4] == 0&&j + 4 < 15))) {
				if ((j - 1 >= 0 && Map[i][j - 1] == 0)) {
					x = i, y = j - 1, flag = 0;
					break;
				}
				if ((j + 3 < 15 && Map[i][j + 3] == 0)) {
					x = i, y = j + 3, flag = 0;
					break;
				}
			}
			if ((Map[i][j - 1] == 0||Map[i][j + 4] == 0)&&Map[i][j] == 2 && Map[i][j + 3] == 2 && (Map[i][j + 1] == 2||Map[i][j + 2] == 2) && j + 4 < 15&& j - 1 >= 0) {
				if (Map[i][j + 1] == 0) {
					x = i, y = j + 1, flag = 0;
					break;
				}
				if (Map[i][j + 2] == 0) {
					x = i, y = j + 2, flag = 0;
					break;
				}
			}
			if (Map[i][j] == 2 && Map[i][j + 2] == 2 && Map[i][j + 4] == 2 && j + 4 < 15) {
				if (Map[i][j + 1] == 0) {
					x = i, y = j + 1, flag = 0;
					break;
				}
				if (Map[i][j + 3] == 0) {
					x = i, y = j + 3, flag = 0;
					break;
				}
			}
		}
	}
	
	for (int j = 0; j < 15 && flag; j++) {//进攻横3 
		for (int i = 0; i + 2 < 15 && flag; i++) {
			if (Map[i][j] == 2 && Map[i + 1][j] == 2 && Map[i + 2][j] == 2&&((Map[i - 2][j] == 0&&Map[i - 1][j] == 0&&i - 2 >= 0)||(Map[i + 3][j] == 0&&Map[i - 1][j] == 0&&i + 3 < 15&&i - 1 >= 0)||(Map[i + 3][j] == 0&&Map[i + 4][j] == 0&&i + 4 < 15))) {
				if ((i - 1 >= 0 && Map[i - 1][j] == 0)) {
					x = i - 1, y = j, flag = 0;
					break;
				}
				if ((i + 3 < 15 && Map[i + 3][j] == 0)) {
					x = i + 3, y = j, flag = 0;
					break;
				}
			}
			if ((Map[i - 1][j] == 0||Map[i + 3][j] == 0)&&Map[i][j] == 2 && (Map[i + 1][j] == 2||Map[i + 2][j] == 2) && Map[i + 3][j] == 2 && i + 4 < 15&& i - 1 >= 0) {
				if (Map[i + 1][j] == 0) {
					x = i + 1, y = j, flag = 0;
					break;
				}
				if (Map[i + 2][j] == 0) {
					x = i + 2, y = j, flag = 0;
					break;
				}
			}
			if (Map[i][j] == 2 && Map[i + 2][j] == 2 && Map[i + 4][j] == 2 && i + 4 < 15) {
				if (Map[i + 1][j] == 0) {
					x = i + 1, y = j, flag = 0;
					break;
				}
				if (Map[i + 3][j] == 0) {
					x = i + 3, y = j, flag = 0;
					break;
				}
			}
		}
	}
	
	for (int i = 0; flag && i + 2 < 15; i++) {//进攻左斜3 
		for (int j = 0; flag && j + 2 < 15; j++) {
			if (Map[i][j] == 2 && Map[i + 1][j + 1] == 2 && Map[i + 2][j + 2] == 2&&((Map[i - 2][j - 2] == 0&&Map[i - 1][j - 1] == 0&&i - 2 >= 0&&j - 2 >= 0)||(Map[i + 3][j + 3] == 0&&Map[i - 1][j - 1] == 0&&i + 3 < 15&&j + 3 < 15&&i - 1 >= 0&&j - 1 >= 0)||(Map[i + 3][j + 3] == 0&&Map[i + 4][j + 4] == 0&&i + 4 < 15&&j + 4 < 15))) {
				if (Map[i - 1][j - 1] == 0 && i - 1 >= 0 && j - 1 >= 0) {
					x = i - 1, y = j - 1, flag = 0;
					break;
				}
				if (Map[i + 3][j + 3] == 0 && i + 3 < 15 && j + 3 < 15) {
					x = i + 3, y = j + 3, flag = 0;
					break;
				}
			}
			if ((Map[i - 1][j - 1] == 0||Map[i + 4][j + 4] == 0)&&Map[i][j] == 2 && (Map[i + 1][j + 1] == 2||Map[i + 2][j + 2] == 2) && Map[i + 3][j + 3] == 2 && i + 4 < 15 && j + 4 < 15&&i - 1 >= 0&& j - 1 >= 0) {
				if (Map[i + 1][j + 1] == 0) {
					x = i + 1, y = j + 1, flag = 0;
					break;
				}
				if (Map[i + 2][j + 2] == 0) {
					x = i + 2, y = j + 2, flag = 0;
					break;
				}
			}
			if (Map[i][j] == 2 && Map[i + 2][j + 2] == 2 && Map[i + 4][j + 4] == 2 && i + 4 < 15 && j + 4 < 15) {
				if (Map[i + 1][j + 1] == 0) {
					x = i + 1, y = j + 1, flag = 0;
					break;
				}
				if (Map[i + 3][j + 3] == 0) {
					x = i + 3, y = j + 3, flag = 0;
					break;
				}
			}
		}
	}
	
	for (int j = 14; flag && j - 2 >= 0; j--) {//进攻右斜3 
		for (int i = 0; flag && i + 2 < 15; i++) {
			if (Map[i][j] == 2 && Map[i + 1][j - 1] == 2 && Map[i + 2][j - 2] == 2 && i + 2 < 15 && j - 2 >= 0&&((Map[i - 2][j + 2] == 0&&Map[i - 1][j + 1] == 0&&i - 2 >= 0&&j + 2 < 15)||(Map[i + 3][j - 3] == 0&&Map[i - 1][j + 1] == 0&&i + 3 < 15&&j + 1 < 15&&i - 1 >= 0&&j - 3 >= 0)||(Map[i + 3][j - 3] == 0&&Map[i + 4][j - 4] == 0&&i + 4 < 15&&j - 4 >= 0))) {
				if (i - 1 >= 0 && j + 1 < 15 && Map[i - 1][j + 1] == 0) {
					x = i - 1, y = j + 1, flag = 0;
					break;
				}
				if (i + 3 < 15 && j - 3 >= 0 && Map[i + 3][j - 3] == 0) {
					x = i + 3, y = j - 3, flag = 0;
					break;
				}
			}
			if ((Map[i - 1][j + 1] == 0||Map[i + 4][j - 4] == 0)&&Map[i][j] == 2 && (Map[i + 1][j - 1] == 2||Map[i + 2][j - 2] == 2) && Map[i + 3][j - 3] == 2 && i + 4 < 15 && j - 4 >= 0&&i - 1 >= 0&& j + 1 < 15) {
				if (Map[i + 1][j - 1] == 0) {
					x = i + 1, y = j - 1, flag = 0;
					break;
				}
				if (Map[i + 2][j - 2] == 0) {
					x = i + 2, y = j - 2, flag = 0;
					break;
				}
			}
			if (Map[i][j] == 2 && Map[i + 2][j - 2] == 2 && Map[i + 4][j - 4] == 2 && i + 4 < 15 && j - 4 >= 0) {
				if (Map[i + 1][j - 1] == 0) {
					x = i + 1, y = j - 1, flag = 0;
					break;
				}
				if (Map[i + 3][j - 3] == 0) {
					x = i + 3, y = j - 3, flag = 0;
					break;
				}
			}
		}
	}
///	
	
	for (int i = 0; i < 15 && flag; i++) {//进攻竖2 
		for (int j = 0; j + 1 < 15 && flag; j++) {
			if (Map[i][j] == 2 && Map[i][j + 1] == 2&&((Map[i][j - 1] == 0&&Map[i][j - 2] == 0&& j - 2 >= 0)||(Map[i][j + 1] == 0&&Map[i][j + 2] == 0&& j + 2 < 15))) {
				if ((j - 1 >= 0 && Map[i][j - 1] == 0)) {
					x = i, y = j - 1, flag = 0;
					break;
				}
				if ((j + 2 < 15 && Map[i][j + 2] == 0)) {
					x = i, y = j + 2, flag = 0;
					break;
				}
			}
			if (Map[i][j] == 2 && Map[i][j + 2] == 2 && j + 2 < 15) {
				if (Map[i][j + 1] == 0) {
					x = i, y = j + 1, flag = 0;
					break;
				}
			}
		}
	}
	
	for (int j = 0; j < 15 && flag; j++) {//进攻横2 
		for (int i = 0; i + 1 < 15 && flag; i++) {
			if (Map[i][j] == 2 && Map[i + 1][j] == 2&&((Map[i - 1][j] == 0&&Map[i - 2][j] == 0&& i - 2 >= 0)||(Map[i + 1][j] == 0&&Map[i + 2][j] == 0&& i + 2 < 15))) {
				if ((i - 1 >= 0 && Map[i - 1][j] == 0)) {
					x = i - 1, y = j, flag = 0;
					break;
				}
				if ((Map[i + 2][j] == 0 && i + 2 < 15)) {
					x = i + 2, y = j, flag = 0;
					break;
				}
			}
			if (Map[i][j] == 2 && Map[i + 2][j] == 2 && i + 2 < 15) {
				if (Map[i + 1][j] == 0) {
					x = i + 1, y = j, flag = 0;
					break;
				}
			}
			
		}
	}
	
	for (int i = 0; flag && i + 1 < 15; i++) {//进攻左斜2 
		for (int j = 0; flag && j + 1 < 15; j++) {
			if (Map[i][j] == 2 && Map[i + 1][j + 1] == 2&&((Map[i - 1][j - 1] == 0&&Map[i - 2][j - 2] == 0&& j - 2 >= 0&& i - 2 >= 0)||(Map[i + 1][j + 1] == 0&&Map[i + 2][j + 2] == 0&& i + 2 < 15&&j + 2 < 15))) {
				if (i - 1 >= 0 && j + 1 >= 0 && Map[i - 1][j - 1] == 0) {
					x = i - 1, y = j - 1, flag = 0;
					break;
				}
				if (i + 2 < 15 && j + 2 < 15 && Map[i + 2][j + 2] == 0) {
					x = i + 2, y = j + 2, flag = 0;
					break;
				}
			}
			if (Map[i][j] == 2 && Map[i + 2][j + 2] == 2 && i + 2 < 15 && j + 2 < 15) {
				if (Map[i + 1][j + 1] == 0) {
					x = i + 1, y = j + 1, flag = 0;
					break;
				}
			}
		}
	}
	for (int j = 14; flag && j - 1 >= 0; j--) {//进攻右斜2 
		for (int i = 0; flag && i + 1 < 15; i++) {
			if (Map[i][j] == 2 && Map[i + 1][j - 1] == 2 && i + 1 < 15 && j - 1 >= 0&&((Map[i - 1][j - 1] == 0&&Map[i - 2][j - 2] == 0&& j - 2 >= 0&& i - 2 >= 0)||(Map[i + 1][j + 1] == 0&&Map[i + 2][j + 2] == 0&& i + 2 < 15&&j + 2 < 15))) {
				if (i - 1 >= 0 && j + 1 < 15 && Map[i - 1][j + 1] == 0) {
					x = i - 1, y = j + 1, flag = 0;
					break;
				}
				if (i + 3 < 15 && j - 3 >= 0 && Map[i + 3][j - 3] == 0) {
					x = i + 3, y = j - 3, flag = 0;
					break;
				}
			}
			if (Map[i][j] == 2 && Map[i + 2][j - 2] == 2 && i + 2 < 15 && j - 2 >= 0) {
				if (Map[i + 1][j - 1] == 0) {
					x = i + 1, y = j - 1, flag = 0;
					break;
				}
			}
		}
	}
	
	if (flag) {
		srand((unsigned)time(NULL));
		for (int i = 0; i < 15; i++) {
			for (int j = 0; j < 15; j++) {
				if (Map[i][j] == 2) {
					int m = rand() % 3 - 1, n = rand() % 3 - 1;
					if (Map[i + m][j + n] == 0 && i + m >= 0 && i + m < 15 && j + n >= 0 && j + n < 15) x = i + m, y = j + n, flag = 0;
				}
			}
		}
	}
	while (x >= 15 || y >= 15 || x < 0 || y < 0 || Map[x][y] != 0) {
		srand((unsigned)time(NULL));
		x = rand() % 15, y = rand() % 15;
		Pos(130, 30);
		printf("机器人发生故障 请联系制作人");
	}
	Pos(130, 16);
	printf("当前机器人下棋位置  x:%4d   y:%4d", x + 1, y + 1);
	pre2x = x, pre2y = y;
	Map[x][y] = 2;
	WhitePut(10 + 6*x, 3 + 3*y);
	if (CheckWin(x, y, 2))	return true;
	return false;
}

感谢观看!!在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值