#include<iostream>
#include<memory.h>
#include<string>
#include<stdlib.h>
#include<stdio.h>
using namespace std;
const int N = 20; //定义棋盘规模
int pace = 0;//统计步数
const char chess[2] = {'X', 'O'}; //定义数组显示棋子颜色 黑 白
bool SystemError = 0;
int lastI = 0, lastJ = 0;
int maxI = 9, maxJ = 9;
void InitChess(char *board)//初始化棋盘√
{
for(int i = 0; i < N; i++)
for(int j = 0; j < N; j++)
board[i * N + j] = '.';
return;
}
void PrintChess(char *board)//打印棋盘√
{
for(int i = 0; i < N; i++)
printf("%2d", i + 1);
cout << endl;
for(int i = 0; i < N; i++)
{
printf("%2d", i + 1);
for(int j = 0; j < N; j++)
{
cout << board[i * N + j];
cout << " ";
}
cout << endl;
}
return;
}
void Player(char * board, int color)//玩家落子√
{
int i, j;
while(1)
{
cout << "请玩家输入坐标(x y)" << endl;
cin >> j >> i;
i--;
j--;
if(i < 0 || i > 20 || j < 0 || j > 20)
cout << "请输入1--20有效数" << endl;
else if(board[i * N + j] != '.')
cout << "已有棋子,请重下" << endl;
else
break;
}
board[i * N + j] = chess[color];//在棋盘上标记
//记录当前棋子坐标
lastI = i;
lastJ = j;
pace++;//步数+1
return;
}
void ComputeValue(int color, char *board)//计算落子位置值评估函数√
{
int maxmax = 0, mark[400] = {0};//初始分数为0
char I;
char U;
if(color == 0)
{
I = 'X';
U = 'O';
}
else
{
I = 'O';
U = 'X';
}
for(int i = 1; i < N; i++)
{
for(int j = 1; j < N; j++)//全局扫描寻找最佳的落子位置
{
if(board[i * N + j] == '.')
{
if((board[(i - 1) * N + j] == I )|| (board[(i + 1) * N + j] == I )||
(board[i * N + (j + 1)] == I) || (board[i * N + (j - 1)] == I) )
{
mark[i * N + j] += 9;
}//四周有己方1棋o
if((board[(i - 1) * N + j] == U) || (board[(i + 1) * N + j] == U) ||
(board[i * N + (j + 1)] == U) || (board[i * N + (j - 1)] == U))
{
mark[i * N + j] += 10;
}//四周有对方1棋x
if((board[(i - 1) * N + j] == I && board[(i - 2) * N + j] == I)
|| (board[i * N + (j - 1)] == I && board[i * N + (j - 2)] == I)
|| (board[i*N+(j+1)]==I && board[i*N+(j+2)]==I)
|| (board[(i + 1) * N+j]==I && board[(i+2)*N+j]==I)
|| (board[(i - 1)*N+(j+1)]==I && board[(i-2)*N+(j+2)]==I)
|| (board[(i+1)*N+(j+1)]==I && board[(i+2)*N+(j+2)]==I)
|| (board[(i-
[人工智能]五子棋
最新推荐文章于 2025-02-05 01:30:00 发布