




已阅读5页,还剩14页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
VC程序设计 课程设计报告书 设计题目: 黑白棋游戏设计 院 系: 班 级: 组 别: 学 号: 姓 名: 起止日期: 指导教师: 1目 录前 言11. 课程设计计划22需求分析33概要设计44详细设计55编码与测试136心得体会15参考文献16前 言黑白棋,也称反棋(Reversi)、奥赛罗棋(Othello),苹果棋,翻转棋。游戏通过相互翻转对方的棋子,最后以棋盘上谁的棋子多来判断胜负。它的游戏规则简单,因此上手很容易,但是它的变化又非常复杂。起初,黑白棋在西方和日本很流行,近年来,黑白棋正逐步为中国玩家所接受,并深受喜爱。本次我们组选择这个题目做大作业,一方面是巩固和提高以前所学的VC+的知识;另一方面是因为这可能是我们中的大多数人第一次完成一个软件的系统设计,选择一个中等难度且相对成熟的软件来设计既易于实现又留有一定的上升空间,符合我们的实际情况。我们所设计的这种黑白棋游戏有几个特点:程序短小精悍,简洁明了;游戏界面美观,容易操作;功能丰富,趣味性强。 1. 课程设计计划黑白棋游戏设计所完成的就是一个游戏软件系统。其一般的功能包括:开始新局,对弈方式选择,先手选择,棋力设置,限时设置,计算机演示,保存棋局,载入棋局,导出走棋信息,重温棋局,英雄榜,悔棋,设置属性,帮助信息,关于黑白棋的介绍等,要求设计一个黑白棋游戏软件,通过计算机实现各个功能。其具体设计要求为:1、位图的导入和棋盘的生成2、记录双方对弈时间的计时器与记录双方子数的计数器3、选择人机对战与人人对战的函数及控制堆栈难度的主函数4、实现悔棋功能的堆栈我们对项目期望能实现a 可以实现人机对弈。b 棋力可调,分初级,中级,高级。c 提示音功能,下错、下对有不同的提示音。d 玩家遇到疑问,需要帮助时,给予一定的帮助e 界面色彩友好,给人以良好的视觉冲击。f 操作方便,容易上手。本课程设计工作进度计划为:表1 课程设计计划序号起止日期工 作 内 容12011年6月20日-2011年6月21日完成实验任务书,制作程序图形界面22011年6月21日-2011年6月22日制作帮助文档,添加代码,实现人机对战的游戏算法32011年6月22日-2011年6月23日实现添加音乐的功能,改进算法,测试程序42011年6月23日-2011年6月24日撰写课程设计报告52011年6月24日-2011年6月24日答辩本课程设计任务的分工:陈涛涛完成人机对战中的实现保存棋局、载入棋局、重温棋局、英雄榜、悔棋功能。 本人完成人机对战中的实现开始,退出,帮助,难度设计,播放背景音乐功能。 172需求分析开发背景:我国是棋文化的发祥地之一,上古的尧时代,围棋就在我国诞生了!在随后的几千年长河里,我国人民不断以自己的聪明才智创造出深受人们喜爱的棋类游戏,像中国象棋,五子棋,军棋等等一直是在民间很流行的棋类项目。同时国外的棋类游戏也流传到中国,比如国际象棋,跳棋等,逐渐在国内盛行。可以说棋类游戏一直是中国人民喜闻乐见的一种休闲方式,由于棋类游戏都是比较注重智力策略的,所以从中也可以折射出我国人民的智慧。 棋类游戏规则简单,对外部要求不高,人们可以随时随地进行对弈。但是,真正能够精通棋类游戏的人却不是很多,主要是棋类游戏具有变化莫测的特点,人们经常得在棋局上深思熟虑才能找到克敌制胜的办法。因此,各种棋类游戏都具有开发智力的效能。在休闲中使自己得到真正的长进,这或许就是其倍受人们青睐的原因所在! 黑白棋游戏,起源于古希腊,在日本和西方国家比较盛行,其独特的游戏规则,对人类智慧进行着不断地挑战和激励,因此人们一直乐此不疲!加上上世纪后期电脑的普及,使黑白棋在全球范围内风靡,人们通过电脑可以轻松地实现人机对弈或者双人对弈! 但是,黑白棋在我国开展的比较晚,流行范围还不够广,很多人对它的规则还不是很了解。为了配合国内黑白棋的普及活动,为广大的人民群众增添一种既能休闲又能益智的娱乐形式,使人们得到身心的全面发展,我们开发了这款PC版黑白棋游戏。现阶段沉迷于网络游戏或者其他游戏的学生不少,作为国家即将的建设者和接班人决不能只是游戏中的高手,我们只有去磨练自己的思维,发挥创造性才能担当得起如此重任,所以我们更希望能将其在学生中加以推广,让我们学生找到真正适合自己的游戏!选题的意义:本次我们组选择这个题目做大作业,一方面是巩固和提高以前所学的VC+的知识;另一方面是因为我们是第一次完成一个软件的系统设计,选择一个中等难度且相对成熟的软件来设计既易于实现又留有一定的上升空间,符合我们的实际情况。我们所设计的这种黑白棋游戏有几个特点:程序短小精悍,简洁明了;游戏界面美观,容易操作;功能丰富,趣味性强。3概要设计我们的程序从总体上说分为五个块,希望通过五个类来解决,分别为:(1) 位图的导入与棋盘的生成(2) 记录双方对弈时间的计时器与记录双方棋子数的计数器和每一步的走棋信息(3) 选择人机对战与人人对战的函数及控制堆栈难度的函数(4) 设置选项功能和开始退出等简单的实现(5) 任务分工下的保存棋局、载入棋局、重温棋局、英雄榜、悔棋等功能模块的实现游戏的简单流程为:图1 游戏简单流程图4详细设计这是一个基于vc+程序。在这个黑白棋游戏中我们对其作了详细设计,程序没有涉及到数据库方面的知识,其实现的功能模块包括:CaboutDlg:关于对话框的类CAddSec:英雄榜加密功能的类CBestDlg:英雄榜对话框的类CBWChessApp:主应用程序类CBWChessDlg:主对话框类CConfirmSec:密码验证对话框的类 CCreditStatic:自定义文本类CDemo:计算机对弈选项设置对话框的类CDigitalPlayer:播放音乐类CHowToDlg:帮助对话框类CHyperLink:超链接类CMemDC:内存DC,基于CDCCMessage1:自定义消息类1CMessage2:自定义消息类2 CRecordDlg:设置英雄榜对话框类CSettingDlg:设置“设置”对话框类CSetupDlg:设置黑白棋新局开始类CUndo:设置悔棋功能类Stack:栈功能的实现静态设计:图2 静态设计图棋盘的信息保存为主窗口类COthelloDlg类的成员变量,重要的几个成员变量与成员函数个数庞大,附在源码中指示。在我负责的模块主要包括:游戏开始时对话框中新局和退出功能的设计,游戏难度(棋力)的设置,游戏开始后背景音乐的播放,以及帮助对话框的制作。其他的功能我们从别人的例子中借鉴而实现。主要有三个菜单和各自的子菜单:游戏(G):新局(N),计算机演示(M),保存棋局(V),载入棋局(O),导出走棋信息(D),重温棋局(W),英雄榜(B),退出(X)。选项(O):悔棋(U),提示(T),查看可以下子的地方(C)设置(S)。帮助(H):黑白棋帮助(R),关于黑白棋(A)。每个子菜单都是通过在CBWChessDlg下添加事件处理来实现其功能的。在界面设计中,我们设计了十二个对话框模块。分别用以实现各个功能的人机交互功能。其中的部分模块是允许多个功能去调用实现的。初始界面:图3 游戏界面菜单选项:刚打开程序,可对程序进行设置,设置菜单如下:图4 设置界面与新游戏界面设置:其中显示声音效果的添加与否。可以选择声音效果,如果选择了声音效果,当你在游戏时,如果每次下对或者下错都会有不同的声音进行提醒。在开始新局进行游戏时,会有黑白棋基础的游戏设置。你可以根据自己的技术选择初级、中级、专家级进入游戏。此时系统会根据游戏程序算法适应的做出对应处理对策。图5 游戏提醒帮助的内容将显示在同一个界面,以方便玩家学习领会。界面如: 图6 帮助界面 图7 帮助界面详图在对作者的辛勤工作后给与了系统消息的查看帮助和版权信息的声明,关于对话框的设置如: 图8 关于对话框核心算法为最大最小搜索算法思路:在博弈中只有“敌我”两方,他们利益相对,其所赢的函数和为0:C1 + C2 = 0。其中C1代表我方赢(利益);C2为敌方赢(利益)。所以会出现三种情况: (1) 我方胜利C1 0 ,则C2 = -C1 0; (2) 敌方胜利 C2 0 ,则C1 = -C2 0得分,C10失分。双方都根据“极大一极小”的原则,在按照博弈规则生成的博弈树中,选取最佳步3,即:我方最佳棋步:取maxE(x),在我方得分C1最大,扩展“或”节点;敌方最佳棋步:取minE(x),在我方得分Cl最小,扩展“与”节点。极大-极小原则例:初始棋局假设有如图1布局所示图9 算法例子对应的图 轮到电脑下棋。现在它发现有这样三个地方可以下:e3,c3,c5。这三种下法分别会形成三种局面:A、B、C。如果是人在下棋,就会思考:那一种下法更好呢?比如A被别人占角,B没什么变化,C占了别人的角。当然棋手会选择下C。电脑也是如此,它会对每一种棋局评一个分,比如它判断,如果被别人占角,就减80分,相反占别人的角就加80分。那么A=-80分,B=0分,C=80分。电脑会选择下C。电脑程序对棋局评分的部分,称为“估值函数”(Evaluation Function)。真正的估值函数当然不会这么简单。它会用到如行动力、潜在行动力、余裕手、边角判断、稳定子等综合因素来判断。具体的估值函数网络上学习 所以会有初始棋局(-1)-+-| | |e3 c3 c5(A) (B) (C) 图 10 初始棋局接下来,如果人就这么判断。那么它顶多也就是个初学者。为什么呢?因为它不会推理,碰到对手弃角之类的战术,如“边角判断”中示例的一些情况,就输得一塌糊涂了。 当然,可以告诉电脑,碰到“边角判断”中的几种情况,就如何如何下。但是,真实的棋局是非常复杂的,电脑(也包括人脑)几乎不可能对动态的棋局给出静态的评估。因为实际对局总会出现这样那样的情况,是无法预先估计的。碰到这些情况,人就会向后推几步,看一看会是怎样的一个局面。一些棋类大师往往可以推十几步甚至更深。电脑也是如此。现在设电脑我白棋,推理深度为2 ,那么形成的树就为:初始棋局-白棋下棋之后-黑棋下棋之后估值初始棋局(-1)-+-| | |e3(-1) c3(-1) c5(-5)-+- -+- -+-| | | | | | | | | | | | | |f2 f3 f4 f5 f6 c2 d3 e6 f5 b6 c6 d6 e6 f6 +84+36+12 +5 -1+11 -1 +6 +6 +6 +0 -5 +3 +5 结果:应该下e3或c3图11 树具体实现的伪算法类似于经典的八皇后问题。最大最小搜索:var DepthMax: Integer; /最大搜索深度 max: Double; /最佳估值 max_x, max_y: Integer; /最佳值所在位置的x和y坐标function MiniMax(Depth: Integer; Board: TBoard): Double;var I, J: Integer; Value, t: Double;begin if Depth = 0 then /根节点depth=DepthMax;叶子节点depth=0; begin Result := 估值; /叶子结点估值返回 Exit; end; if 电脑下棋 then /电脑下棋的节点 Value := -MaxInt /节点赋初值,初始化为一个不可能达到的最小值 else /对手下棋的节点 Value := MaxInt; /节点赋初值,初始化为一个不可能达到的最大值 对于每一个合法的可下棋的位置(i,j) do begin 保存棋局; 下棋; t := MiniMax(depth - 1, Board); /递归调用 if 电脑下棋 and (value t then Value := t; if (depth = DepthMax) and (Value max) then /如果值大于根节点值则赋值 begin max := value; max_x := i; /x坐标 max_y := j; /y坐标 end;5编码与测试/设置黑白棋新局开始class CSetupDlg : public CDialog /退出黑白棋游戏void CBWChessDlg:OnExit()/提示void CHowToDlg:OnHhint()LoadHelp(IDS_HHINT0,IDS_HHINT1);/载入棋局void CHowToDlg:OnHopen()LoadHelp(IDS_HOPEN0,IDS_HOPEN1);/保存棋局void CHowToDlg:OnHsave()LoadHelp(IDS_HSAVE0,IDS_HSAVE1);/导出 棋局信息void CHowToDlg:OnHsaveinfo()/悔棋void CHowToDlg:OnHundo()LoadHelp(IDS_HUNDO0,IDS_HUNDO1);/英雄榜void CHowToDlg:OnHhero()LoadHelp(IDS_HHERO0,IDS_HHERO1);/限时void CHowToDlg:OnHlimit()/加/解密void CHowToDlg:OnHsec()/计算机演示void CHowToDlg:OnHdemo()/动态显示信息TCHAR *pArrCredit = _T(黑白棋t| |您的意见对我很重要!);6心得体会这次课程设计是我迄今为止所做过的最大的一个项目,充分锻炼了我们的各项能力。首先,它巩固了我们学过的VC+语言知识,锻炼了我们解决实际问题的能力;其次,它提高了我们的团队合作精神,小组两个人都各司其职,分别完成项目的一部分,同时,在项目进程中,遇到了很多各种各样的问题,但是两人紧密合作,共同攻关,终于克服了一个又一个困难,在最紧张的时候,主动放弃休息时间,加班加点,使其能按期完成,这种团队合作精神对于我们以后的学习和工作是大有裨益的;最后,它使我们体会到了学以致用的快感,提高了我们解决实际问题的信心和能力,并使
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 河北省霸州市2025年上半年事业单位公开遴选试题含答案分析
- 2025版龙门吊拆除现场安全管理及应急预案合同
- 2025年度户外运动设施防水施工及十年质保协议
- 2025版活动赞助商权益保障合同范本下载
- 2025年度体育场馆建设人工劳务外包合同模板
- 2025年度综合商业体短期租赁合同书
- 贵州省玉屏侗族自治县2025年上半年事业单位公开遴选试题含答案分析
- 2025电机产品国际认证与出口服务合同书
- 2025年度能源行业财务风险控制合同
- 贵州省凤冈县2025年上半年公开招聘村务工作者试题含答案分析
- GB/T 3799.1-2005商用汽车发动机大修竣工出厂技术条件第1部分:汽油发动机
- 小学音乐《村晚》优质课件设计
- 东锅300MW锅炉说明书
- 咯血(课件幻灯)
- 部门会签单模板
- 2023版初中化学跨学科实践活动(化学)
- 上海市环卫作业养护预算定额经费
- 宫颈环扎术护理常规
- G12《贷款质量迁徙情况表》填报说明
- 县城市管理领域集中行使行政处罚权工作衔接规范(试行)
- 九年级初三英语七选五专练1(10篇带答案)-
评论
0/150
提交评论