智能五子棋3

news/2024/5/18 13:08:07 标签: c语言, 游戏程序

五、项目代码

#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();                //再次调用棋盘
		}


	}
}

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


http://www.niftyadmin.cn/n/5270846.html

相关文章

通话状态监听-Android13

通话状态监听-Android13 1、Android Telephony 模块结构2、监听和广播获取通话状态2.1 注册2.2 通话状态通知2.3 通话状态 3、通知状态流程* 关键日志 frameworks/base/core/java/android/telephony/PhoneStateListener.java 1、Android Telephony 模块结构 Android Telephony…

数据修复:.BlackBit勒索病毒来袭,安全应对方法解析

导言&#xff1a; 黑色数字罪犯的新玩具——.BlackBit勒索病毒&#xff0c;近来成为网络安全领域的头号威胁。这种恶意软件以其高度隐秘性和毁灭性而引起广泛关注。下面是关于.BlackBit勒索病毒的详细介绍&#xff0c;如不幸感染这个勒索病毒&#xff0c;您可添加我们的技术服…

实验八 A/D模数转换(汇编与微机原理)

实验目的&#xff1a; 掌握ADC0809模数转换的工作原理。 掌握用ADC0809来进行电压转换的使用方法。 实验内容&#xff1a; 用模数转换器件ADC0809测量外部输入的模拟电压&#xff0c;将转换结果输出到数码管的最右边两位上显示。 实验原理&#xff1a; 0809A/D转换芯片有8…

python3.8-3.10各新版本新特性

目录 3.83.8.1 海象运算符(赋值运算符)3.8.2 f-string3.8.3 仅限位置形参 [/],[*]3.8.4 多进程共享内存3.8.5 \__pycache__3.8.6 asyncio3.8.7 dict 3.93.9.1 字典合并运算符3.9.2 字符串对齐方法3.9.3 可选的类型提示3.9.4 更好的浮点数支持3.9.5 更好的异常处理3.9.6 更好的装…

函数柯里化 剖析

定义一个函数&#xff0c;以闭包的方式内部函数调用外部函数,并返回内部函数 function calc(n){ //args是获取的第一次参数的值let argsArray.prototype.slice.call(arguments)// 上面的args写法等同于下方的for循环// for (var i 0; i < arguments.length; i) {// A…

Flink系列之:窗口函数Windowing table-valued functions (Windowing TVFs)

Flink系列之&#xff1a;窗口函数Windowing table-valued functions Windowing TVFs 一、窗口函数二、Tumble Windows三、Hop Windows四、Cumulate Windows四、Window Offset 适用流、批 Windows 是处理无限流的核心。 Windows 将流分割成有限大小的“桶”&#xff0c;我们可以…

netty-daxin-4(httpwebsocket)

文章目录 学习链接http服务端NettyHttpServerHelloWorldServerHandler 客户端ApiPost websocket初步了解为什么需要 WebSocket简介 浏览器的WebSocket客户端客户端的简单示例客户端的 APIWebSocket 构造函数webSocket.readyStatewebSocket.onopenwebSocket.onclosewebSocket.ο…

聊聊AsyncHttpClient的ListenableFuture

序 本文主要研究一下AsyncHttpClient的ListenableFuture ListenableFuture org/asynchttpclient/ListenableFuture.java public interface ListenableFuture<V> extends Future<V> {/*** Terminate and if there is no exception, mark this Future as done an…