一字棋游戏(C++实现)

这是一个使用C++编写的一字棋游戏程序,包含了棋盘状态节点类和游戏逻辑。游戏支持人机对战,通过递归深度优先搜索实现计算机智能,并具有评分函数评估棋局优势。玩家可以输入坐标进行落子,计算机自动进行下一步决策。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值