#include <iostream>
#include <windows.h>
#include <conio.h>
#include <string>
#include <ctime>
using namespace std;
#define MAX_NUM 1000 //计算机获胜的标志
#define NO_BLANK -1001 //人获胜的标志
#define TREE_DEPTH 3 //递归深度
#define NIL 1001 //根节点的函数走步评估值
void show_meun();
class State //棋盘状态节点,一个State实例就是一个棋盘的状态节点,从而形成一颗树状结构
{
public:
int QP[3][3]; //当前棋盘数组
int e_fun; //评分结果
int child[9]; //当前棋盘状态下的后一步的所有状态节点
int parent; //当前棋盘状态下的父母节点下标
int bestChild;//在child[9]里e_fun最优的节点下标
};
class Tic
{
public:
int tmpQP[3][3]; //用于3层递归的临时棋盘
static int s_count;//叶子节点的静态总数
State States[MAX_NUM];//棋盘状态节点数组
Tic()
{
}
void init() //初始化棋盘,将各个位置的棋盘都置为0
{
s_count=0;
for(int i=0;i<3;i++)
for(int j=0;j<3;j++)
{
States[0].QP[i][j] = 0;
}
States[0].parent = NIL;
}
void PrintQP()//棋盘界面显示
{
system("cls");
cout<<endl<<endl<<endl;
cout<<" *****************一字棋小游戏*****************"<<endl<<endl;
for(int i=0;i<3;i++)
{
cout<<" ";
for(int j=0;j<3;j++)
{
if(States[0].QP[i][j]==1)
cout<<"★"<<'\t';
else if(States[0].QP[i][j]==-1)
cout<<"☆"<<'\t';
else
cout<<"〇"<<'\t';
}
if(i==1)
cout<<" 您:☆ ";
if(i==2)
cout<<" 电脑:★";
cout<<endl;
cout<<endl;
}
}
int IsWin(State s) //判断当前的棋盘状态是否有令任何一方获胜
{
int i;
for(i=0;i<3;i++)
{
if(s.QP[i][0]==1&&s.QP[i][1]==1&&s.QP[i][2]==1) return 1;
if(s.QP[i][0]==-1&&am
一字棋游戏(C++实现)
最新推荐文章于 2023-04-14 11:08:06 发布