欢迎来到天天文库
浏览记录
ID:47503800
大小:50.50 KB
页数:7页
时间:2020-01-12
《C语言实现一字棋游戏》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、.实验5编程实现一字棋游戏1实验目的:(1)理解和掌握博弈树的启发式搜索过程;(2)熟悉博弈中两种最基本的搜索方法——极大极小过程和过程;(3)能够用VC编程语言设计简单的博弈游戏。2实验要求:用VC编程实现一字棋,根据实验结果写出总结。3实验结果分析:参考示例代码:#include"StdAfx.h"#include#include#include#include#includeusingnamespacestd;#defineMAX_NUM1000//计算
2、机获胜的标志#defineNO_BLANK-1001//人获胜的标志#defineTREE_DEPTH3//递归深度#defineNIL1001//根节点的函数走步评估值classState//棋盘状态节点,一个State实例就是一个棋盘的状态节点,从而形成一颗树状结构{public:intQP[3][3];//当前棋盘数组inte_fun;//评分结果intchild[9];//当前棋盘状态下的后一步的所有状态节点intparent;//当前棋盘状态下的父母节点下标word教育资料.intbestChild;//在child[9]里e_fun最优
3、的节点下标};classTic{public:inttmpQP[3][3];//用于3层递归的临时棋盘staticints_count;//叶子节点的静态总数StateStates[MAX_NUM];//棋盘状态节点数组Tic(){}voidinit()//初始化棋盘,将各个位置的棋盘都置为0{s_count=0;for(inti=0;i<3;i++)for(intj=0;j<3;j++){States[0].QP[i][j]=0;}States[0].parent=NIL;}voidPrintQP()//棋盘界面显示{for(inti=0;i<3
4、;i++){for(intj=0;j<3;j++){cout<5、s.QP[0][i]==1&&s.QP[1][i]==1&&s.QP[2][i]==1)return1;if(s.QP[0][i]==-1&&s.QP[1][i]==-1&&s.QP[2][i]==-1)return-1;}if((s.QP[0][0]==1&&s.QP[1][1]==1&&s.QP[2][2]==1)6、7、(s.QP[2][0]==1&&s.QP[1][1]==1&&s.QP[0][2]==1))return1;if((s.QP[0][0]==-1&&s.QP[1][1]==-1&&s.QP[2][2]==-1)8、9、(s.QP[2]10、[0]==-1&&s.QP[1][1]==-1&&s.QP[0][2]==-1))return-1;return0;}inte_fun(States)//机器智能判定评价函数{boolflag=true;inti=0;for(i=0;i<3;i++)for(intj=0;j<3;j++)if(s.QP[i][j]==0)flag=false;if(flag)returnNO_BLANK;if(IsWin(s)==-1)return-MAX_NUM;if(IsWin(s)==1)returnMAX_NUM;intcount=0;for(i=0;i<311、;i++)for(intj=0;j<3;j++)if(s.QP[i][j]==0)tmpQP[i][j]=1;elsetmpQP[i][j]=s.QP[i][j];for(i=0;i<3;i++)count+=(tmpQP[i][0]+tmpQP[i][1]+tmpQP[i][2])/3;for(i=0;i<3;i++)count+=(tmpQP[0][i]+tmpQP[1][i]+tmpQP[2][i])/3;count+=(tmpQP[0][0]+tmpQP[1][1]+tmpQP[2][2])/3;count+=(tmpQP[2][0]+tm12、pQP[1][1]+tmpQP[0][2])/3;for(i=0;i<3;i++)for(intj=0;j<3;j++)i
5、s.QP[0][i]==1&&s.QP[1][i]==1&&s.QP[2][i]==1)return1;if(s.QP[0][i]==-1&&s.QP[1][i]==-1&&s.QP[2][i]==-1)return-1;}if((s.QP[0][0]==1&&s.QP[1][1]==1&&s.QP[2][2]==1)
6、
7、(s.QP[2][0]==1&&s.QP[1][1]==1&&s.QP[0][2]==1))return1;if((s.QP[0][0]==-1&&s.QP[1][1]==-1&&s.QP[2][2]==-1)
8、
9、(s.QP[2]
10、[0]==-1&&s.QP[1][1]==-1&&s.QP[0][2]==-1))return-1;return0;}inte_fun(States)//机器智能判定评价函数{boolflag=true;inti=0;for(i=0;i<3;i++)for(intj=0;j<3;j++)if(s.QP[i][j]==0)flag=false;if(flag)returnNO_BLANK;if(IsWin(s)==-1)return-MAX_NUM;if(IsWin(s)==1)returnMAX_NUM;intcount=0;for(i=0;i<3
11、;i++)for(intj=0;j<3;j++)if(s.QP[i][j]==0)tmpQP[i][j]=1;elsetmpQP[i][j]=s.QP[i][j];for(i=0;i<3;i++)count+=(tmpQP[i][0]+tmpQP[i][1]+tmpQP[i][2])/3;for(i=0;i<3;i++)count+=(tmpQP[0][i]+tmpQP[1][i]+tmpQP[2][i])/3;count+=(tmpQP[0][0]+tmpQP[1][1]+tmpQP[2][2])/3;count+=(tmpQP[2][0]+tm
12、pQP[1][1]+tmpQP[0][2])/3;for(i=0;i<3;i++)for(intj=0;j<3;j++)i
此文档下载收益归作者所有