当前位置:   article > 正文

智能五子棋-C语言

智能五子棋

*一、项目需求*

五子棋是一种简单的黑白棋,历史悠久,起源于中国,后传入日本,在日本被称为“连珠”,是一种老少皆宜的益智游戏。

人工智能五子棋系统的目标用户是一切想致力于研究人机对弈算法理论的相关研究者和一切想通过此系统进行五子棋人机对弈游戏的人群。目标用户特点:范围广泛,知识储备门槛低,年龄跨度大,具备操作简单的人机交互界面即可。

我们计划实现人人对弈,人机对战以及机机对弈等三种模式以及一些基本游戏功能。

*二、设备要求*

  1. 编译语言:C语言
  2. 操作系统:windows 操作系统
  3. 开发工具:Microsoft Visual Studio 2019

本次实验是运用Microsoft Visual Studio 软件来进行一次智能五子棋游戏的设计, Microsoft Visual StudioVS是一个基本完整的开发工具集,它包括了整个软件生命周期中所需要的大部分工具。Visual Studio是最流行的Windows平台应用程序的集成开发环境。最新版本为 Visual Studio 2019 版本。

人工智能五子棋属于人工智能中人机博弈的一种,人工智能应用广泛,人工智能是促进未来人类科技和生活重大改变的一门学科。

*三、项目设计*

本项目主要设计如下:

  1. 游戏用户接口:主界面以及基本框架:一共有四个页面,一个主菜单,两个副菜单以及一个棋盘界面。若是选择人人对弈,则调用棋盘,直接进行对弈,若是机器与机器对弈,则根据不同的难度调用不同难度的机器算发进行博弈。若是选择了机器与人的博弈,则会跳转去难度选择的页面,选择了困难之后,会跳转到选择先后手的页面,最后根据人选择的数据调用相应的函数与人进行博弈。
  2. 游戏操作规则:左键白子右键黑子。
  3. 设计能悔棋操作:即玩家在下棋子后能回到上一步。
  4. 提示鼠标的合法点击范围:若点击的位置不是棋盘或者功能键,则会有弹窗提示玩家,玩家需要点击关闭弹窗才能继续游戏。
  5. 限制每个棋子落下的规范:不能重复落子,仅能黑白子交替下子,若玩家点错,可触发弹窗提示玩家,玩家必须先关闭弹窗才能继续游戏。
  6. 游戏裁判算法:判断各个方向是否有五颗连起来的棋子,只要有一方先走成在在横、竖、斜方向上的五颗同色棋子就能赢得游戏,赢得游戏后,会有弹窗提示哪一方的棋子胜利并重新刷新一次棋盘,使玩家再次进行游戏。
  7. 实现算法对战模式:人机对战、人人对战、机机对战。
  8. 机器算法:利用估值函数,每下一颗棋子则在其周围加10,活二在其前后各加100,死二则在其为被堵住的地方的另一边加50,活三在其前后加1000,死三则在其为被堵住的地方的另一边加500,活四则在其前后分别加10000,死四则在其为被堵住的地方的另一边加上2000,找出棋盘上价值最大的点,并判断是进攻还是防守,从而使自身的每一步棋子的价值最大化。

*3.1、人机交互界面*

通过鼠标点击调用不同的函数,进而刷新屏幕使之进入不同的界面,让玩家选择自己想要的游戏模式,游戏难度以及先后手,让玩家有更好的游戏体验,为此,我特地添加了悔棋,重新开始,退出游戏等功能,让玩家在玩的过程中拥有更多机会。

img

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yXXzU5bQ-1636549459002)(data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==)]

图3.1.1 人机交互界面关系流程图

*3.2、系统结构设计*

img[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lraDGBzz-1636549459019)(data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==)]

图3.2.1 系统结构设计

*3.3、数据结构设计*

  1. 人工智能五子棋系统的每一个下棋格点用二维数组a[17][17]表示,数组内容分别为0,1,2代表未落子,黑子,白子。
  2. 初始化黑棋与白棋的估值函数表如下。

int Value_black / Value_white[ 17] [ 17] ={

{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},

{0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0},

{0, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 0},

{0, 1, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 1, 0},

{0, 1, 2, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 2, 1, 0},

{0, 1, 2, 3, 4, 5, 5, 5, 5, 5, 5, 5, 4, 3, 2, 1, 0},

{0, 1, 2, 3, 4, 5, 6, 6, 6, 6, 6, 5, 4, 3, 2, 1, 0},

{0, 1, 2, 3, 4, 5, 6, 7, 7, 7, 6, 5, 4, 3, 2, 1, 0},

{0, 1, 2, 3, 4, 5, 6, 7, 8, 7, 6, 5, 4, 3, 2, 1, 0},

{0, 1, 2, 3, 4, 5, 6, 7, 7, 7, 6, 5, 4, 3, 2, 1, 0},

{0, 1, 2, 3, 4, 5, 6, 6, 6, 6, 6, 5, 4, 3, 2, 1, 0},

{0, 1, 2, 3, 4, 5, 5, 5, 5, 5, 5, 5, 4, 3, 2, 1, 0},

{0, 1, 2, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 2, 1, 0},

{0, 1, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 1, 0},

{0, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 0},

{0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0},

{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};

  1. 以下是我定义的各种函数。

    void menu();              //主菜单背景
    
    void Difficulty();           //选择人机难度
    
    void choseFrist();         //选择先后手
    
    void ChessBoard();            //棋盘
    
    void DropChess(MOUSEMSG m);            //下棋
    
    bool Rules(int i, int j, int x);   // 规则(落棋的合法性以及判断输赢)
    
    void Newa();                //重新开始后进行初始化
    
    void Regret(int x, int y);            //悔棋
    
    void DropChess_People();     //人下棋
    
    void Low();           //初级难度
    
    void Medium();         //中级难度
    
    void Low_J();
    
    void Medium_J();
    
    void Judge_ML(int i,int j,int x);            //判断棋盘模型
    
    void Renew_Value_shu(int i,int j,int x,int n);  //更新价值表:竖直方向
    
    void Renew_Value_leftup(int i, int j, int x, int n);   //更新价值表:左上往右下
    
    void Renew_Value_heng(int i, int j, int x, int n);    //更新价值表:水平方向
    
    void Renew_Value_rightup(int i, int j, int x, int n);   //更新价值表:右上到左下
    
    HWND chunchun = GetHWnd();            //窗口弹出;
    
    int flag = 0;                  //限制落棋的顺序以及赢棋之后无法再次落棋
    
    int a[20][20] = { 0 };             //存储数组的二维数组
    
    int level;                    //难度等级
    
    int order = 0;               //顺序——先后手
    
    int close = 0;               //使退出人机的程序。
    
    int e,f,c,d;             //记录悔棋下标。
    
    int level1 = 0;           //机器的
    
    int value_black[17][17] = { 0 };      //黑棋的价值表
    
    int value_white[17][17] = { 0 };        //白棋的价值表
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55

四、*项目实现过程*

*4.1、界面设计*

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-H8ueV1vt-1636549459020)(file:///C:\Users\LJC666\AppData\Local\Temp\ksohtml43100\wps8.jpg)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3cI6BSDb-1636549459021)(data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==)]

图4.1.1 总体算法流程图

4.2、游戏裁判算法:判断赢家

当某种颜色的棋子胜利的时候,会有弹窗提示玩家,玩家只有点击“确定”才会重新刷新棋盘,否则点击棋盘是无反应的。

当我判断胜负后能结束游戏时,我会把控制交替下子的变量赋值为另一个数字,使程序进不去落子循环,从而控制赢得游戏之后不能再对棋盘进行改动的操作,而当玩家点击了“确定”之后,程序会立即刷新棋盘,从而使玩家可以进入下一个对局。

int i2, j2;

for (i2 = i - 4, j2 = j - 4; i2 <= i + 4 && j2 <= j + 4; i2++, j2++) {



if (a[i2][j2] == x) {               //左上往右下

sum2 = sum2 + 1;

}

else {

sum2 = 0;

}



if (sum2 == 5) {

pd = 1;

}

}



int i3, j3;

for (j3 = j - 4, i3 = i; j3 <= j + 4; j3++) {



if (a[i3][j3] == x) {               //横

sum3 = sum3 + 1;

}

else {

sum3 = 0;

}



if (sum3 == 5) {          //赢

pd = 1;

}

}



int i4, j4;

for (i4 = i - 4, j4 = j + 4; i4 <= i + 4 && j4 >= j - 4; i4++, j4--) {

if (a[i4][j4] == x) {             //右上往左下

sum4 = sum4 + 1;

}

else {

sum4 = 0;

}



if (sum4 == 5) {

pd = 1;

}

}



if (pd == 1) {

return true;

}

else {

return false;

}

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101

4.3、机器价值表算法:

​ 每下一颗棋子时,先判断是否产生输赢,若是没有产生输赢,则判断棋盘类型并根据不同的类型刷新价值表。

例如:每下一颗棋子则在其周围加10,活二在其前后各加100,死二则在其为被堵住的地方加50,活三在其前后加1000,死三则在其为被堵住的地方加500,活四则在其前后分别加10000,死四则在其为被堵住的地方加上2000。

当机器落子时,会遍历黑白双方的价值表,判断此时是应该进攻还是防守,应该让自己赢还是不让对方赢,从而更大程度掌握棋局优势。

五、项目代码

#include<graphics.h>
#include<Windows.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<mmsystem.h>
#pragma comment(lib,"winmm.lib")

void menu();                                   //主菜单背景
void Difficulty();                                //选择人机难度
void choseFrist();                            //选择先后手
void ChessBoard();                                 //棋盘
void DropChess(MOUSEMSG m);                               //下棋
bool Rules(int i, int j, int x);                                 // 规则(落棋的合法性以及判断输赢)
void Newa();                              //重新开始后进行初始化
void Regret(int x, int y);                       //悔棋

void DropChess_People();        //人下棋
void Low();                                                             //初级难度
void Medium();                                                       //中级难度

void Low_J();
void Medium_J();

void Judge_ML(int i, int j, int x);                       //判断棋盘模型

void Renew_Value_shu(int i, int j, int x, int n);                                             //更新价值表:竖直方向
void Renew_Value_leftup(int i, int j, int x, int n);                                             //更新价值表:左上往右下
void Renew_Value_heng(int i, int j, int x, int n);                                             //更新价值表:水平方向
void Renew_Value_rightup(int i, int j, int x, int n);                                             //更新价值表:右上到左下

HWND chunchun = GetHWnd();                      //窗口弹出;
int flag = 0;                                   //限制落棋的顺序以及赢棋之后无法再次落棋
int a[20][20] = { 0 };                        //存储数组的二维数组
int level;                                       //难度等级
int order = 0;                                         //顺序——先后手
int close = 0;                             //使退出人机的程序。
int e, f, c, d;                        //记录悔棋下标。

int level1 = 0;           //机器的,

int value_black[17][17] = { 0 };           //黑棋的价值表
int value_white[17][17] = { 0 };               //白棋的价值表

int main()
{
	//initgraph(700, 600, SHOWCONSOLE);                                      //始化窗口,弄终端界面。
	PlaySound(L"C:\\Users\\LJC666\\source\\repos\\txh1.0\\music.wav", NULL, SND_FILENAME | SND_ASYNC | SND_LOOP);//音乐循环播放
	//PlaySound(L"music.wav", NULL, SND_FILENAME | SND_ASYNC | SND_LOOP);//音乐循环播放

	initgraph(700, 600);                                     //始化窗口,弄终端界面。
	menu();                                                  //主菜单界面以及跳转的实现。

	while (1) {
		if (level == 1) {
			if (order == 1) {
				if (level1 == 1) {
					DropChess_People();
					Low();
				}
				else if (level1 == 4) {
					Low_J();
				}
			}
			else if (order == 2) {
				Low();
				DropChess_People();
			}
		}
		else if (level == 2) {
			if (order == 1) {
				if (level1 == 1) {
					DropChess_People();
					Medium();
				}
				else if (level1 == 4) {
					Medium_J();
				}
			}
			else if (order == 2) {
				Medium();
				DropChess_People();
			}
		}
		else if (level == 0) {
			break;
		}

		if (close == 1) {
			break;
		}
	}
	//system("pause");//暂停显示界面
	//closegraph();//关闭窗口

	return 0;
}

void menu()                                                                  //主菜单界面,跳转
{
	IMAGE image;
	loadimage(&image, L"C:\\Users\\LJC666\\source\\repos\\txh1.0\\x64\\tp\\tp5.jpg", 700, 600);
	//loadimage(&image, L"./tp/tp5.jpg", 700, 600);
	putimage(0, 0, &image);

	settextcolor(BLACK);
	settextstyle(50, 0, L"华文隶书");//设置字体的风格
	setbkmode(TRANSPARENT);                        //让字的范围跟随背景

	outtextxy(250, 150, _T("人机对战")); //在指定区域输出字体
	outtextxy(250, 250, _T("人人对战"));
	outtextxy(250, 350, _T("机机对战"));
	outtextxy(250, 450, _T("退出游戏"));

	MOUSEMSG msg;  //定义一个鼠标消息

	while (1) {
		msg = GetMouseMsg();//获取鼠标消息
		if (msg.x > 250 && msg.x < 450 && msg.y>150 && msg.y < 200) {          //点击人机对战的鼠标控制
			if (msg.uMsg == WM_LBUTTONDOWN) {
				level1 = 1;                   //非机器机器
				Difficulty();                                            //选择人机难度。
				break;
			}
		}
		else if (msg.x > 250 && msg.x < 450 && msg.y>250 && msg.y < 300) {     //点击人人对战的鼠标控制
			if (msg.uMsg == WM_LBUTTONDOWN) {
				level = 0;
				level1 = 1;              //非机器机器
				ChessBoard();
				DropChess_People();
				break;
			}

		}
		else if (msg.x > 250 && msg.x < 450 && msg.y>350 && msg.y < 400) {                   //机机对战
			if (msg.uMsg == WM_LBUTTONDOWN) {
				level1 = 4;              //机器机器
				Difficulty();                                            //选择难度。
				ChessBoard();
				break;
			}
		}
		else if (msg.x > 250 && msg.x < 450 && msg.y>450 && msg.y < 500) {                   //退出游戏
			if (msg.uMsg == WM_LBUTTONDOWN) {
				closegraph();                                                        //关闭图形化界面窗口
				close = 1;
				break;
			}
		}
	}
}

void Difficulty()                                //选择人机难度的界面
{
	cleardevice();//清空屏幕内容

	IMAGE immge;
	loadimage(&immge, L"C:\\Users\\LJC666\\source\\repos\\txh1.0\\tp\\tp4.jpg", 700, 600);//先把图片放在工程项目下,使用L+"绝对路径"
	//loadimage(&immge, L"./tp/tp4.jpg", 700, 600);//先把图片放在工程项目下,使用L+"绝对路径"
	putimage(0, 0, &immge);  //显示背景图片

	settextcolor(BLACK);                   //设置字体的颜色
	settextstyle(50, 0, L"华文琥珀");//设置字体的风格
	setbkmode(TRANSPARENT);                        //让字的范围跟随背景

	outtextxy(350, 150, _T("初出茅庐")); //在指定区域输出字体
	outtextxy(350, 250, _T("登堂入室"));
	//outtextxy(350, 350, _T("炉火纯青"));
	outtextxy(350, 350, _T("返回上一步"));


	MOUSEMSG mmsge;  //定义一个鼠标消息
	while (1) {
		mmsge = GetMouseMsg();//获取鼠标消息
		if (mmsge.x > 350 && mmsge.x < 550 && mmsge.y>150 && mmsge.y < 200) {          //点击初级难度
			if (mmsge.uMsg == WM_LBUTTONDOWN) {
				level = 1;
				//choseFrist();//选择先后手的界面
				if (level1 == 1) {
					choseFrist();//选择先后手的界面
				}
				else if (level1 == 4) {
					ChessBoard();
					order = 1;
				}
				break;
			}
		}
		else if (mmsge.x > 350 && mmsge.x < 550 && mmsge.y>250 && mmsge.y < 300) {     //中等难度
			if (mmsge.uMsg == WM_LBUTTONDOWN) {
				level = 2;
				if (level1 == 1) {
					choseFrist();//选择先后手的界面
				}
				else if (level1 == 4) {
					ChessBoard();
					order = 1;
				}
				break;
			}
		}
		else if (mmsge.x > 350 && mmsge.x < 550 && mmsge.y>350 && mmsge.y < 400) {     //返回上一步
			if (mmsge.uMsg == WM_LBUTTONDOWN) {
				menu();
				break;
			}
		}
	}
}

void choseFrist()                                                        //选择先后手
{
	cleardevice();//清空屏幕内容

	IMAGE immg;
	loadimage(&immg, L"C:\\Users\\LJC666\\source\\repos\\txh1.0\\x64\\tp\\tp6.png", 700, 600);//先把图片放在工程项目下,使用L+"绝对路径"
	//loadimage(&immg, L"./tp/tp6.png", 700, 600);//先把图片放在工程项目下,使用L+"绝对路径"
	putimage(0, 0, &immg);  //显示背景图片

	settextcolor(BLACK);                   //设置字体的颜色
	settextstyle(50, 0, L"华文彩云");//设置字体的风格
	setbkmode(TRANSPARENT);                        //让字的范围跟随背景

	outtextxy(200, 150, _T("先手")); //在指定区域输出字体
	outtextxy(200, 250, _T("后手"));
	outtextxy(200, 350, _T("返回上一步"));

	MOUSEMSG mmsg;  //定义一个鼠标消息
	while (1) {
		mmsg = GetMouseMsg();//获取鼠标消息
		if (mmsg.x > 200 && mmsg.x < 300 && mmsg.y>150 && mmsg.y < 200) {          //先手
			if (mmsg.uMsg == WM_LBUTTONDOWN) {
				order = 1;
				ChessBoard();                                 //棋盘,仅绘制;
				break;
			}
		}
		else if (mmsg.x > 200 && mmsg.x < 300 && mmsg.y>250 && mmsg.y < 300) {     //后手
			if (mmsg.uMsg == WM_LBUTTONDOWN) {
				order = 2;
				ChessBoard();                       //棋盘
				break;
			}
		}
		else if (mmsg.x > 200 && mmsg.x < 450 && mmsg.y>350 && mmsg.y < 400) {    //点击返回上一步的鼠标控制
			if (mmsg.uMsg == WM_LBUTTONDOWN) {
				Difficulty();
				break;
			}
		}
	}
}

void ChessBoard()
{
	cleardevice();//清空屏幕内容
	IMAGE img;
	loadimage(&img, L"C:\\Users\\LJC666\\source\\repos\\txh1.0\\x64\\tp\\tp2.jpg", 700, 600);//先把图片放在工程项目下,使用L+"绝对路径"
	//loadimage(&img, L"./tp/tp2.jpg", 700, 600);//先把图片放在工程项目下,使用L+"绝对路径"
	putimage(0, 0, &img);  //显示背景图片

	settextcolor(BLACK);                   //设置字体的颜色
	settextstyle(30, 0, L"楷体");//设置字体的风格

	outtextxy(525, 150, _T("悔棋")); //在指定区域输出字体
	outtextxy(525, 250, _T("重新开始"));
	outtextxy(525, 350, _T("退出游戏"));

	setlinecolor(BLACK);//将线段设为黑色

	int i;
	int y1 = 100, y2 = 100, x3 = 100, x4 = 100;
	for (i = 0; i < 17; i++) {
		line(100, y1, 500, y2);     //画横线,
		y1 = y1 + 25;                  //每个格子都是25*25.
		y2 = y2 + 25;
		line(x3, 100, x4, 500);     //画竖线,
		x3 = x3 + 25;
		x4 = x4 + 25;
	}

	setfillcolor(BLACK);             //填充圆的颜色
	solidcircle(300, 300, 3);     //棋盘的点的位置
	solidcircle(175, 175, 3);
	solidcircle(175, 425, 3);
	solidcircle(425, 425, 3);
	solidcircle(425, 175, 3);

	settextcolor(BLACK);                   //设置字体的颜色
	settextstyle(20, 0, L"幼圆");//设置字体的风格
	setbkmode(TRANSPARENT);                        //让字的范围跟随背景
	outtextxy(100, 70, _T("现在轮到:"));
	setfillcolor(BLACK);                   //记录下棋者
	solidcircle(215, 80, 10);
	Newa();
}

void DropChess_People()
{
	int x, y, X, Y;
	MOUSEMSG mmsge;  //定义一个鼠标消息

	while (1) {
		mmsge = GetMouseMsg();//获取鼠标消息
		if (mmsge.x > 525 && mmsge.x < 585 && mmsge.y>150 && mmsge.y < 180) {          //点击悔棋的鼠标控制
			if (mmsge.uMsg == WM_LBUTTONDOWN) {
				Regret(e, f);                                                   //悔棋操作
				Regret(c, d); 				                                //悔棋操作
				continue;
			}
		}
		else if (mmsge.x > 525 && mmsge.x < 645 && mmsge.y>250 && mmsge.y < 280) {     //点击重新开始的鼠标控制
			if (mmsge.uMsg == WM_LBUTTONDOWN) {
				Newa();                               //初始化
				ChessBoard();
				if (level == 0 || order == 1) {
					DropChess_People();
				}
				break;
			}
		}
		else if (mmsge.x > 525 && mmsge.x < 645 && mmsge.y>350 && mmsge.y < 380) {    //点击退出游戏的鼠标控制
			if (mmsge.uMsg == WM_LBUTTONDOWN) {
				Newa();                               //初始化
				menu();
				break;
			}
		}
		else if (mmsge.x > 100 && mmsge.x < 500 && mmsge.y>100 && mmsge.y < 500) {     //在棋盘下棋
			if (mmsge.uMsg == WM_LBUTTONDOWN || mmsge.uMsg == WM_RBUTTONDOWN) {

				x = (mmsge.x - 100) % 25;             //落棋的位置的限制
				y = (mmsge.y - 100) % 25;

				if (x > 12) {
					X = ((mmsge.x / 25) + 1) * 25;
				}
				else {
					X = (mmsge.x / 25) * 25;
				}

				if (y > 12) {
					Y = ((mmsge.y / 25) + 1) * 25;
				}
				else {
					Y = (mmsge.y / 25) * 25;
				}

				if (flag == 1) {                              //存后手(白子)
					e = X;
					f = Y;
				}
				else if (flag == 0) {                     //存先手(黑子)
					c = X;
					d = Y;
				}
				DropChess(mmsge);    //下棋函数

				if (level != 0) {         //如果不是人人对战,则跳出循环,使其只执行一次
					break;
				}
			}
		}
		else {
			if (mmsge.uMsg == WM_LBUTTONDOWN || mmsge.uMsg == WM_RBUTTONDOWN) {
				MessageBox(chunchun, _T("棋子只能落在棋盘哦"), _T("淑女"), MB_OK);
				continue;
			}
		}
	}
}


void DropChess(MOUSEMSG m)                  //下棋
{
	int i, j;
	int x, y, X, Y;
	x = (m.x - 100) % 25;             //落棋的位置的限制
	y = (m.y - 100) % 25;

	if (x > 12) {
		X = ((m.x / 25) + 1) * 25;
	}
	else {
		X = (m.x / 25) * 25;
	}

	if (y > 12) {
		Y = ((m.y / 25) + 1) * 25;
	}
	else {
		Y = (m.y / 25) * 25;
	}
	j = (X - 100) / 25;
	i = (Y - 100) / 25;

	if (m.uMsg == WM_LBUTTONDOWN || m.uMsg == WM_RBUTTONDOWN) {
		if (a[i][j] == 1) {
			MessageBox(chunchun, _T("这里已经下了黑棋子啦"), _T("淑女"), MB_OK);
		}
		else if (a[i][j] == 2) {
			MessageBox(chunchun, _T("这里已经下了白棋子啦"), _T("淑女"), MB_OK);
		}
	}

	if (m.uMsg == WM_LBUTTONDOWN && a[i][j] == 0 && flag == 1) {      //左键白子
		a[i][j] = 2;                  //下白子
		value_black[i][j] = 0;
		value_white[i][j] = 0;
		setfillcolor(WHITE);
		solidcircle(X, Y, 10);
		flag = 0;

		setfillcolor(BLACK);                   //记录下棋者
		solidcircle(215, 80, 10);

		if (Rules(i, j, 2)) {
			//白子胜
			MessageBox(chunchun, _T("白棋子胜利"), _T("淑女"), MB_OK);

			flag = 2;                                                        //使不能再下棋
			Newa();                               //初始化
			ChessBoard();                //再次调用棋盘
		}
		Judge_ML(i, j, 2);           //判断类型,再调用函数更新价值表

		
	}
	else if (m.uMsg == WM_RBUTTONDOWN && a[i][j] == 0 && flag == 0) {            //右键黑子
		a[i][j] = 1;
		value_black[i][j] = 0;
		value_white[i][j] = 0;
		setfillcolor(BLACK);
		solidcircle(X, Y, 10);
		flag = 1;

		setfillcolor(WHITE);                   //记录下棋者
		solidcircle(215, 80, 10);

		if (Rules(i, j, 1)) {
			//黑子胜
			MessageBox(chunchun, _T("黑棋子胜利"), _T("淑女"), MB_OK);
			flag = 2;                                                        //使不能再下棋
			Newa();                               //初始化
			ChessBoard();                 //再次调用棋盘
		}
		Judge_ML(i, j, 1);            //判断类型,再调用函数更新价值表

		
	}
}

bool Rules(int i, int j, int x)                                  //判断输赢
{
	int pd = 0;
	int sum1 = 0, sum2 = 0, sum3 = 0, sum4 = 0;
	int i1, j1;
	for (i1 = i - 4, j1 = j; i1 <= i + 4; i1++) {

		if (a[i1][j1] == x) {                                           //竖
			sum1 = sum1 + 1;
		}
		else {
			sum1 = 0;
		}
		if (sum1 == 5) {
			pd = 1;
		}
	}

	int i2, j2;
	for (i2 = i - 4, j2 = j - 4; i2 <= i + 4 && j2 <= j + 4; i2++, j2++) {

		if (a[i2][j2] == x) {                            //左上往右下
			sum2 = sum2 + 1;
		}
		else {
			sum2 = 0;
		}

		if (sum2 == 5) {
			pd = 1;
		}
	}

	int i3, j3;
	for (j3 = j - 4, i3 = i; j3 <= j + 4; j3++) {

		if (a[i3][j3] == x) {                             //横
			sum3 = sum3 + 1;
		}
		else {
			sum3 = 0;
		}

		if (sum3 == 5) {                   //赢
			pd = 1;
		}
	}

	int i4, j4;
	for (i4 = i - 4, j4 = j + 4; i4 <= i + 4 && j4 >= j - 4; i4++, j4--) {
		if (a[i4][j4] == x) {                         //右上往左下
			sum4 = sum4 + 1;
		}
		else {
			sum4 = 0;
		}

		if (sum4 == 5) {
			pd = 1;
		}
	}

	if (pd == 1) {
		return true;
	}
	else {
		return false;
	}
}

void Newa()          //初始化
{
	int i, j;

	for (i = 0; i < 20; i++) {
		for (j = 0; j < 20; j++) {
			a[i][j] = 0;
		}
	}

	flag = 0;

	for (i = 0; i < 17; i++) {
		for (j = 0; j < 17; j++) {
			if (i == 0 || i == 16 || j == 0 || j == 16) {
				value_black[i][j] = 1;
				value_white[i][j] = 1;
			}
			else if (i == 1 || i == 15 || j == 1 || j == 15) {
				value_black[i][j] = 2;
				value_white[i][j] = 2;
			}
			else if (i == 2 || i == 14 || j == 2 || j == 14) {
				value_black[i][j] = 3;
				value_white[i][j] = 3;
			}
			else if (i == 3 || i == 13 || j == 3 || j == 13) {
				value_black[i][j] = 4;
				value_white[i][j] = 4;
			}
			else if (i == 4 || i == 12 || j == 4 || j == 12) {
				value_black[i][j] = 5;
				value_white[i][j] = 5;
			}
			else if (i == 5 || i == 11 || j == 5 || j == 11) {
				value_black[i][j] = 6;
				value_white[i][j] = 6;
			}
			else if (i == 6 || i == 10 || j == 6 || j == 10) {
				value_black[i][j] = 7;
				value_white[i][j] = 7;
			}
			else if (i == 7 || i == 9 || j == 7 || j == 9) {
				value_black[i][j] = 8;
				value_white[i][j] = 8;
			}
			else if (i == 8 && j == 8) {
				value_black[i][j] = 9;
				value_white[i][j] = 9;
			}
		}
	}
}

void Regret(int x, int y)                   //悔棋
{
	int i, j;
	j = (x - 100) / 25;
	i = (y - 100) / 25;

	IMAGE imge;
	loadimage(&imge, L"C:\\Users\\LJC666\\source\\repos\\txh1.0\\x64\\tp\\tp10.png", 24, 24);//先把图片放在工程项目下,使用L+"绝对路径"
	//loadimage(&imge, L"./tp/tp10.png", 24, 24);//先把图片放在工程项目下,使用L+"绝对路径"
	putimage(x - 12, y - 12, &imge);

	if (x == 100 && y == 100) {                               //1
		setlinecolor(BLACK);//将线段设为黑色
		line(x, y, x + 12, y);     //画横线,
		line(x, y, x, y + 12);
	}
	else if (x == 500 && y == 100) {                               //2
		setlinecolor(BLACK);//将线段设为黑色
		line(x - 12, y, x, y);     //画横线,
		line(x, y, x, y + 12);
	}
	else if (x == 100 && y == 500) {                               //3
		setlinecolor(BLACK);//将线段设为黑色
		line(x, y, x, y - 12);     //画横线,
		line(x, y, x + 12, y);
	}
	else if (x == 500 && y == 500) {                               //4
		setlinecolor(BLACK);//将线段设为黑色
		line(x, y, x, y - 12);     //画横线,
		line(x, y, x - 12, y);
	}
	else if (y == 100 && x != 100 && x != 500) {                               //一
		setlinecolor(BLACK);//将线段设为黑色
		line(x - 12, y, x + 12, y);     //画横线,
		line(x, y, x, y + 12);
	}
	else if (x == 100 && y != 100 && y != 500) {                               //二
		setlinecolor(BLACK);//将线段设为黑色
		line(x, y, x + 12, y);     //画横线,
		line(x, y - 12, x, y + 12);
	}
	else if (x == 500 && y != 500 && y != 100) {                               //三
		setlinecolor(BLACK);//将线段设为黑色
		line(x, y, x - 12, y);     //画横线,
		line(x, y - 12, x, y + 12);
	}
	else if (x != 100 && x != 500 && y == 500) {                               //四
		setlinecolor(BLACK);//将线段设为黑色
		line(x - 12, y, x + 12, y);     //画横线,
		line(x, y, x, y - 12);
	}
	else {                                                 //其余位置
		setlinecolor(BLACK);//将线段设为黑色
		line(x - 12, y, x + 12, y);     //画横线,
		line(x, y - 12, x, y + 12);
	}
	a[i][j] = 0;                     //将记录有无棋子的数组置0
}


void Low()               //初级难度算法,//传入先后手,0为先手,1为后手
{
	int numi, numj;

	while (1) {
		while (1) {
			numi = rand();
			if (numi >= 0 && numi < 17) {
				break;
			}
		}
		while (1) {
			numj = rand();
			if (numj >= 0 && numj < 17) {
				break;
			}
		}

		if (a[numj][numi] == 0) {
			break;
		}
	}

	if (flag == 1 && order == 1) {                               //人先下棋,人下黑子,机器白子
		setfillcolor(WHITE);
		solidcircle((numi * 25) + 100, (numj * 25) + 100, 10);      //在指定区域里面画实心圆
		a[numj][numi] = 2;
		value_black[numj][numi] = 0;
		value_white[numj][numi] = 0;
		flag = 0;

		setfillcolor(BLACK);                                         //记录下棋者
		solidcircle(215, 80, 10);

		if (Rules(numj, numi, 2)) {
			//白子胜
			MessageBox(chunchun, _T("白棋子胜利"), _T("淑女"), MB_OK);
			flag = 2;                                                        //使不能再下棋
		}
		e = (numi * 25) + 100;
		f = (numj * 25) + 100;
	}
	else if (flag == 0 && order == 2) {                               //机器先下棋,机器下黑子,人下白子
		setfillcolor(BLACK);
		solidcircle((numi * 25) + 100, (numj * 25) + 100, 10);
		a[numj][numi] = 1;
		value_black[numj][numi] = 0;
		value_white[numj][numi] = 0;
		flag = 1;

		setfillcolor(WHITE);                                                   //记录下棋者
		solidcircle(215, 80, 10);

		if (Rules(numj, numi, 1)) {
			//黑子胜
			MessageBox(chunchun, _T("白棋子胜利"), _T("淑女"), MB_OK);
			flag = 2;                                                        //使不能再下棋
		}
		c = (numi * 25) + 100;
		d = (numj * 25) + 100;
	}
}

void Judge_ML(int i, int j, int x)                                  //判断棋盘连珠类型(x:白棋为2,黑棋为1)
{
	//printf("fine\n");
	int summ1 = 0, summ2 = 0, summ3 = 0, summ4 = 0;
	int sum1 = 0, sum2 = 0, sum3 = 0, sum4 = 0;
	int i1, j1;
	int i14, i13, i12;

	for (i1 = i - 4, j1 = j; i1 <= i + 4; i1++) {                                      //竖

		if (a[i1][j1] == x) {
			summ1 = summ1 + 1;
			if (summ1 == 4) {
				i14 = i1;
			}
			else if (summ1 == 3) {
				i13 = i1;
			}
			else if (summ1 == 2) {
				i12 = i1;
			}

			if (summ1 > sum1) {
				sum1 = summ1;
			}
		}
		else {
			summ1 = 0;
		}
	}

	if (sum1 == 4) {
		if (a[i14 - 4][j1] == 0 || a[i14 + 1][j1] == 0) {
			if (a[i14 - 4][j1] == 0 && a[i14 + 1][j1] == 0) {
				Renew_Value_shu(i14, j1, 0, x);                                       //活四0,+10000
			}
			else {
				Renew_Value_shu(i14, j1, 6, x);                                       //死四6;+2000
			}
		}
	}
	else if (sum1 == 3) {
		if (a[i13 - 3][j1] == 0 || a[i13 + 1][j1] == 0) {
			if (a[i13 - 3][j1] == 0 && a[i13 + 1][j1] == 0) {
				Renew_Value_shu(i13, j1, 3, x);                                        //活三类型3,+1000
			}
			else {
				Renew_Value_shu(i13, j1, 5, x);                                          //死三类型5,+500
			}
		}
	}
	else if (sum1 == 2) {
		if (a[i12 - 2][j1] == 0 || a[i12 + 1][j1] == 0) {
			if (a[i12 - 2][j1] == 0 && a[i12 + 1][j1] == 0) {
				Renew_Value_shu(i12, j1, 2, x);                                    //活2类型2,+100
			}
			else {
				Renew_Value_shu(i12, j1, 4, x);                                    //死2类型4,+50
			}
		}
	}
	else if (sum1 == 1) {
		Renew_Value_shu(i, j, 1, x);                         //1颗1,+10
	}


	int i2, j2;                                                                                 //左上往右下
	int i24, i23, i22, j24, j23, j22;
	for (i2 = i - 4, j2 = j - 4; i2 <= i + 4 && j2 <= j + 4; i2++, j2++) {

		if (a[i2][j2] == x) {
			summ2 = summ2 + 1;
			if (summ2 == 4) {
				i24 = i2;
				j24 = j2;
			}
			else if (summ2 == 3) {
				i23 = i2;
				j23 = j2;
			}
			else if (summ2 == 2) {
				i22 = i2;
				j22 = j2;
			}

			if (summ2 > sum2) {
				sum2 = summ2;
			}

		}
		else {
			summ2 = 0;
		}

	}

	if (sum2 == 4) {
		if (a[i24 - 4][j24 - 4] == 0 || a[i24 + 1][j24 + 1] == 0) {
			if (a[i24 - 4][j24 - 4] == 0 && a[i24 + 1][j24 + 1] == 0) {
				Renew_Value_leftup(i24, j24, 0, x);                                       //活四0(必杀不赌)
			}
			else {
				Renew_Value_leftup(i24, j24, 6, x);                                       //死四6;+2000
			}
		}
	}
	else if (sum2 == 3) {
		if (a[i23 - 3][j23 - 3] == 0 || a[i23 + 1][j23 + 1] == 0) {
			if (a[i23 - 3][j23 - 3] == 0 && a[i23 + 1][j23 + 1] == 0) {
				Renew_Value_leftup(i23, j23, 3, x);                                        //活三类型3,+1000
			}
			else {
				Renew_Value_leftup(i23, j23, 5, x);                                          //死三类型5,+500
			}
		}
	}
	else if (sum2 == 2) {
		if (a[i22 - 2][j22 - 2] == 0 || a[i22 + 1][j22 + 1] == 0) {
			if (a[i22 - 2][j22 - 2] == 0 && a[i22 + 1][j22 + 1] == 0) {
				Renew_Value_leftup(i22, j22, 2, x);                                    //活2类型2,+100
			}
			else {
				Renew_Value_leftup(i22, j22, 4, x);                                    //死2类型4,+50
			}
		}
	}
	else if (sum2 == 1) {
		Renew_Value_leftup(i, j, 1, x);                         //1颗1,+10
	}

	int i3, j3;                                                                                    //横
	int j34, j33, j32;
	for (j3 = j - 4, i3 = i; j3 <= j + 4; j3++) {
		if (a[i3][j3] == x) {
			summ3 = summ3 + 1;
			if (summ3 == 4) {
				j34 = j3;
			}
			else if (summ3 == 3) {
				j33 = j3;
			}
			else if (summ3 == 2) {
				j32 = j3;
			}

			if (summ3 > sum3) {
				sum3 = summ3;
			}

		}
		else {
			summ3 = 0;
		}
	}

	if (sum3 == 4) {
		if (a[i3][j34 - 4] == 0 || a[i3][j34 + 1] == 0) {
			if (a[i3][j34 - 4] == 0 && a[i3][j34 + 1] == 0) {
				Renew_Value_heng(i3, j34, 0, x);                                       //活四0(必杀不赌)
			}
			else {
				Renew_Value_heng(i3, j34, 6, x);                                       //死四6;+2000
			}
		}
	}
	else if (sum3 == 3) {
		if (a[i3][j33 - 3] == 0 || a[i3][j33 + 1] == 0) {
			if (a[i3][j33 - 3] == 0 && a[i3][j33 + 1] == 0) {
				Renew_Value_heng(i3, j33, 3, x);                                        //活三类型3,+1000
			}
			else {
				Renew_Value_heng(i3, j33, 5, x);                                          //死三类型5,+500
			}
		}
	}
	else if (sum3 == 2) {
		if (a[i3][j32 - 2] == 0 || a[i3][j32 + 1] == 0) {
			if (a[i3][j32 - 2] == 0 && a[i3][j32 + 1] == 0) {
				Renew_Value_heng(i3, j32, 2, x);                                    //活2类型2,+100
			}
			else {
				Renew_Value_heng(i3, j32, 4, x);                                    //死2类型4,+50
			}
		}
	}
	else if (sum3 == 1) {
		Renew_Value_heng(i, j, 1, x);                         //1颗1,+10
	}


	int i4, j4;                                                                             //右上往左下
	int i44, i43, i42, j44, j43, j42;
	for (i4 = i - 4, j4 = j + 4; i4 <= i + 4 && j4 >= j - 4; i4++, j4--) {
		if (a[i4][j4] == x) {
			summ4 = summ4 + 1;
			if (summ4 == 4) {
				i44 = i4;
				j44 = j4;
			}
			else if (summ4 == 3) {
				i43 = i4;
				j43 = j4;
			}
			else if (summ4 == 2) {
				i42 = i4;
				j42 = j4;
			}

			if (summ4 > sum4) {
				sum4 = summ4;
			}
		}
		else {
			summ4 = 0;
		}

	}

	if (sum4 == 4) {
		if (a[i44 - 4][j44 + 4] == 0 || a[i44 + 1][j44 + 1] == 0) {
			if (a[i44 - 4][j44 + 4] == 0 && a[i44 + 1][j44 - 1] == 0) {
				Renew_Value_rightup(i44, j44, 0, x);                                       //活四0(必杀不赌)
			}
			else {
				Renew_Value_rightup(i44, j44, 6, x);                                       //死四6;+2000
			}
		}
	}
	else if (sum4 == 3) {
		if (a[i43 - 3][j43 + 3] == 0 || a[i43 + 1][j43 - 1] == 0) {
			if (a[i43 - 3][j43 + 3] == 0 && a[i43 + 1][j43 - 1] == 0) {
				Renew_Value_rightup(i43, j43, 3, x);                                        //活三类型3,+1000
			}
			else {
				Renew_Value_rightup(i43, j43, 5, x);                                          //死三类型5,+500
			}
		}
	}
	else if (sum4 == 2) {
		if (a[i42 - 2][j42 + 2] == 0 || a[i42 + 1][j42 - 1] == 0) {
			if (a[i42 - 2][j42 + 2] == 0 && a[i42 + 1][j42 - 1] == 0) {
				Renew_Value_rightup(i42, j42, 2, x);                                    //活2类型2,+100
			}
			else {
				Renew_Value_rightup(i42, j42, 4, x);                                    //死2类型4,+50
			}
		}
	}
	else if (sum4 == 1) {
		Renew_Value_rightup(i, j, 1, x);                         //1颗1,+10
	}

}

void Renew_Value_shu(int i, int j, int x, int n)            //更新价值表:竖直方向,(n:1为黑,2为白)
{
	int i1, j1;
	for (i1 = 0; i1 < 17; i1++) {
		for (j1 = 0; j1 < 17; j1++) {                     //如果已经有棋子了,不改变该点的值
			if (a[i1][j1] != 0) {
				value_black[i1][j1] = -10000;
				value_white[i1][j1] = -10000;
			}
		}
	}

	//下棋的话,周边都要加10
	if (order == 1) {                     //人为先手,人是黑棋,机器白棋
		if (n == 1) {                                              //黑棋的价值表
			value_black[i + 1][j] = value_black[i + 1][j] + 10;
			value_black[i - 1][j] = value_black[i - 1][j] + 10;
			value_black[i][j + 1] = value_black[i][j + 1] + 10;
			value_black[i][j - 1] = value_black[i][j - 1] + 10;

			value_black[i + 1][j + 1] = value_black[i + 1][j + 1] + 10;
			value_black[i - 1][j - 1] = value_black[i - 1][j - 1] + 10;
			value_black[i + 1][j - 1] = value_black[i + 1][j - 1] + 10;
			value_black[i - 1][j + 1] = value_black[i - 1][j + 1] + 10;
		}
		else if (n == 2) {
			value_white[i + 1][j] = value_white[i + 1][j] + 10;
			value_white[i - 1][j] = value_white[i - 1][j] + 10;
			value_white[i][j + 1] = value_white[i][j + 1] + 10;
			value_white[i][j - 1] = value_white[i][j - 1] + 10;

			value_white[i + 1][j + 1] = value_white[i + 1][j + 1] + 10;
			value_white[i - 1][j - 1] = value_white[i - 1][j - 1] + 10;
			value_white[i + 1][j - 1] = value_white[i + 1][j - 1] + 10;
			value_white[i - 1][j + 1] = value_white[i - 1][j + 1] + 10;
		}
	}
	else if (order == 2) {                //后手
		if (n == 1) {
			value_black[i + 1][j] = value_black[i + 1][j] + 10;
			value_black[i - 1][j] = value_black[i - 1][j] + 10;
			value_black[i][j + 1] = value_black[i][j + 1] + 10;
			value_black[i][j - 1] = value_black[i][j - 1] + 10;

			value_black[i + 1][j + 1] = value_black[i + 1][j + 1] + 10;
			value_black[i - 1][j - 1] = value_black[i - 1][j - 1] + 10;
			value_black[i + 1][j - 1] = value_black[i + 1][j - 1] + 10;
			value_black[i - 1][j + 1] = value_black[i - 1][j + 1] + 10;
		}
		else if (n == 2) {
			value_white[i + 1][j] = value_white[i + 1][j] + 10;
			value_white[i - 1][j] = value_white[i - 1][j] + 10;
			value_white[i][j + 1] = value_white[i][j + 1] + 10;
			value_white[i][j - 1] = value_white[i][j - 1] + 10;

			value_white[i + 1][j + 1] = value_white[i + 1][j + 1] + 10;
			value_white[i - 1][j - 1] = value_white[i - 1][j - 1] + 10;
			value_white[i + 1][j - 1] = value_white[i + 1][j - 1] + 10;
			value_white[i - 1][j + 1] = value_white[i - 1][j + 1] + 10;
		}
	}

	if (x == 2) {

		if (order == 1) {
			if (n == 1) {
				value_black[i - 2][j] = value_black[i - 2][j] + 100;
				value_black[i + 1][j] = value_black[i + 1][j] + 100;
			}
			else if (n == 2) {
				value_white[i - 2][j] = value_white[i - 2][j] + 100;
				value_white[i + 1][j] = value_white[i + 1][j] + 100;
			}
		}
		else if (order == 2) {
			if (n == 1) {
				value_black[i - 2][j] = value_black[i - 2][j] + 100;
				value_black[i + 1][j] = value_black[i + 1][j] + 100;
			}
			else if (n == 2) {
				value_white[i - 2][j] = value_white[i - 2][j] + 100;
				value_white[i + 1][j] = value_white[i + 1][j] + 100;
			}
		}
	}
	else if (x == 3) {
		if (order == 1) {
			if (n == 1) {
				value_black[i - 3][j] = value_black[i - 3][j] + 1000;
				value_black[i + 1][j] = value_black[i + 1][j] + 1000;
			}
			else if (n == 2) {
				value_white[i - 3][j] = value_white[i - 3][j] + 1000;
				value_white[i + 1][j] = value_white[i + 1][j] + 1000;
			}
		}
		else if (order == 2) {
			if (n == 1) {
				value_black[i - 3][j] = value_black[i - 3][j] + 1000;
				value_black[i + 1][j] = value_black[i + 1][j] + 1000;
			}
			else if (n == 2) {
				value_white[i - 3][j] = value_white[i - 3][j] + 1000;
				value_white[i + 1][j] = value_white[i + 1][j] + 1000;
			}
		}
	}
	else if (x == 4) {
		if (order == 1) {
			if (n == 1) {
				value_black[i - 2][j] = value_black[i - 2][j] + 50;
				value_black[i + 1][j] = value_black[i + 1][j] + 50;
			}
			else if (n == 2) {
				value_white[i - 2][j] = value_white[i - 2][j] + 50;
				value_white[i + 1][j] = value_white[i + 1][j] + 50;
			}
		}
		else if (order == 2) {
			if (n == 1) {
				value_black[i - 2][j] = value_black[i - 2][j] + 50;
				value_black[i + 1][j] = value_black[i + 1][j] + 50;
			}
			else if (n == 2) {
				value_white[i - 2][j] = value_white[i - 2][j] + 50;
				value_white[i + 1][j] = value_white[i + 1][j] + 50;
			}
		}
	}
	else if (x == 5) {
		if (order == 1) {
			if (n == 1) {
				value_black[i - 3][j] = value_black[i - 3][j] + 500;
				value_black[i + 1][j] = value_black[i + 1][j] + 500;
			}
			else if (n == 2) {
				value_white[i - 3][j] = value_white[i - 3][j] + 500;
				value_white[i + 1][j] = value_white[i + 1][j] + 500;
			}
		}
		else if (order == 2) {
			if (n == 1) {
				value_black[i - 3][j] = value_black[i - 3][j] + 500;
				value_black[i + 1][j] = value_black[i + 1][j] + 500;
			}
			else if (n == 2) {
				value_white[i - 3][j] = value_white[i - 3][j] + 500;
				value_white[i + 1][j] = value_white[i + 1][j] + 500;
			}

		}
	}
	else if (x == 6) {
		if (order == 1) {
			if (n == 1) {
				value_black[i - 4][j] = value_black[i - 4][j] + 2000;
				value_black[i + 1][j] = value_black[i + 1][j] + 2000;
			}
			else if (n == 2) {
				value_white[i - 4][j] = value_white[i - 4][j] + 2000;
				value_white[i + 1][j] = value_white[i + 1][j] + 2000;
			}
		}
		else if (order == 2) {
			if (n == 1) {
				value_black[i - 4][j] = value_black[i - 4][j] + 2000;
				value_black[i + 1][j] = value_black[i + 1][j] + 2000;
			}
			else if (n == 2) {
				value_white[i - 4][j] = value_white[i - 4][j] + 2000;
				value_white[i + 1][j] = value_white[i + 1][j] + 2000;
			}
		}
	}
	else if (x == 0) {
		if (order == 1) {
			if (n == 1) {
				value_black[i - 4][j] = value_black[i - 4][j] + 10000;
				value_black[i + 1][j] = value_black[i + 1][j] + 10000;
			}
			else if (n == 2) {
				value_white[i - 4][j] = value_white[i - 4][j] + 10000;
				value_white[i + 1][j] = value_white[i + 1][j] + 10000;
			}
		}
		else if (order == 2) {
			if (n == 1) {
				value_black[i - 4][j] = value_black[i - 4][j] + 10000;
				value_black[i + 1][j] = value_black[i + 1][j] + 10000;
			}
			else if (n == 2) {
				value_white[i - 4][j] = value_white[i - 4][j] + 10000;
				value_white[i + 1][j] = value_white[i + 1][j] + 10000;
			}
		}
	}
}

void Renew_Value_leftup(int i, int j, int x, int n)            //更新价值表:左上往右下,(n:1为黑,2为白)
{
	int i1, j1;
	for (i1 = 0; i1 < 17; i1++) {
		for (j1 = 0; j1 < 17; j1++) {                     //如果已经有棋子了,不改变该点的值
			if (a[i1][j1] != 0) {
				value_black[i1][j1] = -10000;
				value_white[i1][j1] = -10000;
			}
		}
	}

	//下棋的话,周边都要加10
	if (order == 1) {                     //人为先手,人是黑棋,机器白棋
		if (n == 1) {                                              //黑棋的价值表
			value_black[i + 1][j] = value_black[i + 1][j] + 10;
			value_black[i - 1][j] = value_black[i - 1][j] + 10;
			value_black[i][j + 1] = value_black[i][j + 1] + 10;
			value_black[i][j - 1] = value_black[i][j - 1] + 10;

			value_black[i + 1][j + 1] = value_black[i + 1][j + 1] + 10;
			value_black[i - 1][j - 1] = value_black[i - 1][j - 1] + 10;
			value_black[i + 1][j - 1] = value_black[i + 1][j - 1] + 10;
			value_black[i - 1][j + 1] = value_black[i - 1][j + 1] + 10;
		}
		else if (n == 2) {
			value_white[i + 1][j] = value_white[i + 1][j] + 10;
			value_white[i - 1][j] = value_white[i - 1][j] + 10;
			value_white[i][j + 1] = value_white[i][j + 1] + 10;
			value_white[i][j - 1] = value_white[i][j - 1] + 10;

			value_white[i + 1][j + 1] = value_white[i + 1][j + 1] + 10;
			value_white[i - 1][j - 1] = value_white[i - 1][j - 1] + 10;
			value_white[i + 1][j - 1] = value_white[i + 1][j - 1] + 10;
			value_white[i - 1][j + 1] = value_white[i - 1][j + 1] + 10;
		}
	}
	else if (order == 2) {                //后手
		if (n == 1) {
			value_black[i + 1][j] = value_black[i + 1][j] + 10;
			value_black[i - 1][j] = value_black[i - 1][j] + 10;
			value_black[i][j + 1] = value_black[i][j + 1] + 10;
			value_black[i][j - 1] = value_black[i][j - 1] + 10;

			value_black[i + 1][j + 1] = value_black[i + 1][j + 1] + 10;
			value_black[i - 1][j - 1] = value_black[i - 1][j - 1] + 10;
			value_black[i + 1][j - 1] = value_black[i + 1][j - 1] + 10;
			value_black[i - 1][j + 1] = value_black[i - 1][j + 1] + 10;
		}
		else if (n == 2) {
			value_white[i + 1][j] = value_white[i + 1][j] + 10;
			value_white[i - 1][j] = value_white[i - 1][j] + 10;
			value_white[i][j + 1] = value_white[i][j + 1] + 10;
			value_white[i][j - 1] = value_white[i][j - 1] + 10;

			value_white[i + 1][j + 1] = value_white[i + 1][j + 1] + 10;
			value_white[i - 1][j - 1] = value_white[i - 1][j - 1] + 10;
			value_white[i + 1][j - 1] = value_white[i + 1][j - 1] + 10;
			value_white[i - 1][j + 1] = value_white[i - 1][j + 1] + 10;
		}
	}

	if (x == 2) {
		if (order == 1) {                                                     //人为先手,人是黑棋,机器白棋
			if (n == 1) {
				value_black[i - 2][j - 2] = value_black[i - 2][j - 2] + 100;
				value_black[i + 1][j + 1] = value_black[i + 1][j + 1] + 100;
			}
			else if (n == 2) {
				value_white[i - 2][j - 2] = value_white[i - 2][j - 2] + 100;
				value_white[i + 1][j + 1] = value_white[i + 1][j + 1] + 100;
			}
		}
		else if (order == 2) {
			if (n == 1) {
				value_black[i - 2][j - 2] = value_black[i - 2][j - 2] + 100;
				value_black[i + 1][j + 1] = value_black[i + 1][j + 1] + 100;
			}
			else if (n == 2) {
				value_white[i - 2][j - 2] = value_white[i - 2][j - 2] + 100;
				value_white[i + 1][j + 1] = value_white[i + 1][j + 1] + 100;
			}
		}
	}
	else if (x == 3) {
		if (order == 1) {
			if (n == 1) {
				value_black[i - 3][j - 3] = value_black[i - 3][j - 3] + 1000;
				value_black[i + 1][j + 1] = value_black[i + 1][j + 1] + 1000;
			}
			else if (n == 2) {
				value_white[i - 3][j - 3] = value_white[i - 3][j - 3] + 1000;
				value_white[i + 1][j + 1] = value_white[i + 1][j + 1] + 1000;
			}
		}
		else if (order == 2) {
			if (n == 1) {
				value_black[i - 3][j - 3] = value_black[i - 3][j - 3] + 1000;
				value_black[i + 1][j + 1] = value_black[i + 1][j + 1] + 1000;
			}
			else if (n == 2) {
				value_white[i - 3][j - 3] = value_white[i - 3][j - 3] + 1000;
				value_white[i + 1][j + 1] = value_white[i + 1][j + 1] + 1000;
			}
		}
	}
	else if (x == 4) {
		if (order == 1) {
			if (n == 1) {
				value_black[i - 2][j - 2] = value_black[i - 2][j - 2] + 50;
				value_black[i + 1][j + 1] = value_black[i + 1][j + 1] + 50;
			}
			else if (n == 2) {
				value_white[i - 2][j - 2] = value_white[i - 2][j - 2] + 50;
				value_white[i + 1][j + 1] = value_white[i + 1][j + 1] + 50;
			}
		}
		else if (order == 2) {
			if (n == 1) {
				value_black[i - 2][j - 2] = value_black[i - 2][j - 2] + 50;
				value_black[i + 1][j + 1] = value_black[i + 1][j + 1] + 50;
			}
			else if (n == 2) {
				value_white[i - 2][j - 2] = value_white[i - 2][j - 2] + 50;
				value_white[i + 1][j + 1] = value_white[i + 1][j + 1] + 50;
			}
		}
	}
	else if (x == 5) {
		if (order == 1) {
			if (n == 1) {
				value_black[i - 3][j - 3] = value_black[i - 3][j - 3] + 500;
				value_black[i + 1][j + 1] = value_black[i + 1][j + 1] + 500;
			}
			else if (n == 2) {
				value_white[i - 3][j - 3] = value_white[i - 3][j - 3] + 500;
				value_white[i + 1][j + 1] = value_white[i + 1][j + 1] + 500;
			}
		}
		else if (order == 2) {
			if (n == 1) {
				value_black[i - 3][j - 3] = value_black[i - 3][j - 3] + 500;
				value_black[i + 1][j + 1] = value_black[i + 1][j + 1] + 500;
			}
			else if (n == 2) {
				value_white[i - 3][j - 3] = value_white[i - 3][j - 3] + 500;
				value_white[i + 1][j + 1] = value_white[i + 1][j + 1] + 500;
			}

		}
	}
	else if (x == 6) {
		if (order == 1) {
			if (n == 1) {
				value_black[i - 4][j - 4] = value_black[i - 4][j - 4] + 2000;
				value_black[i + 1][j + 1] = value_black[i + 1][j + 1] + 2000;
			}
			else if (n == 2) {
				value_white[i - 4][j - 4] = value_white[i - 4][j - 4] + 2000;
				value_white[i + 1][j + 1] = value_white[i + 1][j + 1] + 2000;
			}
		}
		else if (order == 2) {
			if (n == 1) {
				value_black[i - 4][j - 4] = value_black[i - 4][j - 4] + 2000;
				value_black[i + 1][j + 1] = value_black[i + 1][j + 1] + 2000;
			}
			else if (n == 2) {
				value_white[i - 4][j - 4] = value_white[i - 4][j - 4] + 2000;
				value_white[i + 1][j + 1] = value_white[i + 1][j + 1] + 2000;
			}
		}
	}
	else if (x == 0) {
		if (order == 1) {
			if (n == 1) {
				value_black[i - 4][j - 4] = value_black[i - 4][j - 4] + 10000;
				value_black[i + 1][j + 1] = value_black[i + 1][j + 1] + 10000;
			}
			else if (n == 2) {
				value_white[i - 4][j - 4] = value_white[i - 4][j - 4] + 10000;
				value_white[i + 1][j + 1] = value_white[i + 1][j + 1] + 10000;
			}
		}
		else if (order == 2) {
			if (n == 1) {
				value_black[i - 4][j - 4] = value_black[i - 4][j - 4] + 10000;
				value_black[i + 1][j + 1] = value_black[i + 1][j + 1] + 10000;
			}
			else if (n == 2) {
				value_white[i - 4][j - 4] = value_white[i - 4][j - 4] + 10000;
				value_white[i + 1][j + 1] = value_white[i + 1][j + 1] + 10000;
			}
		}
	}
}

void Renew_Value_heng(int i, int j, int x, int n)                             //更新价值表:水平方向(n:1为黑,2为白)
{
	int i1, j1;
	for (i1 = 0; i1 < 17; i1++) {
		for (j1 = 0; j1 < 17; j1++) {                     //如果已经有棋子了,不改变该点的值
			if (a[i1][j1] != 0) {
				value_black[i1][j1] = -10000;
				value_white[i1][j1] = -10000;
			}
		}
	}

	//下棋的话,周边都要加10
	if (order == 1) {                     //人为先手,人是黑棋,机器白棋
		if (n == 1) {                                              //黑棋的价值表
			value_black[i + 1][j] = value_black[i + 1][j] + 10;
			value_black[i - 1][j] = value_black[i - 1][j] + 10;
			value_black[i][j + 1] = value_black[i][j + 1] + 10;
			value_black[i][j - 1] = value_black[i][j - 1] + 10;

			value_black[i + 1][j + 1] = value_black[i + 1][j + 1] + 10;
			value_black[i - 1][j - 1] = value_black[i - 1][j - 1] + 10;
			value_black[i + 1][j - 1] = value_black[i + 1][j - 1] + 10;
			value_black[i - 1][j + 1] = value_black[i - 1][j + 1] + 10;
		}
		else if (n == 2) {
			value_white[i + 1][j] = value_white[i + 1][j] + 10;
			value_white[i - 1][j] = value_white[i - 1][j] + 10;
			value_white[i][j + 1] = value_white[i][j + 1] + 10;
			value_white[i][j - 1] = value_white[i][j - 1] + 10;

			value_white[i + 1][j + 1] = value_white[i + 1][j + 1] + 10;
			value_white[i - 1][j - 1] = value_white[i - 1][j - 1] + 10;
			value_white[i + 1][j - 1] = value_white[i + 1][j - 1] + 10;
			value_white[i - 1][j + 1] = value_white[i - 1][j + 1] + 10;
		}
	}
	else if (order == 2) {                //后手
		if (n == 1) {
			value_black[i + 1][j] = value_black[i + 1][j] + 10;
			value_black[i - 1][j] = value_black[i - 1][j] + 10;
			value_black[i][j + 1] = value_black[i][j + 1] + 10;
			value_black[i][j - 1] = value_black[i][j - 1] + 10;

			value_black[i + 1][j + 1] = value_black[i + 1][j + 1] + 10;
			value_black[i - 1][j - 1] = value_black[i - 1][j - 1] + 10;
			value_black[i + 1][j - 1] = value_black[i + 1][j - 1] + 10;
			value_black[i - 1][j + 1] = value_black[i - 1][j + 1] + 10;
		}
		else if (n == 2) {
			value_white[i + 1][j] = value_white[i + 1][j] + 10;
			value_white[i - 1][j] = value_white[i - 1][j] + 10;
			value_white[i][j + 1] = value_white[i][j + 1] + 10;
			value_white[i][j - 1] = value_white[i][j - 1] + 10;

			value_white[i + 1][j + 1] = value_white[i + 1][j + 1] + 10;
			value_white[i - 1][j - 1] = value_white[i - 1][j - 1] + 10;
			value_white[i + 1][j - 1] = value_white[i + 1][j - 1] + 10;
			value_white[i - 1][j + 1] = value_white[i - 1][j + 1] + 10;
		}
	}

	if (x == 2) {
		if (order == 1) {                                                     //人为先手,人是黑棋,机器白棋
			if (n == 1) {
				value_black[i][j - 2] = value_black[i][j - 2] + 100;
				value_black[i][j + 1] = value_black[i][j + 1] + 100;
			}
			else if (n == 2) {
				value_white[i][j - 2] = value_white[i][j - 2] + 100;
				value_white[i][j + 1] = value_white[i][j + 1] + 100;
			}
		}
		else if (order == 2) {
			if (n == 1) {
				value_black[i][j - 2] = value_black[i][j - 2] + 100;
				value_black[i][j + 1] = value_black[i][j + 1] + 100;
			}
			else if (n == 2) {
				value_white[i][j - 2] = value_white[i][j - 2] + 100;
				value_white[i][j + 1] = value_white[i][j + 1] + 100;
			}
		}
	}
	else if (x == 3) {
		if (order == 1) {
			if (n == 1) {
				value_black[i][j - 3] = value_black[i][j - 3] + 1000;
				value_black[i][j + 1] = value_black[i][j + 1] + 1000;
			}
			else if (n == 2) {
				value_white[i][j - 3] = value_white[i][j - 3] + 1000;
				value_white[i][j + 1] = value_white[i][j + 1] + 1000;
			}
		}
		else if (order == 2) {
			if (n == 1) {
				value_black[i][j - 3] = value_black[i][j - 3] + 1000;
				value_black[i][j + 1] = value_black[i][j + 1] + 1000;
			}
			else if (n == 2) {
				value_white[i][j - 3] = value_white[i][j - 3] + 1000;
				value_white[i][j + 1] = value_white[i][j + 1] + 1000;
			}
		}
	}
	else if (x == 4) {
		if (order == 1) {
			if (n == 1) {
				value_black[i][j - 2] = value_black[i][j - 2] + 50;
				value_black[i][j + 1] = value_black[i][j + 1] + 50;
			}
			else if (n == 2) {
				value_white[i][j - 2] = value_white[i][j - 2] + 50;
				value_white[i][j + 1] = value_white[i][j + 1] + 50;
			}
		}
		else if (order == 2) {
			if (n == 1) {
				value_black[i][j - 2] = value_black[i][j - 2] + 50;
				value_black[i][j + 1] = value_black[i][j + 1] + 50;
			}
			else if (n == 2) {
				value_white[i][j - 2] = value_white[i][j - 2] + 50;
				value_white[i][j + 1] = value_white[i][j + 1] + 50;
			}
		}
	}
	else if (x == 5) {
		if (order == 1) {
			if (n == 1) {
				value_black[i][j - 3] = value_black[i][j - 3] + 500;
				value_black[i][j + 1] = value_black[i][j + 1] + 500;
			}
			else if (n == 2) {
				value_white[i][j - 3] = value_white[i][j - 3] + 500;
				value_white[i][j + 1] = value_white[i][j + 1] + 500;
			}
		}
		else if (order == 2) {
			if (n == 1) {
				value_black[i][j - 3] = value_black[i][j - 3] + 500;
				value_black[i][j + 1] = value_black[i][j + 1] + 500;
			}
			else if (n == 2) {
				value_white[i][j - 3] = value_white[i][j - 3] + 500;
				value_white[i][j + 1] = value_white[i][j + 1] + 500;
			}

		}
	}
	else if (x == 6) {
		if (order == 1) {
			if (n == 1) {
				value_black[i][j - 4] = value_black[i][j - 4] + 2000;
				value_black[i][j + 1] = value_black[i][j + 1] + 2000;
			}
			else if (n == 2) {
				value_white[i][j - 4] = value_white[i][j - 4] + 2000;
				value_white[i][j + 1] = value_white[i][j + 1] + 2000;
			}
		}
		else if (order == 2) {
			if (n == 1) {
				value_black[i][j - 4] = value_black[i][j - 4] + 2000;
				value_black[i][j + 1] = value_black[i][j + 1] + 2000;
			}
			else if (n == 2) {
				value_white[i][j - 4] = value_white[i][j - 4] + 2000;
				value_white[i][j + 1] = value_white[i][j + 1] + 2000;
			}
		}
	}
	else if (x == 0) {
		if (order == 1) {
			if (n == 1) {
				value_black[i][j - 4] = value_black[i][j - 4] + 10000;
				value_black[i][j + 1] = value_black[i][j + 1] + 10000;
			}
			else if (n == 2) {
				value_white[i][j - 4] = value_white[i][j - 4] + 10000;
				value_white[i][j + 1] = value_white[i][j + 1] + 10000;
			}
		}
		else if (order == 2) {
			if (n == 1) {
				value_black[i][j - 4] = value_black[i][j - 4] + 10000;
				value_black[i][j + 1] = value_black[i][j + 1] + 10000;
			}
			else if (n == 2) {
				value_white[i][j - 4] = value_white[i][j - 4] + 10000;
				value_white[i][j + 1] = value_white[i][j + 1] + 10000;
			}
		}
	}
}

void Renew_Value_rightup(int i, int j, int x, int n)                                           //更新价值表:右上到左下(n:1为黑,2为白)
{
	int i1, j1;
	for (i1 = 0; i1 < 17; i1++) {
		for (j1 = 0; j1 < 17; j1++) {                     //如果已经有棋子了,不改变该点的值
			if (a[i1][j1] != 0) {
				value_black[i1][j1] = -10000;
				value_white[i1][j1] = -10000;
			}
		}
	}

	//下棋的话,周边都要加10
	if (order == 1) {                     //人为先手,人是黑棋,机器白棋
		if (n == 1) {                                              //黑棋的价值表
			value_black[i + 1][j] = value_black[i + 1][j] + 10;
			value_black[i - 1][j] = value_black[i - 1][j] + 10;
			value_black[i][j + 1] = value_black[i][j + 1] + 10;
			value_black[i][j - 1] = value_black[i][j - 1] + 10;

			value_black[i + 1][j + 1] = value_black[i + 1][j + 1] + 10;
			value_black[i - 1][j - 1] = value_black[i - 1][j - 1] + 10;
			value_black[i + 1][j - 1] = value_black[i + 1][j - 1] + 10;
			value_black[i - 1][j + 1] = value_black[i - 1][j + 1] + 10;
		}
		else if (n == 2) {
			value_white[i + 1][j] = value_white[i + 1][j] + 10;
			value_white[i - 1][j] = value_white[i - 1][j] + 10;
			value_white[i][j + 1] = value_white[i][j + 1] + 10;
			value_white[i][j - 1] = value_white[i][j - 1] + 10;

			value_white[i + 1][j + 1] = value_white[i + 1][j + 1] + 10;
			value_white[i - 1][j - 1] = value_white[i - 1][j - 1] + 10;
			value_white[i + 1][j - 1] = value_white[i + 1][j - 1] + 10;
			value_white[i - 1][j + 1] = value_white[i - 1][j + 1] + 10;
		}
	}
	else if (order == 2) {                //后手
		if (n == 1) {
			value_black[i + 1][j] = value_black[i + 1][j] + 10;
			value_black[i - 1][j] = value_black[i - 1][j] + 10;
			value_black[i][j + 1] = value_black[i][j + 1] + 10;
			value_black[i][j - 1] = value_black[i][j - 1] + 10;

			value_black[i + 1][j + 1] = value_black[i + 1][j + 1] + 10;
			value_black[i - 1][j - 1] = value_black[i - 1][j - 1] + 10;
			value_black[i + 1][j - 1] = value_black[i + 1][j - 1] + 10;
			value_black[i - 1][j + 1] = value_black[i - 1][j + 1] + 10;
		}
		else if (n == 2) {
			value_white[i + 1][j] = value_white[i + 1][j] + 10;
			value_white[i - 1][j] = value_white[i - 1][j] + 10;
			value_white[i][j + 1] = value_white[i][j + 1] + 10;
			value_white[i][j - 1] = value_white[i][j - 1] + 10;

			value_white[i + 1][j + 1] = value_white[i + 1][j + 1] + 10;
			value_white[i - 1][j - 1] = value_white[i - 1][j - 1] + 10;
			value_white[i + 1][j - 1] = value_white[i + 1][j - 1] + 10;
			value_white[i - 1][j + 1] = value_white[i - 1][j + 1] + 10;
		}
	}
	if (x == 2) {
		if (order == 1) {                                                     //人为先手,人是黑棋,机器白棋
			if (n == 1) {
				value_black[i - 2][j + 2] = value_black[i - 2][j + 2] + 100;
				value_black[i + 1][j - 1] = value_black[i + 1][j - 1] + 100;
			}
			else if (n == 2) {
				value_white[i - 2][j + 2] = value_white[i - 2][j + 2] + 100;
				value_white[i + 1][j - 1] = value_white[i + 1][j - 1] + 100;
			}
		}
		else if (order == 2) {
			if (n == 1) {
				value_black[i - 2][j + 2] = value_black[i - 2][j + 2] + 100;
				value_black[i + 1][j - 1] = value_black[i + 1][j - 1] + 100;
			}
			else if (n == 2) {
				value_white[i - 2][j + 2] = value_white[i - 2][j + 2] + 100;
				value_white[i + 1][j - 1] = value_white[i + 1][j - 1] + 100;
			}
		}
	}
	else if (x == 3) {
		if (order == 1) {
			if (n == 1) {
				value_black[i - 3][j + 3] = value_black[i - 3][j + 3] + 1000;
				value_black[i + 1][j - 1] = value_black[i + 1][j - 1] + 1000;
			}
			else if (n == 2) {
				value_white[i - 3][j + 3] = value_white[i - 3][j + 3] + 1000;
				value_white[i + 1][j - 1] = value_white[i + 1][j - 1] + 1000;
			}
		}
		else if (order == 2) {
			if (n == 1) {
				value_black[i - 3][j + 3] = value_black[i - 3][j + 3] + 1000;
				value_black[i + 1][j - 1] = value_black[i + 1][j - 1] + 1000;
			}
			else if (n == 2) {
				value_white[i - 3][j + 3] = value_white[i - 3][j + 3] + 1000;
				value_white[i + 1][j - 1] = value_white[i + 1][j - 1] + 1000;
			}
		}
	}
	else if (x == 4) {
		if (order == 1) {
			if (n == 1) {
				value_black[i - 2][j + 2] = value_black[i - 2][j + 2] + 50;
				value_black[i + 1][j - 1] = value_black[i + 1][j - 1] + 50;
			}
			else if (n == 2) {
				value_white[i - 2][j + 2] = value_white[i - 2][j + 2] + 50;
				value_white[i + 1][j - 1] = value_white[i + 1][j - 1] + 50;
			}
		}
		else if (order == 2) {
			if (n == 1) {
				value_black[i - 2][j + 2] = value_black[i - 2][j + 2] + 50;
				value_black[i + 1][j - 1] = value_black[i + 1][j - 1] + 50;
			}
			else if (n == 2) {
				value_white[i - 2][j + 2] = value_white[i - 2][j + 2] + 50;
				value_white[i + 1][j - 1] = value_white[i + 1][j - 1] + 50;
			}
		}
	}
	else if (x == 5) {
		if (order == 1) {
			if (n == 1) {
				value_black[i - 3][j + 3] = value_black[i - 3][j + 3] + 500;
				value_black[i + 1][j - 1] = value_black[i + 1][j - 1] + 500;
			}
			else if (n == 2) {
				value_white[i - 3][j + 3] = value_white[i - 3][j + 3] + 500;
				value_white[i + 1][j - 1] = value_white[i + 1][j - 1] + 500;
			}
		}
		else if (order == 2) {
			if (n == 1) {
				value_black[i - 3][j + 3] = value_black[i - 3][j + 3] + 500;
				value_black[i + 1][j - 1] = value_black[i + 1][j - 1] + 500;
			}
			else if (n == 2) {
				value_white[i - 3][j + 3] = value_white[i - 3][j + 3] + 500;
				value_white[i + 1][j - 1] = value_white[i + 1][j - 1] + 500;
			}

		}
	}
	else if (x == 6) {
		if (order == 1) {
			if (n == 1) {
				value_black[i - 4][j + 4] = value_black[i - 4][j + 4] + 2000;
				value_black[i + 1][j - 1] = value_black[i + 1][j - 1] + 2000;
			}
			else if (n == 2) {
				value_white[i - 4][j + 4] = value_white[i - 4][j + 4] + 2000;
				value_white[i + 1][j - 1] = value_white[i + 1][j - 1] + 2000;
			}
		}
		else if (order == 2) {
			if (n == 1) {
				value_black[i - 4][j + 4] = value_black[i - 4][j + 4] + 2000;
				value_black[i + 1][j - 1] = value_black[i + 1][j - 1] + 2000;
			}
			else if (n == 2) {
				value_white[i - 4][j + 4] = value_white[i - 4][j + 4] + 2000;
				value_white[i + 1][j - 1] = value_white[i + 1][j - 1] + 2000;
			}
		}
	}
	else if (x == 0) {
		if (order == 1) {
			if (n == 1) {
				value_black[i - 4][j + 4] = value_black[i - 4][j + 4] + 10000;
				value_black[i + 1][j - 1] = value_black[i + 1][j - 1] + 10000;
			}
			else if (n == 2) {
				value_white[i - 4][j + 4] = value_white[i - 4][j + 4] + 10000;
				value_white[i + 1][j - 1] = value_white[i + 1][j - 1] + 10000;
			}
		}
		else if (order == 2) {
			if (n == 1) {
				value_black[i - 4][j + 4] = value_black[i - 4][j + 4] + 10000;
				value_black[i + 1][j - 1] = value_black[i + 1][j - 1] + 10000;
			}
			else if (n == 2) {
				value_white[i - 4][j + 4] = value_white[i - 4][j + 4] + 10000;
				value_white[i + 1][j - 1] = value_white[i + 1][j - 1] + 10000;
			}
		}
	}
}


void Medium()                             //中级难度
{
	int i, j;
	int ii1_b, jj1_b, ii1_w, jj1_w;
	int ii1 = 0, jj1 = 0;
	int max = 0;
	int max_w = 0, max_b = 0;

	for (i = 0; i < 17; i++) {
		for (j = 0; j < 17; j++) {
			if (a[i][j] != 0) {                         //下过棋子的位置不再下棋子。
				continue;
			}
			else {
				if (value_white[i][j] > max_w) {
					max_w = value_white[i][j];
					ii1_w = i;
					jj1_w = j;
				}
				if (value_black[i][j] > max_b) {
					max_b = value_black[i][j];
					ii1_b = i;
					jj1_b = j;
				}
			}
		}
	}

	if (max_w >= max_b) {                              //根据两个价值表比较进攻与防守哪个更有利。
		max = max_w;
		ii1 = ii1_w;
		jj1 = jj1_w;
	}
	else {
		max = max_b;
		ii1 = ii1_b;
		jj1 = jj1_b;
	}

	if (order == 1 && flag == 1) {                      //机器白子

		a[ii1][jj1] = 2;                  //下白子
		setfillcolor(WHITE);
		solidcircle((jj1 * 25) + 100, (ii1 * 25) + 100, 10);
		flag = 0;

		setfillcolor(BLACK);                   //记录下棋者  
		solidcircle(215, 80, 10);

		if (Rules(ii1, jj1, 2)) {
			//白子胜
			MessageBox(chunchun, _T("白棋子胜利"), _T("淑女"), MB_OK);
			flag = 2;                                                        //使不能再下棋
			Newa();                               //初始化
			ChessBoard();                //再次调用棋盘
		}
		Judge_ML(ii1, jj1, 2);           //判断类型,再调用函数更新价值表

		e = (jj1 * 25) + 100;
		f = (ii1 * 25) + 100;
	}
	else if (order == 2 && flag == 0) {
		a[ii1][jj1] = 1;                  //下黑子
		setfillcolor(BLACK);
		solidcircle((jj1 * 25) + 100, (ii1 * 25) + 100, 10);
		flag = 1;

		setfillcolor(WHITE);                   //记录下棋者
		solidcircle(215, 80, 10);

		if (Rules(ii1, jj1, 1)) {
			//黑子胜
			MessageBox(chunchun, _T("黑棋子胜利"), _T("淑女"), MB_OK);

			flag = 2;                                                        //使不能再下棋
			Newa();                               //初始化
			ChessBoard();                //再次调用棋盘
		}
		Judge_ML(ii1, jj1, 1);           //判断类型,再调用函数更新价值表

		c = (jj1 * 25) + 100;
		d = (ii1 * 25) + 100;
	}

}

void Medium_J()                             //中级难度
{
	printf("中等函数\n");
	int i, j;
	int ii1_b, jj1_b, ii1_w, jj1_w;
	int ii1 = 0, jj1 = 0;
	int max = 0;
	int max_w = 0, max_b = 0;

	for (i = 0; i < 17; i++) {
		for (j = 0; j < 17; j++) {
			if (a[i][j] != 0) {                         //下过棋子的位置不再下棋子。
				continue;
			}
			else {
				if (value_white[i][j] > max_w) {
					max_w = value_white[i][j];
					ii1_w = i;
					jj1_w = j;
				}
				if (value_black[i][j] > max_b) {
					max_b = value_black[i][j];
					ii1_b = i;
					jj1_b = j;
				}
			}
		}
	}

	if (max_w >= max_b) {                              //根据两个价值表比较进攻与防守哪个更有利。
		max = max_w;
		ii1 = ii1_w;
		jj1 = jj1_w;
	}
	else {
		max = max_b;
		ii1 = ii1_b;
		jj1 = jj1_b;
	}

	if (flag == 1) {                      //机器白子

		a[ii1][jj1] = 2;                  //下白子
		setfillcolor(WHITE);
		solidcircle((jj1 * 25) + 100, (ii1 * 25) + 100, 10);
		flag = 0;

		setfillcolor(BLACK);                   //记录下棋者
		solidcircle(215, 80, 10);

		Judge_ML(ii1, jj1, 2);           //判断类型,再调用函数更新价值表

		if (Rules(ii1, jj1, 2)) {
			//白子胜
			MessageBox(chunchun, _T("白棋子胜利"), _T("淑女"), MB_OK);
			flag = 2;                                                        //使不能再下棋
			Newa();                               //初始化
			ChessBoard();                //再次调用棋盘
		}
	}
	else if (flag == 0) {
		a[ii1][jj1] = 1;                  //下黑子
		setfillcolor(BLACK);
		solidcircle((jj1 * 25) + 100, (ii1 * 25) + 100, 10);
		flag = 1;

		setfillcolor(WHITE);                   //记录下棋者
		solidcircle(215, 80, 10);

		Judge_ML(ii1, jj1, 1);           //判断类型,再调用函数更新价值表

		if (Rules(ii1, jj1, 1)) {
			//黑子胜
			MessageBox(chunchun, _T("黑棋子胜利"), _T("淑女"), MB_OK);

			flag = 2;                                                        //使不能再下棋
			Newa();                               //初始化
			ChessBoard();                //再次调用棋盘
		}
	}
}


void Low_J()               //初级难度算法,//传入先后手,0为先手,1为后手
{
	int numi, numj;

	while (1) {
		while (1) {
			numi = rand();
			if (numi >= 0 && numi < 17) {
				break;
			}
		}
		while (1) {
			numj = rand();
			if (numj >= 0 && numj < 17) {
				break;
			}
		}

		if (a[numj][numi] == 0) {
			break;
		}
	}

	if (flag == 1) {                               //人先下棋,人下黑子,机器白子
		setfillcolor(WHITE);
		solidcircle((numi * 25) + 100, (numj * 25) + 100, 10);      //在指定区域里面画实心圆
		a[numj][numi] = 2;
		value_black[numj][numi] = 0;
		value_white[numj][numi] = 0;
		flag = 0;

		setfillcolor(BLACK);                                         //记录下棋者
		solidcircle(215, 80, 10);

		if (Rules(numj, numi, 2)) {
			//白子胜
			MessageBox(chunchun, _T("白棋子胜利"), _T("淑女"), MB_OK);
			flag = 2;                                                        //使不能再下棋
			Newa();                               //初始化
			ChessBoard();                //再次调用棋盘
		}

	}
	else if (flag == 0) {                               //机器先下棋,机器下黑子,人下白子
		setfillcolor(BLACK);
		solidcircle((numi * 25) + 100, (numj * 25) + 100, 10);
		a[numj][numi] = 1;
		value_black[numj][numi] = 0;
		value_white[numj][numi] = 0;
		flag = 1;

		setfillcolor(WHITE);                                                   //记录下棋者
		solidcircle(215, 80, 10);

		if (Rules(numj, numi, 1)) {
			//黑子胜
			MessageBox(chunchun, _T("白棋子胜利"), _T("淑女"), MB_OK);
			flag = 2;                                                        //使不能再下棋
			Newa();                               //初始化
			ChessBoard();                //再次调用棋盘
		}


	}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132
  • 133
  • 134
  • 135
  • 136
  • 137
  • 138
  • 139
  • 140
  • 141
  • 142
  • 143
  • 144
  • 145
  • 146
  • 147
  • 148
  • 149
  • 150
  • 151
  • 152
  • 153
  • 154
  • 155
  • 156
  • 157
  • 158
  • 159
  • 160
  • 161
  • 162
  • 163
  • 164
  • 165
  • 166
  • 167
  • 168
  • 169
  • 170
  • 171
  • 172
  • 173
  • 174
  • 175
  • 176
  • 177
  • 178
  • 179
  • 180
  • 181
  • 182
  • 183
  • 184
  • 185
  • 186
  • 187
  • 188
  • 189
  • 190
  • 191
  • 192
  • 193
  • 194
  • 195
  • 196
  • 197
  • 198
  • 199
  • 200
  • 201
  • 202
  • 203
  • 204
  • 205
  • 206
  • 207
  • 208
  • 209
  • 210
  • 211
  • 212
  • 213
  • 214
  • 215
  • 216
  • 217
  • 218
  • 219
  • 220
  • 221
  • 222
  • 223
  • 224
  • 225
  • 226
  • 227
  • 228
  • 229
  • 230
  • 231
  • 232
  • 233
  • 234
  • 235
  • 236
  • 237
  • 238
  • 239
  • 240
  • 241
  • 242
  • 243
  • 244
  • 245
  • 246
  • 247
  • 248
  • 249
  • 250
  • 251
  • 252
  • 253
  • 254
  • 255
  • 256
  • 257
  • 258
  • 259
  • 260
  • 261
  • 262
  • 263
  • 264
  • 265
  • 266
  • 267
  • 268
  • 269
  • 270
  • 271
  • 272
  • 273
  • 274
  • 275
  • 276
  • 277
  • 278
  • 279
  • 280
  • 281
  • 282
  • 283
  • 284
  • 285
  • 286
  • 287
  • 288
  • 289
  • 290
  • 291
  • 292
  • 293
  • 294
  • 295
  • 296
  • 297
  • 298
  • 299
  • 300
  • 301
  • 302
  • 303
  • 304
  • 305
  • 306
  • 307
  • 308
  • 309
  • 310
  • 311
  • 312
  • 313
  • 314
  • 315
  • 316
  • 317
  • 318
  • 319
  • 320
  • 321
  • 322
  • 323
  • 324
  • 325
  • 326
  • 327
  • 328
  • 329
  • 330
  • 331
  • 332
  • 333
  • 334
  • 335
  • 336
  • 337
  • 338
  • 339
  • 340
  • 341
  • 342
  • 343
  • 344
  • 345
  • 346
  • 347
  • 348
  • 349
  • 350
  • 351
  • 352
  • 353
  • 354
  • 355
  • 356
  • 357
  • 358
  • 359
  • 360
  • 361
  • 362
  • 363
  • 364
  • 365
  • 366
  • 367
  • 368
  • 369
  • 370
  • 371
  • 372
  • 373
  • 374
  • 375
  • 376
  • 377
  • 378
  • 379
  • 380
  • 381
  • 382
  • 383
  • 384
  • 385
  • 386
  • 387
  • 388
  • 389
  • 390
  • 391
  • 392
  • 393
  • 394
  • 395
  • 396
  • 397
  • 398
  • 399
  • 400
  • 401
  • 402
  • 403
  • 404
  • 405
  • 406
  • 407
  • 408
  • 409
  • 410
  • 411
  • 412
  • 413
  • 414
  • 415
  • 416
  • 417
  • 418
  • 419
  • 420
  • 421
  • 422
  • 423
  • 424
  • 425
  • 426
  • 427
  • 428
  • 429
  • 430
  • 431
  • 432
  • 433
  • 434
  • 435
  • 436
  • 437
  • 438
  • 439
  • 440
  • 441
  • 442
  • 443
  • 444
  • 445
  • 446
  • 447
  • 448
  • 449
  • 450
  • 451
  • 452
  • 453
  • 454
  • 455
  • 456
  • 457
  • 458
  • 459
  • 460
  • 461
  • 462
  • 463
  • 464
  • 465
  • 466
  • 467
  • 468
  • 469
  • 470
  • 471
  • 472
  • 473
  • 474
  • 475
  • 476
  • 477
  • 478
  • 479
  • 480
  • 481
  • 482
  • 483
  • 484
  • 485
  • 486
  • 487
  • 488
  • 489
  • 490
  • 491
  • 492
  • 493
  • 494
  • 495
  • 496
  • 497
  • 498
  • 499
  • 500
  • 501
  • 502
  • 503
  • 504
  • 505
  • 506
  • 507
  • 508
  • 509
  • 510
  • 511
  • 512
  • 513
  • 514
  • 515
  • 516
  • 517
  • 518
  • 519
  • 520
  • 521
  • 522
  • 523
  • 524
  • 525
  • 526
  • 527
  • 528
  • 529
  • 530
  • 531
  • 532
  • 533
  • 534
  • 535
  • 536
  • 537
  • 538
  • 539
  • 540
  • 541
  • 542
  • 543
  • 544
  • 545
  • 546
  • 547
  • 548
  • 549
  • 550
  • 551
  • 552
  • 553
  • 554
  • 555
  • 556
  • 557
  • 558
  • 559
  • 560
  • 561
  • 562
  • 563
  • 564
  • 565
  • 566
  • 567
  • 568
  • 569
  • 570
  • 571
  • 572
  • 573
  • 574
  • 575
  • 576
  • 577
  • 578
  • 579
  • 580
  • 581
  • 582
  • 583
  • 584
  • 585
  • 586
  • 587
  • 588
  • 589
  • 590
  • 591
  • 592
  • 593
  • 594
  • 595
  • 596
  • 597
  • 598
  • 599
  • 600
  • 601
  • 602
  • 603
  • 604
  • 605
  • 606
  • 607
  • 608
  • 609
  • 610
  • 611
  • 612
  • 613
  • 614
  • 615
  • 616
  • 617
  • 618
  • 619
  • 620
  • 621
  • 622
  • 623
  • 624
  • 625
  • 626
  • 627
  • 628
  • 629
  • 630
  • 631
  • 632
  • 633
  • 634
  • 635
  • 636
  • 637
  • 638
  • 639
  • 640
  • 641
  • 642
  • 643
  • 644
  • 645
  • 646
  • 647
  • 648
  • 649
  • 650
  • 651
  • 652
  • 653
  • 654
  • 655
  • 656
  • 657
  • 658
  • 659
  • 660
  • 661
  • 662
  • 663
  • 664
  • 665
  • 666
  • 667
  • 668
  • 669
  • 670
  • 671
  • 672
  • 673
  • 674
  • 675
  • 676
  • 677
  • 678
  • 679
  • 680
  • 681
  • 682
  • 683
  • 684
  • 685
  • 686
  • 687
  • 688
  • 689
  • 690
  • 691
  • 692
  • 693
  • 694
  • 695
  • 696
  • 697
  • 698
  • 699
  • 700
  • 701
  • 702
  • 703
  • 704
  • 705
  • 706
  • 707
  • 708
  • 709
  • 710
  • 711
  • 712
  • 713
  • 714
  • 715
  • 716
  • 717
  • 718
  • 719
  • 720
  • 721
  • 722
  • 723
  • 724
  • 725
  • 726
  • 727
  • 728
  • 729
  • 730
  • 731
  • 732
  • 733
  • 734
  • 735
  • 736
  • 737
  • 738
  • 739
  • 740
  • 741
  • 742
  • 743
  • 744
  • 745
  • 746
  • 747
  • 748
  • 749
  • 750
  • 751
  • 752
  • 753
  • 754
  • 755
  • 756
  • 757
  • 758
  • 759
  • 760
  • 761
  • 762
  • 763
  • 764
  • 765
  • 766
  • 767
  • 768
  • 769
  • 770
  • 771
  • 772
  • 773
  • 774
  • 775
  • 776
  • 777
  • 778
  • 779
  • 780
  • 781
  • 782
  • 783
  • 784
  • 785
  • 786
  • 787
  • 788
  • 789
  • 790
  • 791
  • 792
  • 793
  • 794
  • 795
  • 796
  • 797
  • 798
  • 799
  • 800
  • 801
  • 802
  • 803
  • 804
  • 805
  • 806
  • 807
  • 808
  • 809
  • 810
  • 811
  • 812
  • 813
  • 814
  • 815
  • 816
  • 817
  • 818
  • 819
  • 820
  • 821
  • 822
  • 823
  • 824
  • 825
  • 826
  • 827
  • 828
  • 829
  • 830
  • 831
  • 832
  • 833
  • 834
  • 835
  • 836
  • 837
  • 838
  • 839
  • 840
  • 841
  • 842
  • 843
  • 844
  • 845
  • 846
  • 847
  • 848
  • 849
  • 850
  • 851
  • 852
  • 853
  • 854
  • 855
  • 856
  • 857
  • 858
  • 859
  • 860
  • 861
  • 862
  • 863
  • 864
  • 865
  • 866
  • 867
  • 868
  • 869
  • 870
  • 871
  • 872
  • 873
  • 874
  • 875
  • 876
  • 877
  • 878
  • 879
  • 880
  • 881
  • 882
  • 883
  • 884
  • 885
  • 886
  • 887
  • 888
  • 889
  • 890
  • 891
  • 892
  • 893
  • 894
  • 895
  • 896
  • 897
  • 898
  • 899
  • 900
  • 901
  • 902
  • 903
  • 904
  • 905
  • 906
  • 907
  • 908
  • 909
  • 910
  • 911
  • 912
  • 913
  • 914
  • 915
  • 916
  • 917
  • 918
  • 919
  • 920
  • 921
  • 922
  • 923
  • 924
  • 925
  • 926
  • 927
  • 928
  • 929
  • 930
  • 931
  • 932
  • 933
  • 934
  • 935
  • 936
  • 937
  • 938
  • 939
  • 940
  • 941
  • 942
  • 943
  • 944
  • 945
  • 946
  • 947
  • 948
  • 949
  • 950
  • 951
  • 952
  • 953
  • 954
  • 955
  • 956
  • 957
  • 958
  • 959
  • 960
  • 961
  • 962
  • 963
  • 964
  • 965
  • 966
  • 967
  • 968
  • 969
  • 970
  • 971
  • 972
  • 973
  • 974
  • 975
  • 976
  • 977
  • 978
  • 979
  • 980
  • 981
  • 982
  • 983
  • 984
  • 985
  • 986
  • 987
  • 988
  • 989
  • 990
  • 991
  • 992
  • 993
  • 994
  • 995
  • 996
  • 997
  • 998
  • 999
  • 1000
  • 1001
  • 1002
  • 1003
  • 1004
  • 1005
  • 1006
  • 1007
  • 1008
  • 1009
  • 1010
  • 1011
  • 1012
  • 1013
  • 1014
  • 1015
  • 1016
  • 1017
  • 1018
  • 1019
  • 1020
  • 1021
  • 1022
  • 1023
  • 1024
  • 1025
  • 1026
  • 1027
  • 1028
  • 1029
  • 1030
  • 1031
  • 1032
  • 1033
  • 1034
  • 1035
  • 1036
  • 1037
  • 1038
  • 1039
  • 1040
  • 1041
  • 1042
  • 1043
  • 1044
  • 1045
  • 1046
  • 1047
  • 1048
  • 1049
  • 1050
  • 1051
  • 1052
  • 1053
  • 1054
  • 1055
  • 1056
  • 1057
  • 1058
  • 1059
  • 1060
  • 1061
  • 1062
  • 1063
  • 1064
  • 1065
  • 1066
  • 1067
  • 1068
  • 1069
  • 1070
  • 1071
  • 1072
  • 1073
  • 1074
  • 1075
  • 1076
  • 1077
  • 1078
  • 1079
  • 1080
  • 1081
  • 1082
  • 1083
  • 1084
  • 1085
  • 1086
  • 1087
  • 1088
  • 1089
  • 1090
  • 1091
  • 1092
  • 1093
  • 1094
  • 1095
  • 1096
  • 1097
  • 1098
  • 1099
  • 1100
  • 1101
  • 1102
  • 1103
  • 1104
  • 1105
  • 1106
  • 1107
  • 1108
  • 1109
  • 1110
  • 1111
  • 1112
  • 1113
  • 1114
  • 1115
  • 1116
  • 1117
  • 1118
  • 1119
  • 1120
  • 1121
  • 1122
  • 1123
  • 1124
  • 1125
  • 1126
  • 1127
  • 1128
  • 1129
  • 1130
  • 1131
  • 1132
  • 1133
  • 1134
  • 1135
  • 1136
  • 1137
  • 1138
  • 1139
  • 1140
  • 1141
  • 1142
  • 1143
  • 1144
  • 1145
  • 1146
  • 1147
  • 1148
  • 1149
  • 1150
  • 1151
  • 1152
  • 1153
  • 1154
  • 1155
  • 1156
  • 1157
  • 1158
  • 1159
  • 1160
  • 1161
  • 1162
  • 1163
  • 1164
  • 1165
  • 1166
  • 1167
  • 1168
  • 1169
  • 1170
  • 1171
  • 1172
  • 1173
  • 1174
  • 1175
  • 1176
  • 1177
  • 1178
  • 1179
  • 1180
  • 1181
  • 1182
  • 1183
  • 1184
  • 1185
  • 1186
  • 1187
  • 1188
  • 1189
  • 1190
  • 1191
  • 1192
  • 1193
  • 1194
  • 1195
  • 1196
  • 1197
  • 1198
  • 1199
  • 1200
  • 1201
  • 1202
  • 1203
  • 1204
  • 1205
  • 1206
  • 1207
  • 1208
  • 1209
  • 1210
  • 1211
  • 1212
  • 1213
  • 1214
  • 1215
  • 1216
  • 1217
  • 1218
  • 1219
  • 1220
  • 1221
  • 1222
  • 1223
  • 1224
  • 1225
  • 1226
  • 1227
  • 1228
  • 1229
  • 1230
  • 1231
  • 1232
  • 1233
  • 1234
  • 1235
  • 1236
  • 1237
  • 1238
  • 1239
  • 1240
  • 1241
  • 1242
  • 1243
  • 1244
  • 1245
  • 1246
  • 1247
  • 1248
  • 1249
  • 1250
  • 1251
  • 1252
  • 1253
  • 1254
  • 1255
  • 1256
  • 1257
  • 1258
  • 1259
  • 1260
  • 1261
  • 1262
  • 1263
  • 1264
  • 1265
  • 1266
  • 1267
  • 1268
  • 1269
  • 1270
  • 1271
  • 1272
  • 1273
  • 1274
  • 1275
  • 1276
  • 1277
  • 1278
  • 1279
  • 1280
  • 1281
  • 1282
  • 1283
  • 1284
  • 1285
  • 1286
  • 1287
  • 1288
  • 1289
  • 1290
  • 1291
  • 1292
  • 1293
  • 1294
  • 1295
  • 1296
  • 1297
  • 1298
  • 1299
  • 1300
  • 1301
  • 1302
  • 1303
  • 1304
  • 1305
  • 1306
  • 1307
  • 1308
  • 1309
  • 1310
  • 1311
  • 1312
  • 1313
  • 1314
  • 1315
  • 1316
  • 1317
  • 1318
  • 1319
  • 1320
  • 1321
  • 1322
  • 1323
  • 1324
  • 1325
  • 1326
  • 1327
  • 1328
  • 1329
  • 1330
  • 1331
  • 1332
  • 1333
  • 1334
  • 1335
  • 1336
  • 1337
  • 1338
  • 1339
  • 1340
  • 1341
  • 1342
  • 1343
  • 1344
  • 1345
  • 1346
  • 1347
  • 1348
  • 1349
  • 1350
  • 1351
  • 1352
  • 1353
  • 1354
  • 1355
  • 1356
  • 1357
  • 1358
  • 1359
  • 1360
  • 1361
  • 1362
  • 1363
  • 1364
  • 1365
  • 1366
  • 1367
  • 1368
  • 1369
  • 1370
  • 1371
  • 1372
  • 1373
  • 1374
  • 1375
  • 1376
  • 1377
  • 1378
  • 1379
  • 1380
  • 1381
  • 1382
  • 1383
  • 1384
  • 1385
  • 1386
  • 1387
  • 1388
  • 1389
  • 1390
  • 1391
  • 1392
  • 1393
  • 1394
  • 1395
  • 1396
  • 1397
  • 1398
  • 1399
  • 1400
  • 1401
  • 1402
  • 1403
  • 1404
  • 1405
  • 1406
  • 1407
  • 1408
  • 1409
  • 1410
  • 1411
  • 1412
  • 1413
  • 1414
  • 1415
  • 1416
  • 1417
  • 1418
  • 1419
  • 1420
  • 1421
  • 1422
  • 1423
  • 1424
  • 1425
  • 1426
  • 1427
  • 1428
  • 1429
  • 1430
  • 1431
  • 1432
  • 1433
  • 1434
  • 1435
  • 1436
  • 1437
  • 1438
  • 1439
  • 1440
  • 1441
  • 1442
  • 1443
  • 1444
  • 1445
  • 1446
  • 1447
  • 1448
  • 1449
  • 1450
  • 1451
  • 1452
  • 1453
  • 1454
  • 1455
  • 1456
  • 1457
  • 1458
  • 1459
  • 1460
  • 1461
  • 1462
  • 1463
  • 1464
  • 1465
  • 1466
  • 1467
  • 1468
  • 1469
  • 1470
  • 1471
  • 1472
  • 1473
  • 1474
  • 1475
  • 1476
  • 1477
  • 1478
  • 1479
  • 1480
  • 1481
  • 1482
  • 1483
  • 1484
  • 1485
  • 1486
  • 1487
  • 1488
  • 1489
  • 1490
  • 1491
  • 1492
  • 1493
  • 1494
  • 1495
  • 1496
  • 1497
  • 1498
  • 1499
  • 1500
  • 1501
  • 1502
  • 1503
  • 1504
  • 1505
  • 1506
  • 1507
  • 1508
  • 1509
  • 1510
  • 1511
  • 1512
  • 1513
  • 1514
  • 1515
  • 1516
  • 1517
  • 1518
  • 1519
  • 1520
  • 1521
  • 1522
  • 1523
  • 1524
  • 1525
  • 1526
  • 1527
  • 1528
  • 1529
  • 1530
  • 1531
  • 1532
  • 1533
  • 1534
  • 1535
  • 1536
  • 1537
  • 1538
  • 1539
  • 1540
  • 1541
  • 1542
  • 1543
  • 1544
  • 1545
  • 1546
  • 1547
  • 1548
  • 1549
  • 1550
  • 1551
  • 1552
  • 1553
  • 1554
  • 1555
  • 1556
  • 1557
  • 1558
  • 1559
  • 1560
  • 1561
  • 1562
  • 1563
  • 1564
  • 1565
  • 1566
  • 1567
  • 1568
  • 1569
  • 1570
  • 1571
  • 1572
  • 1573
  • 1574
  • 1575
  • 1576
  • 1577
  • 1578
  • 1579
  • 1580
  • 1581
  • 1582
  • 1583
  • 1584
  • 1585
  • 1586
  • 1587
  • 1588
  • 1589
  • 1590
  • 1591
  • 1592
  • 1593
  • 1594
  • 1595
  • 1596
  • 1597
  • 1598
  • 1599
  • 1600
  • 1601
  • 1602
  • 1603
  • 1604
  • 1605
  • 1606
  • 1607
  • 1608
  • 1609
  • 1610
  • 1611
  • 1612
  • 1613
  • 1614
  • 1615
  • 1616
  • 1617
  • 1618
  • 1619
  • 1620
  • 1621
  • 1622
  • 1623
  • 1624
  • 1625
  • 1626
  • 1627
  • 1628
  • 1629
  • 1630
  • 1631
  • 1632
  • 1633
  • 1634
  • 1635
  • 1636
  • 1637
  • 1638
  • 1639
  • 1640
  • 1641
  • 1642
  • 1643
  • 1644
  • 1645
  • 1646
  • 1647
  • 1648
  • 1649
  • 1650
  • 1651
  • 1652
  • 1653
  • 1654
  • 1655
  • 1656
  • 1657
  • 1658
  • 1659
  • 1660
  • 1661
  • 1662
  • 1663
  • 1664
  • 1665
  • 1666
  • 1667
  • 1668
  • 1669
  • 1670
  • 1671
  • 1672
  • 1673
  • 1674
  • 1675
  • 1676
  • 1677
  • 1678
  • 1679
  • 1680
  • 1681
  • 1682
  • 1683
  • 1684
  • 1685
  • 1686
  • 1687
  • 1688
  • 1689
  • 1690
  • 1691
  • 1692
  • 1693
  • 1694
  • 1695
  • 1696
  • 1697
  • 1698
  • 1699
  • 1700
  • 1701
  • 1702
  • 1703
  • 1704
  • 1705
  • 1706
  • 1707
  • 1708
  • 1709
  • 1710
  • 1711
  • 1712
  • 1713
  • 1714
  • 1715
  • 1716
  • 1717
  • 1718
  • 1719
  • 1720
  • 1721
  • 1722
  • 1723
  • 1724
  • 1725
  • 1726
  • 1727
  • 1728
  • 1729
  • 1730
  • 1731
  • 1732
  • 1733
  • 1734
  • 1735
  • 1736
  • 1737
  • 1738
  • 1739
  • 1740
  • 1741
  • 1742
  • 1743
  • 1744
  • 1745
  • 1746
  • 1747
  • 1748
  • 1749
  • 1750
  • 1751
  • 1752
  • 1753
  • 1754
  • 1755
  • 1756
  • 1757
  • 1758
  • 1759
  • 1760
  • 1761
  • 1762
  • 1763
  • 1764
  • 1765
  • 1766
  • 1767
  • 1768
  • 1769
  • 1770
  • 1771
  • 1772
  • 1773
  • 1774
  • 1775
  • 1776
  • 1777
  • 1778
  • 1779
  • 1780
  • 1781
  • 1782
  • 1783
  • 1784
  • 1785
  • 1786
  • 1787
  • 1788
  • 1789
  • 1790
  • 1791
  • 1792
  • 1793
  • 1794
  • 1795
  • 1796
  • 1797
  • 1798
  • 1799
  • 1800
  • 1801
  • 1802
  • 1803
  • 1804
  • 1805
  • 1806
  • 1807
  • 1808
  • 1809
  • 1810
  • 1811
  • 1812
  • 1813
  • 1814
  • 1815
  • 1816
  • 1817
  • 1818
  • 1819
  • 1820
  • 1821
  • 1822
  • 1823
  • 1824
  • 1825
  • 1826
  • 1827
  • 1828
  • 1829
  • 1830
  • 1831
  • 1832
  • 1833
  • 1834
  • 1835
  • 1836
  • 1837
  • 1838
  • 1839
  • 1840
  • 1841
  • 1842
  • 1843
  • 1844
  • 1845
  • 1846
  • 1847
  • 1848
  • 1849
  • 1850
  • 1851
  • 1852
  • 1853
  • 1854
  • 1855
  • 1856
  • 1857
  • 1858
  • 1859
  • 1860
  • 1861
  • 1862
  • 1863
  • 1864
  • 1865
  • 1866
  • 1867
  • 1868
  • 1869
  • 1870
  • 1871
  • 1872
  • 1873
  • 1874
  • 1875
  • 1876
  • 1877
  • 1878
  • 1879
  • 1880
  • 1881
  • 1882
  • 1883
  • 1884
  • 1885
  • 1886
  • 1887
  • 1888
  • 1889
  • 1890
  • 1891
  • 1892
  • 1893
  • 1894
  • 1895
  • 1896
  • 1897
  • 1898
  • 1899
  • 1900
  • 1901
  • 1902
  • 1903
  • 1904
  • 1905
  • 1906
  • 1907
  • 1908
  • 1909
  • 1910
  • 1911
  • 1912
  • 1913
  • 1914
  • 1915
  • 1916
  • 1917
  • 1918
  • 1919
  • 1920
  • 1921
  • 1922
  • 1923
  • 1924
  • 1925
  • 1926
  • 1927
  • 1928
  • 1929
  • 1930
  • 1931
  • 1932
  • 1933
  • 1934
  • 1935
  • 1936
  • 1937
  • 1938
  • 1939
  • 1940
  • 1941
  • 1942
  • 1943
  • 1944
  • 1945
  • 1946
  • 1947
  • 1948
  • 1949
  • 1950
  • 1951
  • 1952
  • 1953
  • 1954
  • 1955
  • 1956
  • 1957
  • 1958
  • 1959
  • 1960
  • 1961
  • 1962
  • 1963
  • 1964
  • 1965
  • 1966
  • 1967
  • 1968
  • 1969
  • 1970
  • 1971
  • 1972
  • 1973
  • 1974
  • 1975
  • 1976
  • 1977

六、最后,以上插入的图片以及音乐,大家随意发挥,我就不给了,还有一个美中不足就是,人机悔棋的一个小缺陷就是没能返回上一个对局的价值表,有兴趣的可以改进一下。尝试着做一个小游戏会在某种程度上对自己的能力起到一定程度的帮助,本期分享就到这里啦~

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/135233
推荐阅读
相关标签
  

闽ICP备14008679号