黑白棋游戏设计与开发 毕业论文 (2)

温柔似野鬼°
912次浏览
2021年02月10日 23:21
最佳经验
本文由作者推荐

-

2021年2月10日发(作者:房地产经营与估价专业)













黑白棋游戏设计与开发












































业、班




















1



毕业论文任务书











毕业年份




学生姓名



指导教师





系、专业、班级











黑白棋游戏设计与开发






一、内容概要



随着世界经济的快速发 展和计算机的日益普及,计算机游戏逐渐走进了人们的生活,成为大


多数人娱乐休闲的主 要方式。按照联网与否,计算机游戏可以分为单击游戏和网络游戏,单机游


戏,指仅使用 一台计算机或者其它游戏平台就可以独立运行的电子游戏。区别于网络游戏,它不


需要专 门的服务器便可以正常运转游戏,部分也可以通过局域网或者战网进行多人对战。游戏玩


家不连入互联网即可在自己的电脑上玩的游戏,模式多为人机对战。因为其不能连入互联网而互

< br>动性稍显差了一些,但可以通过局域网的连接进行多人对战,而不需要专门服务器也可以正常运

< p>
行的游戏。



本次毕业设计是基于


c++


语言,在


vs2005


平台上进行的单机版游戏开发,通过本次游戏的开


发,有益于进一步掌握对


c++


语言的应用,加深对计算机游戏的制作理念的理解,对我今后参与


更加复杂的游戏项目积累宝贵的经验!



黑 白棋


(Reversi



Othell o)


,也叫苹果棋,翻转棋,是一个经典的策略性游戏。黑白棋是


19


世纪末英国人发明的。直到上个世纪


70


年代一个日本人将其发展,借用莎士比亚名剧奥赛罗


(othello)


为这个游戏重新命名,


也就是现在大家玩的黑白棋。

< br>为何借用莎士比亚名剧呢?是因为


奥赛罗是莎士比亚一个名剧的男主角。他是一个 黑人,妻子是白人,因受小人挑拨,怀疑妻子不


忠一直情海翻波,最终亲手把妻子杀死。 后来真相大白,奥赛罗懊悔不已,自杀而死。黑白棋就


是借用这个黑人白人斗争的故事而 命名。



二、游戏规则



1


、游戏元素




棋盘:本游戏使用


8x8


的棋盘,每次落子只能放在棋盘的格子中。




棋子:本游戏使用黑白两种棋子。执黑者先行,在每次 游戏开始时,由玩家进行选择,若玩


家选择执黑,则计算机选择执白。反之相似!



2


、游戏玩法


< /p>



1


)游戏的胜负:本游戏使用


8x8


的棋盘


,


由两人 执黑子和白子轮流下棋,最后子多方为胜


方。




2


)落子的要求:轮到一方下棋时,必须把棋下在与 对方棋子相邻的空位上,要求所下的棋


子和原有的已方棋子夹住对方的至少一个棋子


(


横竖斜夹均可


)


,然后把被夹住的子变成己方的颜



(


也叫吃子


)


。下棋过程中,任何棋子既不会从棋盘上拿走,也不 会从一个格子移到另一个格子。




3


)取胜的技巧:一般说来,下棋过程中,你必须尽量削减对手的行动力,同时增加自己的


行动力,这种策略我们称之为行动力原则


(

或行动力战术


)


。当一方达到或接近这个目标时,我们


就称该棋手控制了棋局。另外,这个战术的目的是迫使对方下坏棋,如果对方虽然可选位置很 少,


但每一步却总有好棋,那战术目的就没有达成。记住,你必须让对方完全无好棋可下 。



黑白棋规则规定只能在对方棋子相邻的空位下棋,这就可 以推出另一个原则。对方棋子边上


的空位越多,你下棋的选择也就越多,换句话说,你的 行动力就越强;相反,如果你棋子边上的


空位越少,对方可下的位置也就越少。我们把相 邻位置上有空位的子称为外子,反之称为内子,


连在一起的外子称为前线或墙。下棋时要 尽量减少自己的外子。




1




三、文献查阅指引



[1]


王浩


.


游戏开发经典案例详解

< br>.


北京:清华大学出版社


.2010:399-408.


[2] Stanley B. Lippman


< p>
.


李师贤译


.c++ Primer.

< p>
北京


.


人民邮电出版社


. 2010.


[3]


詹红霞



侯思颖



陶永红等著


.Visual C++


程序设计教程


.


北京:清华大学出版社


.2007.








指导教师签名:



























教研室意见








负责人签名:























系审核意见


















负责人签名:




























1



毕业论文开题报告











毕业年份



学生姓名





系院



学号



黑白棋游戏设计与开发





专业、班级



指导教师





一、研究的价值和意义



随着网络技术 的日新月异和计算机的普及,


当今的计算机技术也走上了平民化和娱乐化的时

< p>
代,尤其是游戏产业的发展已经成为信息产业中发展势头最猛烈最具前景的一个分支。



windows


是一款优秀免费的操作系统,目前 使用用户持续增加。


windows


下的游戏目前非常


多,未来几年内,


windows


游戏产业必将 持续发展。



人工智能是一门极富挑战性的科学,


随着计算机处理速度的飞速提高,


人们很早就提出了疑


问:计算机是否会超越人类?



结合上诉三者与一体,我决定 用


C++


语言开发一款小游戏,游戏内容来自网络上日渐流行的


一种智力游戏‘黑白棋’



黑白棋是一 种在网络上日渐流行的小游戏,本身的人机对战又需要考虑


到人工智能。



因此,我希望把平时界面简单、选项复杂的游戏,在


windows


里面做成漂亮的、简单的游戏


程序,以给


windows


玩家一个新的选择。



同时,利用本课题设计的机会可以熟悉


c++


语言的各种特性,锻炼程序设计的实践能力,熟



c++


语言


windows


下的开发环境

< p>
,


熟悉前沿的


windows

图形用户界面的开发


,


以及巩固数据结构

< br>和算法等课程的学习成果,并深入理解数据结构和算法在程序设计中的核心地位。



最后,借助开发本次游戏的过程,可以熟悉人工智能的程序实现,有助于掌握棋类所需人 工


智能的常见算法,随着游戏产业的日益壮大,人工智能在游戏中的突出表现,人工智能 越来越得


到世人的重视。在这次的人机对战算法中,通过一定的算法,实现电脑的下棋及 走棋运作,加深


了对人工智能工作原理的了解。




1



二、研究的步骤方法



1


.研究的目标和内容



研究目标:



通过对黑白棋游戏规则的 研究,做出一款适合在


windows


系统下进行人机对弈的黑 白棋程



出来,是本课题的研究总目标。



具体需要研究一下几方面:



1


黑白棋游戏规则;



2


黑白棋游戏技巧;



3


友好的用户界面;



4


单人模式的人工智能算法;



5


黑白棋游戏的常用功能(悔棋、难度选择等)




主要内容:



1


总体设计:



< br>一款黑白棋游戏软件主要分为界面开发、存储结构、规则设计、人工智能算法设计等四大模


块。



2


具体设计:



< br>具体设计阶段要把总体设计阶段规划好的界面、存储、规则、算法等一一实现。




在界面阶段通过调查分析设计好的界面用绘图工具首先绘 制出来,并在程序中得以显示。




存储阶段采用二维数组来表示每个棋盘位置的状态。包括该处为空、黑子、白子、可下子点、

< br>不可下子点等。




规则设 计通过分析黑白棋游戏自身规则规律,用代码在程序里还原游戏自身的规则。




算法设计通过学习其他程序和书籍的算法,来写出一套适 用于本程序自身的算法,已实现人


机对弈的机器落子过程。



3


系统测试:




通过不断对程序进行测试,找出程序中存在的

< p>
bug


,并修复


bug


, 并不断完善游戏的功能,增


加游戏的正确性和可玩性。



2


.拟采取的研究方法、研究手段及技术路线、实验方案等

< p>


1


开发环境:



开发语:


c++


语言;开发平台:

< p>
windows


操作系统中的


vs2005


平台。



2


研究方法及手段:



通过对比网上现有 黑白棋游戏软件的优缺点,开发出一款更优秀的黑白棋游戏程序。



3


技术路线:


软件开发按照软件工程的思想进行。按照需求分析、系统设计、软件编程、软件测试、软件

< br>


维护的顺序依次进行,前一阶段的输出为后一阶段的输入。



4


实验方案:


在每次程序代码改变或完成时,进行程序测试,及时发现自身问题并改正错误。




1



三、黑白棋游戏的总体设想



1.


设计思路



本游戏设计是采用


MFC


对话框模式进行设计开发。


所以从此游戏设计采用模块化思想,


即程序


整体 设计分为五个模块来实现。分别为:主界面对话框类、棋盘窗口类、人工智能算法类、规则


处理类、帮助对话框类。



2.


结构设计



棋盘状态用数组


a[8][8]


初值为


0


表示空格。函数的实体比较简单,因为要输出图形,所以


应 初始化图形系统,图形工作方式正确确定后,画出棋盘,调用


playtopc()


人机对弈函数开始游


戏。一旦游戏结束后,关闭图形系统,程序结束 。



本次设计的主要函数有:



2.1. Create ()


创建游戏的窗口、游戏中的图片。


通过


windows


编程中的


Lo adBitmap ()


加载游戏所需要的图片。



2.2. OnPaint ()


窗口绘图函数。



2.3. OnLButtonDown ()


鼠标左键响应函数,点击鼠标左键下棋



2.4. computer_play ()


电脑下棋函数



2.5. PlayMotive


()根据游戏的规则翻转棋盘的棋子


< /p>


根据游戏的等级,按照不同的搜索深度进行判断,实现电脑下棋。



_move_chess()


判断能否下棋落子。



2.7. game_over ()


输出胜利者结果



根据分数值


score1



score2


的大小得出下棋的结果,输出赢者信息。

< br>























1



3.


流程图



3.1


交换棋手下棋流程图:












































开始



当前位置能否棋


子?



Y


按鼠标左键下棋



更新棋盘





统计分数



换棋手




1


1



3.2


游戏的逻辑流程









开始



初始化游戏大小、棋盘



设置游戏的等级



点击鼠标左键



棋手走棋



Y


结束



格子已满或一方没子了?



N


调用


MoveColor


恢复格子

< p>


N


符合下子条件


?


换棋手




2



1



三、主要参考文献



[1]


George


Artificial Intelligence: Structures


and Strategies for Complex


Problem


Solving Addison Wesley[M].2001-7


[2] Mat Techniques For Game Programming[M].Premier Press.2002.


[3]


张宏林

.


数字图像分析与处理技术


[M].


北京


:


人民邮电出版社


2003-2.


[4]


棋类游戏的智能模块设计――浅谈人 工智能


[J].2004-09.


[5]

< br>蔡自兴


,


徐光祐


.


人工智能及其应用(第三版)


[M].


北京


:


清华大学出版社


.2003-9.


[6]


杜秀全


,

程家兴


.


博弈算法在黑白棋中的应用


[J].2003.




指导教师意见及建议





签字:



























系(院)主管主任意见及建议










签字(盖章)








































1



黑白棋游戏设计



摘要



本次毕业设计是基于


c++


语言,在


vs2005


平台上进行的单机版游戏开发,通


过本次游戏的开发,有益于进一步掌握对


c++


语言的应用,加深对计算机游戏的制作理念


的理解,对我今后参与更加复杂的游戏项目 积累宝贵的经验!



黑白棋


(Reve rsi



Othello)


,也叫苹果 棋,翻转棋,是一个经典的策略性游戏。黑白棋



19


世纪末英国人发明的。直到上个世纪


70


年代一 个日本人将其发展,借用莎士比亚名


剧奥赛罗


(Othello )


为这个游戏重新命名,也就是现在大家玩的黑白棋。为何借用莎士比亚


名剧呢?是因为奥赛罗是莎士比亚一个名剧的男主角。


他是一个黑人,


妻子是白人,


因受小


人挑拨,怀疑妻子不忠一直 情海翻波,最终亲手把妻子杀死。


后来真相大白,奥赛罗懊悔不


已,自杀而死。黑白棋就是借用这个黑人白人斗争的故事而命名。


关键词



c++


编程;

< p>
windows


编程;


MFC

技术






















1




论文目录



第一章



引言…………………………… …………………………………………………………


1


1.1


c++


简介…………………… …………………………………………………………………


1


1.2


window


编程介绍……… ……………………………………………………………………


1


1.3


Visual studio


开发平台简介………………………………………………………………


1


第二章



毕业业设计的目的及要求…… …………………………………………………………


2



2.1


毕业设计的目的………………………………………………………… ……………………


2


2.2


毕业设计 的开发环境…………………………………………………………………………


2


2.3


毕业设计所需的知识…………………………………………………… ……………………


2


2.4


毕业设计 要求…………………………………………………………………………………


2


第三章



毕业设计的内容……………… …………………………………………………………


3


3.1< /p>


程序功能介绍…………………………………………………………………………………


3


3.2


程序整体设计说明………………… …………………………………………………………


4


3.3< /p>


程序源代码及注释……………………………………………………………………………


7


第四章



结束语 ……………………………………………………………………………………


23


















1





1



第一章



引言



1.1 c++


语言介绍



C++


这个词在中国大陆的程序员圈子中通常被读做



C< /p>


加加”



而西方的程序

< br>员通常读做“


C plus plus


”,“

< p>
CPP


”。



它是一种使 用非常广泛的计算机编程


语言。


C++


是一种静态数据类型检查的,


支持多重编程范式的通用程序设计语言。

< br>它支持过程化程序设计、


数据抽象、


面向对象程序设计、


制作图标等等泛型程序


设计等多种程序设计风格。



1.2 windows


编程介绍



Windo ws


是微软推出的图形界面的操作系统,有


windows20 00



XP



Vista



win7


等各种版本。是 一种抢占式多任务的操作系统,是


PC


上的主流操作系统,



PC


操作市场占绝大多数网络游戏的客户 端、服务器端都可在上运行。



Windows


程序由一个或多个的窗口组成,通常是多个窗口。窗口一般是一个


矩形的区域,



windows


对窗口进行统一管理 。


任何的文字、


图形都写窗口中显


示。



windows


系统设计为事件驱 动的操作系统,事件在


windows


定义为消息,消


息为应用程序和应用程序间、


应用程序和操作系统间提供了信息传递的渠 道。



息队列,由


Windows


维持。



1.3 Visual studio


开发平台简介




Visual


Studio


是微软 公司推出的开发环境,


visual


Studio

< p>
可以用来应用创



windows


平台下的


windows


程序和网络应用程序,也可以 用来创建网络服务、


智能设备应用程序和


Office


插件。目前已经开发到


10.0


版本,也就是< /p>


Visual


Studio 2010.


我们本次毕业设计的开发平台就是其中的


Visual Studio 2005















1




第二章



毕业设计的目的与要求



2.1


毕业设计的目的



通过对黑白棋游戏规 则的研究,


做出一款适合在


windows

系统下进行人机对


弈的黑白棋程序出来,是本课题的研究总目标。

< br>


具体需要研究一下几方面:



1


.黑白棋游戏规则;



2


.黑白棋游戏技巧;



3


.友好的用户界面;



4


.单人模式的人工智能算法;



5< /p>


.黑白棋游戏的常用功能(难度选择)。



2.2


毕业设计的开发环境



开发语:


c++


语言;



开发平台:


windows


操作系 统中的


vs2005


平台。



2.3


毕业设计所需的知识



熟悉


c++


语言及


v s2005


开发平台。



2.4


毕业设计要求



1.


分析毕业设计题目的要求



2.


写出详细设计说明



3.


编写程序代码,调试程序使其能正确运行



4.


设计完成的软件要便于操作和使用。

















1




第三章



毕业设计的内容



3

< br>.


1


程序功能介绍



1


.显示游戏的界面功能


< p>
游戏界面上包括游戏等级选择、重新开始、游戏帮助的控件对游戏进行相应


的设置。



2


.接受鼠标输入功能



能够接受玩家的鼠标输入功能,把棋子放入指定的位置。



3


.根据规则翻转相应的棋子



无论是电脑或是玩家在棋盘中落下棋子后,能够根据游戏的规则,把横向、

纵向及对角直线上的棋子全部翻转过来,


变成最后落下棋子的颜色,


并对棋子数


量进行增减。



4


.游戏胜负判断功能



双方都没有棋子可下时棋局结束,以棋子数目来计算胜负,棋子多的一方获


胜 。在棋盘还没下满时,如果一方的棋子应经被对方吃光,则棋局结束。将对手


棋子吃光的 一方获胜。



5


.实现人机对战模式



支持人工智能,根据游戏等级的不同,进行不同的算法深度搜索,找出最合


理 的位置进行落子操作。



6


.人工智能的等级设置


< p>
能够指定当前电脑人工智能的等级。


根据不同的等级,

其算法搜索深度不同。



7


.游戏提供帮助说明



在游戏界面中,提供一个控件。以方便对本游戏不了解的玩家对游戏进行操


作 和使用。



黑白棋功能架构:





1




















< br>能

























< br>画

























< br>设





3-1



3



2


程序整体设计说明

< p>


1


.设计思路



本游戏设计是采用


MFC


对话框模式进行设计 开发。所以从此游戏设计采用模


块化思想,即程序整体设计分为五个模块来实现。



主界面对话框类:主要负责主界面及棋盘、棋子的显示及棋盘窗口对 象的创


建和调用。



棋盘窗口类:主要 负责接受玩家鼠标输入的棋子位置及棋子翻转动画等




理。




1



人工智能算法类:主要负责电脑的人工智能算法的处理。



规则处理类:主要负责棋子数据的统计、落子位置有效及胜负判断等处理。

< br>


帮助对话框类:主要负责帮助提示的显示及其他辅助消息。

















2


.程序 结构(流程图)































































3-2



1








载入游戏初始化



N


判断有斯是否开始



游戏设置



Y


Y


设置游戏等级



帮助



弹出帮助



对话框







左键下棋









N


电脑




下棋



N


N


判断棋盘变化



Y

< br>调用


PlayMotive


函数



改变前盘棋子



盘其中白棋和黑棋是否


满足结束条件



Y


游戏结束





3-3




1




3


.程序结果



人执黑棋,


电脑执白棋,


轮流走棋,


每方都试图在游戏结束前让自己棋子的


数目多于对方。按鼠标左键可以摆放棋子。下到最 后谁的棋子多,谁赢。



3.3


程序源代码及注释



1


、游戏对话框中控件的设置



消息与成员函数映射:



BEGIN_MESSAGE_MAP(COthelloDlg, CDialog)



ON_WM_SYSCOMMAND()



ON_WM_PAINT()



ON_BN_CLICKED(IDC_HELP, &COthelloDlg::OnBnClickedButtonHelp)



ON_WM_QUERYDRAGICON()



//}}AFX_MSG_MAP



ON_BN_CLICKED(IDC_RADIO1, &COthelloDlg::OnBnClickedRadio1)



ON_BN_CLICKED(IDC_RADIO2, &COthelloDlg::OnBnClickedRadio2)



ON_BN_CLICKED(IDC_RADIO3, &COthelloDlg::OnBnClickedRadio3)



ON_BN_CLICKED(IDC_START, &COthelloDlg::OnGameStart)


END_MESSAGE_MAP()



帮助控件的实现:



void COthelloDlg::OnBnClickedButtonHelp(){



// TODO:


在此添加控件通知处理程序代码




HelpDlg helpDlg;



l();


}


“低”空间的实现:



void COthelloDlg::OnBnClickedRadio1()



{



// TODO:


在此添加控件通知处理程序代码




g_iGameLevel = LEVEL_LOW;



}


“中”控件的实现:



void COthelloDlg::OnBnClickedRadio2()



{



// TODO:


在此添加控件通知处理程序代码




g_iGameLevel = LEVEL_NOR;



}



“高”控件的实现:



void COthelloDlg::OnBnClickedRadio3()



{



// TODO:


在此添加控件通知处理程序代码




1




g_iGameLevel = LEVEL_HIGH;



}


游戏开始控件的实现


:


void COthelloDlg::OnGameStart()



{



// TODO:


在此添加控件通知处理程序代码




GameStart();



}


void COthelloDlg::GameStart()



{



m_nBlackCount = 2;



m_nWhiteCount = 2;



m_e();



}


2


、棋盘窗口的设计



CChessBoard


类的构造函数:



CChessBoard::CChessBoard()



{



m_iMotiveNumber=0;



m_iMotivex = m_iMotivey=0;



m_bPlayMotive = FALSE;



init_board(&m_oChessBoard);



}



CChessBoard::~CChessBoard()



{



}



消息与成员与函数映射


:


BEGIN_MESSAGE_MAP(CChessBoard, CWnd)



ON_WM_PAINT()



ON_WM_LBUTTONDOWN()



ON_WM_CREATE()



ON_MESSAGE(UM_COMRUN, OnComRun)



ON_MESSAGE(WM_TRANCHESS, OnTranChess)


END_MESSAGE_MAP()


延时函数:



void delay(INT32 millisecond)



{



clock_t start = clock();



do




{




MSG msg;




if (::PeekMessage( &msg, NULL, 0, 0, PM_NOREMOVE ) )





{



1

-


-


-


-


-


-


-


-