西安文理学院数学系学士学位论文分类号:西安文理学院数学系学士学位论文黑白棋游戏设计与开发系院名称数学系指导老师闫利娟学生姓名赵扬扬学生学号02101070314专业、班级数学与应用数学07级3班提交时间2011年5月24日西安文理学院数学西安文理学院数学系学士学位论文1西安文理学院数学系本科毕业论文任务书论文题目黑白棋游戏设计与开发毕业年份2011系、专业、班级数学系、数学与应用数学3班学生姓名赵扬扬学号02101070314指导教师闫利娟职称一、内容概要随着世界经济的快速发展和计算机的日益普及,计算机游戏逐渐走进了人们的生活,成为大多数人娱乐休闲的主要方式。按照联网与否,计算机游戏可以分为单击游戏和网络游戏,单机游戏,指仅使用一台计算机或者其它游戏平台就可以独立运行的电子游戏。区别于网络游戏,它不需要专门的服务器便可以正常运转游戏,部分也可以通过局域网或者战网进行多人对战。游戏玩家不连入互联网即可在自己的电脑上玩的游戏,模式多为人机对战。因为其不能连入互联网而互动性稍显差了一些,但可以通过局域网的连接进行多人对战,而不需要专门服务器也可以正常运行的游戏。本次毕业设计是基于c++语言,在vs2005平台上进行的单机版游戏开发,通过本次游戏的开发,有益于进一步掌握对c++语言的应用,加深对计算机游戏的制作理念的理解,对我今后参与更加复杂的游戏项目积累宝贵的经验!黑白棋(Reversi、Othello),也叫苹果棋,翻转棋,是一个经典的策略性游戏。黑白棋是19世纪末英国人发明的。直到上个世纪70年代一个日本人将其发展,借用莎士比亚名剧奥赛罗(othello)为这个游戏重新命名,也就是现在大家玩的黑白棋。为何借用莎士比亚名剧呢?是因为奥赛罗是莎士比亚一个名剧的男主角。他是一个黑人,妻子是白人,因受小人挑拨,怀疑妻子不忠一直情海翻波,最终亲手把妻子杀死。后来真相大白,奥赛罗懊悔不已,自杀而死。黑白棋就是借用这个黑人白人斗争的故事而命名。二、游戏规则1、游戏元素棋盘:本游戏使用8x8的棋盘,每次落子只能放在棋盘的格子中。棋子:本游戏使用黑白两种棋子。执黑者先行,在每次游戏开始时,由玩家进行选择,若玩家选择执黑,则计算机选择执白。反之相似!2、游戏玩法(1)游戏的胜负:本游戏使用8x8的棋盘,由两人执黑子和白子轮流下棋,最后子多方为胜方。(2)落子的要求:轮到一方下棋时,必须把棋下在与对方棋子相邻的空位上,要求所下的棋子和原有的已方棋子夹住对方的至少一个棋子(横竖斜夹均可),然后把被夹住的子变成己方的颜色(也叫吃子)。下棋过程中,任何棋子既不会从棋盘上拿走,也不会从一个格子移到另一个格子。(3)取胜的技巧:一般说来,下棋过程中,你必须尽量削减对手的行动力,同时增加自己的行动力,这种策略我们称之为行动力原则(或行动力战术)。当一方达到或接近这个目标时,我们就称该棋手控制了棋局。另外,这个战术的目的是迫使对方下坏棋,如果对方虽然可选位置很少,但每一步却总有好棋,那战术目的就没有达成。记住,你必须让对方完全无好棋可下。黑白棋规则规定只能在对方棋子相邻的空位下棋,这就可以推出另一个原则。对方棋子边上的空位越多,你下棋的选择也就越多,换句话说,你的行动力就越强;相反,如果你棋子边上的空位越少,对方可下的位置也就越少。我们把相邻位置上有空位的子称为外子,反之称为内子,连在一起的外子称为前线或墙。下棋时要尽量减少自己的外子。西安文理学院数学系学士学位论文2三、文献查阅指引[1]王浩.游戏开发经典案例详解.北京:清华大学出版社.2010:399-408.[2]StanleyB.Lippman著.李师贤译.c++Primer.北京.人民邮电出版社.2010.[3]詹红霞侯思颖陶永红等著.VisualC++程序设计教程.北京:清华大学出版社.2007.指导教师签名:年月日教研室意见负责人签名:年月日系审核意见负责人签名:年月日西安文理学院数学系学士学位论文3西安文理学院数学系本科毕业论文开题报告论文题目黑白棋游戏设计与开发毕业年份2011系院数学系专业、班级数学与应用数学07级3班学生姓名赵扬扬学号02101070314指导教师闫利娟一、研究的价值和意义随着网络技术的日新月异和计算机的普及,当今的计算机技术也走上了平民化和娱乐化的时代,尤其是游戏产业的发展已经成为信息产业中发展势头最猛烈最具前景的一个分支。windows是一款优秀免费的操作系统,目前使用用户持续增加。windows下的游戏目前非常多,未来几年内,windows游戏产业必将持续发展。人工智能是一门极富挑战性的科学,随着计算机处理速度的飞速提高,人们很早就提出了疑问:计算机是否会超越人类?结合上诉三者与一体,我决定用C++语言开发一款小游戏,游戏内容来自网络上日渐流行的一种智力游戏‘黑白棋’。黑白棋是一种在网络上日渐流行的小游戏,本身的人机对战又需要考虑到人工智能。因此,我希望把平时界面简单、选项复杂的游戏,在windows里面做成漂亮的、简单的游戏程序,以给windows玩家一个新的选择。同时,利用本课题设计的机会可以熟悉c++语言的各种特性,锻炼程序设计的实践能力,熟悉c++语言windows下的开发环境,熟悉前沿的windows图形用户界面的开发,以及巩固数据结构和算法等课程的学习成果,并深入理解数据结构和算法在程序设计中的核心地位。最后,借助开发本次游戏的过程,可以熟悉人工智能的程序实现,有助于掌握棋类所需人工智能的常见算法,随着游戏产业的日益壮大,人工智能在游戏中的突出表现,人工智能越来越得到世人的重视。在这次的人机对战算法中,通过一定的算法,实现电脑的下棋及走棋运作,加深了对人工智能工作原理的了解。西安文理学院数学系学士学位论文4二、研究的步骤方法1.研究的目标和内容研究目标:通过对黑白棋游戏规则的研究,做出一款适合在windows系统下进行人机对弈的黑白棋程序出来,是本课题的研究总目标。具体需要研究一下几方面:1黑白棋游戏规则;2黑白棋游戏技巧;3友好的用户界面;4单人模式的人工智能算法;5黑白棋游戏的常用功能(悔棋、难度选择等)。主要内容:1总体设计:一款黑白棋游戏软件主要分为界面开发、存储结构、规则设计、人工智能算法设计等四大模块。2具体设计:具体设计阶段要把总体设计阶段规划好的界面、存储、规则、算法等一一实现。在界面阶段通过调查分析设计好的界面用绘图工具首先绘制出来,并在程序中得以显示。存储阶段采用二维数组来表示每个棋盘位置的状态。包括该处为空、黑子、白子、可下子点、不可下子点等。规则设计通过分析黑白棋游戏自身规则规律,用代码在程序里还原游戏自身的规则。算法设计通过学习其他程序和书籍的算法,来写出一套适用于本程序自身的算法,已实现人机对弈的机器落子过程。3系统测试:通过不断对程序进行测试,找出程序中存在的bug,并修复bug,并不断完善游戏的功能,增加游戏的正确性和可玩性。2.拟采取的研究方法、研究手段及技术路线、实验方案等1开发环境:开发语:c++语言;开发平台:windows操作系统中的vs2005平台。2研究方法及手段:通过对比网上现有黑白棋游戏软件的优缺点,开发出一款更优秀的黑白棋游戏程序。3技术路线:软件开发按照软件工程的思想进行。按照需求分析、系统设计、软件编程、软件测试、软件维护的顺序依次进行,前一阶段的输出为后一阶段的输入。4实验方案:在每次程序代码改变或完成时,进行程序测试,及时发现自身问题并改正错误。西安文理学院数学系学士学位论文5三、黑白棋游戏的总体设想1.设计思路本游戏设计是采用MFC对话框模式进行设计开发。所以从此游戏设计采用模块化思想,即程序整体设计分为五个模块来实现。分别为:主界面对话框类、棋盘窗口类、人工智能算法类、规则处理类、帮助对话框类。2.结构设计棋盘状态用数组a[8][8]初值为0表示空格。函数的实体比较简单,因为要输出图形,所以应初始化图形系统,图形工作方式正确确定后,画出棋盘,调用playtopc()人机对弈函数开始游戏。一旦游戏结束后,关闭图形系统,程序结束。本次设计的主要函数有:2.1.Create()创建游戏的窗口、游戏中的图片。通过windows编程中的LoadBitmap()加载游戏所需要的图片。2.2.OnPaint()窗口绘图函数。2.3.OnLButtonDown()鼠标左键响应函数,点击鼠标左键下棋2.4.computer_play()电脑下棋函数2.5.PlayMotive()根据游戏的规则翻转棋盘的棋子根据游戏的等级,按照不同的搜索深度进行判断,实现电脑下棋。2.6.do_move_chess()判断能否下棋落子。2.7.game_over()输出胜利者结果根据分数值score1和score2的大小得出下棋的结果,输出赢者信息。西安文理学院数学系学士学位论文63.流程图3.1交换棋手下棋流程图:开始换棋手统计分数更新棋盘按鼠标左键下棋图1当前位置能否棋子?Y西安文理学院数学系学士学位论文73.2游戏的逻辑流程开始初始化游戏大小、棋盘设置游戏的等级棋手走棋格子已满或一方没子了?调用MoveColor恢复格子符合下子条件?换棋手结束YNN图2点击鼠标左键西安文理学院数学系学士学位论文8三、主要参考文献[1]GeorgeF.LugerArtificialIntelligence:StructuresandStrategiesforComplexProblemSolvingAddisonWesley[M].2001-7[2]MatBuckland.AiTechniquesForGameProgramming[M].PremierPress.2002.[3]张宏林.数字图像分析与处理技术[M].北京:人民邮电出版社2003-2.[4]棋类游戏的智能模块设计――浅谈人工智能[J].2004-09.[5]蔡自兴,徐光祐.人工智能及其应用(第三版)[M].北京:清华大学出版社.2003-9.[6]杜秀全,程家兴.博弈算法在黑白棋中的应用[J].2003.指导教师意见及建议签字:年月日系(院)主管主任意见及建议签字(盖章):年月日西安文理学院数学系学士学位论文9黑白棋游戏设计赵扬扬(西安文理学院数学系,陕西西安710065)摘要:本次毕业设计是基于c++语言,在vs2005平台上进行的单机版游戏开发,通过本次游戏的开发,有益于进一步掌握对c++语言的应用,加深对计算机游戏的制作理念的理解,对我今后参与更加复杂的游戏项目积累宝贵的经验!黑白棋(Reversi、Othello),也叫苹果棋,翻转棋,是一个经典的策略性游戏。黑白棋是19世纪末英国人发明的。直到上个世纪70年代一个日本人将其发展,借用莎士比亚名剧奥赛罗(Othello)为这个游戏重新命名,也就是现在大家玩的黑白棋。为何借用莎士比亚名剧呢?是因为奥赛罗是莎士比亚一个名剧的男主角。他是一个黑人,妻子是白人,因受小人挑拨,怀疑妻子不忠一直情海翻波,最终亲手把妻子杀死。后来真相大白,奥赛罗懊悔不已,自杀而死。黑白棋就是借用这个黑人白人斗争的故事而命名。关键词:c++编程;windows编程;MFC技术西安文理学院数学系学士学位论文10论文目录第一章引言………………………………………………………………………………………11.1c++简介………………………………………………………………………………………11.2window编程介绍……………………………………………………………………………11.3Visualstudio开发平台简介………………………………………………………………1第二章毕业业设计的目的及要求………………………………………………………………22.1毕业设计的目的………………………………………………………………………………22.2毕业设计的开发环境…………………………………………………………………………22.3毕业设计所需的知识…………………………………………………………………………22.4毕业设计要求…………………………………………………………………