博弈树实现3字棋程序的设计报告Word文件下载.docx

上传人:b****5 文档编号:17910881 上传时间:2022-12-12 格式:DOCX 页数:13 大小:229.19KB
下载 相关 举报
博弈树实现3字棋程序的设计报告Word文件下载.docx_第1页
第1页 / 共13页
博弈树实现3字棋程序的设计报告Word文件下载.docx_第2页
第2页 / 共13页
博弈树实现3字棋程序的设计报告Word文件下载.docx_第3页
第3页 / 共13页
博弈树实现3字棋程序的设计报告Word文件下载.docx_第4页
第4页 / 共13页
博弈树实现3字棋程序的设计报告Word文件下载.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

博弈树实现3字棋程序的设计报告Word文件下载.docx

《博弈树实现3字棋程序的设计报告Word文件下载.docx》由会员分享,可在线阅读,更多相关《博弈树实现3字棋程序的设计报告Word文件下载.docx(13页珍藏版)》请在冰豆网上搜索。

博弈树实现3字棋程序的设计报告Word文件下载.docx

3.函数设计

利用所学的算法,编写棋盘分析函数

第二部分数据结构设计

一:

主系统的函数

窗口创建函数,消息响应函数皆放在主函数cpp里面

二:

头文件

存放具体的操作步骤及其函数

第三部分功能实现与程序调试

开始

主界面

判断输赢

棋盘

开始下棋

分出胜负

平局

结束,是否重新开始游戏

结束

程序实现的功能流程图

二:

程序实现源代码

1.头文件

定义类:

#include<

iostream>

string>

usingnamespacestd;

classCGobang//棋子类

{

private:

charchSort;

//棋子的类别

intnWin;

//赢棋的次数

intnLose;

//输棋的次数

staticintnDraw;

//平局次数

staticcharachBoard[3][3];

//棋盘

staticintnSize;

//棋盘的尺寸nSizeXnSize

public:

CGobang(charchsort)//构造函数,决定一方棋子的类别

chSort=chsort;

nWin=nLose=nDraw=0;

}

voidPlayTurn(void);

//走1步棋

intJudge();

//判断是否连成一线,是则返回1,否则返回0

voidWin(void);

//赢棋

voidLose(void);

//输棋

staticvoidDraw(void);

//平局

voidPrintInfo(void);

//输出总体情况

staticvoidPrintBoard(void);

//输出棋盘

staticintGetFull(void);

//判断棋盘是否已布满棋子

staticvoidInitialBoard(void);

//初始化棋盘

};

B:

操作函数:

#include"

lei.h"

#include<

math.h>

charCGobang:

:

achBoard[3][3];

intCGobang:

nSize=3;

nDraw=0;

voidCGobang:

Draw()

{cout<

<

"

\n\n\t\t平局!

\n\n"

;

nDraw++;

InitialBoard()//初始化棋盘

for(inti=0;

i<

nSize;

i++)

for(intj=0;

j<

j++)

achBoard[i][j]='

'

PrintBoard()//输出棋盘

system("

CLS"

);

cout<

endl;

123"

<

1"

achBoard[0][0]<

|"

achBoard[0][1]<

achBoard[0][2]<

---|---|---"

2"

achBoard[1][0]<

achBoard[1][1]<

achBoard[1][2]<

3"

achBoard[2][0]<

achBoard[2][1]<

achBoard[2][2]<

GetFull()//判断棋盘是否布满棋子,若是返回1

if(achBoard[i][j]=='

return0;

return1;

Win()//赢棋

CGobang:

PrintBoard();

\n\n\t\t"

chSort<

"

方获胜!

nWin++;

Lose()//输棋

{nLose++;

PlayTurn(void)//走1步棋

intnRow,nCol;

现在该"

方下棋,请输入棋盘坐标(x,y):

do{cin>

>

nRow>

nCol;

//输入坐标

if(nRow>

nSize||nCol>

nSize||nRow<

1||nCol<

1)//判断坐标越界

cout<

输入的坐标越界,x与y的范围应小于等于"

nSize<

并且大于0,请重新输入\n"

elseif(achBoard[nRow-1][nCol-1]!

='

)//判断坐标合理

棋盘("

nRow<

,"

nCol<

)处已有棋子,请重新输入\n"

else

{

achBoard[nRow-1][nCol-1]=chSort;

//在坐标处放上棋子

break;

//退出循环

}

}while

(1);

Judge()//判断是否棋子连成一线,若是返回1

//以下是各种可能连成一线的情况

if(achBoard[0][0]==chSort&

&

achBoard[1][1]==chSort&

achBoard[2][2]==chSort)return1;

elseif(achBoard[2][0]==chSort&

achBoard[0][2]==chSort)return1;

elseif(achBoard[0][0]==chSort&

achBoard[1][0]==chSort&

achBoard[2][0]==chSort)return1;

elseif(achBoard[0][1]==chSort&

achBoard[2][1]==chSort)return1;

elseif(achBoard[0][2]==chSort&

achBoard[1][2]==chSort&

achBoard[0][1]==chSort&

elseif(achBoard[1][0]==chSort&

achBoard[1][2]==chSort)return1;

achBoard[2][1]==chSort&

return0;

//没有连成一线则返回0

PrintInfo(void)//打印总体情况

Side"

方共计赢"

nWin<

局,输"

nLose<

局,平"

nDraw<

局。

endl;

voidPrintRule(void)//打印规则

\n\t*****************欢迎使用三子棋游戏!

*****************"

endl<

\n\t*****************************************************"

endl;

\t*游戏规则:

*"

\t*a.每1步输入要下棋的格子的x,y坐标,按Enter键*\n"

\t*b.有1方首先3个棋子连成一线即判获胜*\n"

\t*c.当棋子布满棋盘但仍无获胜方即为平局*\n"

\t*d.X方先行*\n"

\t*****************************************************"

\n\n\t\t请按任意键开始下棋!

intJudgePlay(CGobang&

SideX,CGobang&

SideO)//每下1步要进行输赢的判断,有结果则返回1

if(SideX.Judge())//X方获胜

SideX.Win();

SideO.Lose();

return1;

elseif(SideO.Judge())//O方获胜

SideO.Win();

SideX.Lose();

voidPlay(CGobang&

SideO)//开始一局游戏

while

(1)

CGobang:

SideX.PlayTurn();

//X方下棋

if(JudgePlay(SideX,SideO))//判断输赢

break;

if(CGobang:

GetFull())//判断是否平局

{

CGobang:

Draw();

}

SideO.PlayTurn();

//O方下棋

2.cpp文件代码

stdio.h>

Windows.h>

#include"

juti.h"

intmain(void)

color88"

CGobangSideX('

X'

),SideO('

O'

//定义两个棋子类对象,分别代表X方与O方

PrintRule();

cin.get();

stringstrChoice;

do

InitialBoard();

Play(SideX,SideO);

//开始下一局

是否继续(Y/N)?

cin>

strChoice;

}while(strChoice=="

Y"

||strChoice=="

y"

SideX.PrintInfo();

SideO.PrintInfo();

\n\n\t欢迎再次使用三子连珠游戏!

return0;

3.程序实现截图

1.界面

2.进入游戏开始下棋

输入坐标开始棋局

判断输入坐标是否合理:

3.判断棋局胜负:

4:

结束游戏:

第四部分完成设计

1、实验总结

我们学习人工智能就是学会如何用人工的方法模拟和实现人类智能,我们学习的是一种逻辑思维,如何将我们的方法给予计算机,达到我们所期望的结果。

对于该实验,我们组员对c语言更加熟悉,故而采用了c语言来写该实验,但是在用c语言在布局和构造界面这一块,并不是很好,但我们力求直观,简洁,将所需要展现的都显示出来。

加入了判断旗子位置是否合理这一函数,使得该程序更加有可行性!

设计成绩:

               指导老师签名:

               

日期:

2014年4月20

戴晨丹陈万琳

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 历史学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1