




免费预览已结束,剩余24页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
软件基础大作业报告 项目名称:用VC+实现的黑白棋游戏班级:电气24班 成员:陈旭 曹爱华 李宁 厉达 陈聪完成时间:2004年10月12月指导教师:赵英良日期: 2004年12月8日目录摘要 2一、 需求分析1.1 开发背景 31.2 项目目标 31.3 运行环境 41.4 游戏说明 41.5 项目任务书 5二、 技术路线2.1 总体方案 62.2 详细设计 7三、 工程进度 9四、 测试报告 10五、 个人小结 12六、 附录 15摘要黑白棋,也称反棋(Reversi)、奥赛罗棋(Othello),苹果棋,翻转棋。游戏通过相互翻转对方的棋子,最后以棋盘上谁的棋子多来判断胜负。它的游戏规则简单,因此上手很容易,但是它的变化又非常复杂。起初,黑白棋在西方和日本很流行,近年来,黑白棋正逐步为中国玩家所接受,并深受喜爱。本次我们组选择这个题目做大作业,一方面是巩固和提高以前所学的VC+的知识;另一方面是因为这可能是我们中的大多数人第一次完成一个软件的系统设计,选择一个中等难度且相对成熟的软件来设计既易于实现又留有一定的上升空间,符合我们的实际情况。我们所设计的这种黑白棋游戏有几个特点:程序短小精悍,简洁明了;游戏界面美观,容易操作;功能丰富,趣味性强。 ABSTRACTThe black and white chess, is also call Reversi, the Othello chess, the apple chess, etc. The players overturn each others chessmen, the end judges the victory by counting the chessmen. The rule of the game is simple, so it starts very easily, but its variety is very complicated, so almost no one can master it.At first, the black and white chess spreads very much in west and Japan, in recent years, the black and white chess is accepted by Chinese player gradually, and becomes some players favorite chess game.This time ,we choose this subject to do the schoolwork, on one hand is to consolidate the knowledge we have learned in the curricula of VC+; on the other hand is that because maybe this is the first time of most of us to complete a system design of a software. So we choose one subject which is not so difficult to design, firstly, its easy to realize, secondly, we also have a certain rising space, this accords with our actual circumstance.This kind of black and white chess that we have designed contains a few characteristics, first, the program is dapper, simple and understands easily; second ,the game has a beauty interface and operations easily; third ,the function is abundant and the interest is strong. 一、 需求分析 1.1 开发背景 我国是棋文化的发祥地之一,上古的尧时代,围棋就在我国诞生了!在随后的几千年长河里,我国人民不断以自己的聪明才智创造出深受人们喜爱的棋类游戏,像中国象棋,五子棋,军棋等等一直是在民间很流行的棋类项目。同时国外的棋类游戏也流传到中国,比如国际象棋,跳棋等,逐渐在国内盛行。可以说棋类游戏一直是中国人民喜闻乐见的一种休闲方式,由于棋类游戏都是比较注重智力策略的,所以从中也可以折射出我国人民的智慧。 棋类游戏规则简单,对外部要求不高,人们可以随时随地进行对弈。但是,真正能够精通棋类游戏的人却不是很多,主要是棋类游戏具有变化莫测的特点,人们经常得在棋局上深思熟虑才能找到克敌制胜的办法。因此,各种棋类游戏都具有开发智力的效能。在休闲中使自己得到真正的长进,这或许就是其倍受人们青睐的原因所在! 黑白棋游戏,起源于古希腊,在日本和西方国家比较盛行,其独特的游戏规则,对人类智慧进行着不断地挑战和激励,因此人们一直乐此不疲!加上上世纪后期电脑的普及,使黑白棋在全球范围内风靡,人们通过电脑可以轻松地实现人机对弈或者双人对弈! 但是,黑白棋在我国开展的比较晚,流行范围还不够广,很多人对它的规则还不是很了解。为了配合国内黑白棋的普及活动,为广大的人民群众增添一种既能休闲又能益智的娱乐形式,使人们得到身心的全面发展,我们开发了这款PC版黑白棋游戏。现阶段沉迷于网络游戏或者其他游戏的学生不少,作为国家即将的建设者和接班人决不能只是游戏中的高手,我们只有去磨练自己的思维,发挥创造性才能担当得起如此重任,所以我们更希望能将其在学生中加以推广,让我们学生找到真正适合自己的游戏!1.2 项目目标 我们将主要通过VC+语言,运用面向对象的程序设计方法,开发此款黑白棋游戏。力争使程序短小精悍,简洁明了;游戏界面优美,容易操作;功能丰富,趣味性强。现在将我们对项目期望实现的目标一一介绍: a.能供两人对弈。b.可以实现人机对弈。c.棋力可调,分初级,中级,高级。d.可以悔棋。e.倒计时功能,双方中有一方时间用完即判该方输。 f.提示音功能,下错、下对有不同的提示音。g.界面色彩丰富,给人以良好的视觉冲击。h.操作方便,容易上手。 1.3 运行环境 本游戏短小精悍,而且对电脑配置的要求均不高,目前几乎所有的PC机均可运行该游戏。但是为了能让大家更好地体验该款游戏,我们给出如下的最低配置: 最低配置:CPU 1GHz 内存 32M 硬盘 4G Windows 95 Microsoft Visual C+ 6.0 同时结合我们开发该游戏的环境,我们强烈推荐用户使用如下的配置: 最佳配置:CPU 2GHz 内存 256M 硬盘 80G Windows XP Microsoft Visual C+ 6.01.4 游戏说明(1) 游戏流程:启动游戏后,直接进入棋盘界面,在这里,可以选择人人对弈还是人机对弈,同时可以调节棋力,(我们设定了三种棋力,初级、中级和高级,分别用不同的算法实现),还可以选择执黑和执白,如果对黑白棋有什么不明白之处,可以点击帮助来查看游戏的规则。在选定之后,我们就可以开始游戏了,(当然,在游戏开始后修改各个属性也是可以的),当我们开始下棋时,我们有一个计时器和一个计数器分别对下棋用时和双方棋子数进行记录,以作为判定输赢的依据。我们的判断标准为:若双方都未超时,棋子多者为胜;若有一方超时,直接判定此方为负,每局时限为5分钟。(2) 游戏规则:吃子:以方格为直线或者斜线的方向,以一方对照棋子和即将落下棋子之间(此两子之间必须没有空格且全部为对方棋子)的所有对方棋子被吃掉,被吃掉的对方棋子变为自己一方的棋子。下子:必须在可以吃子的位置处并且该位置为空格时可以落下己方的棋子,如果不能下子,棋子无法显示在棋盘上,同时有声音提示。停走:任何一方无法下子时屏幕上面会自动出现对话框,提示某方不能下子,让对方下子。赢棋:若一方超时,则自动判负,屏幕上面会自动出现对话框提示;当双方都无法下子时屏幕上面也会自动出现对话框,提示本次游戏结束,并且根据计数器记录的双方棋子数判定棋子数多的一方取得本次游戏的胜利。(3) 特别提示:我们在这个黑白棋程序中添加了悔棋功能,可以实现一步甚至多步悔棋,当你要仔细研究你的下棋思路和对手的下棋思路时,用悔棋功能可以把本盘棋单步悔棋到底,实现全过程的再现。1.5 项目任务书(1) 班级:电气24班 (2) 组别:prince(3) 组长:陈旭(4) 成员:陈旭、曹爱华、李宁、厉达、陈聪(5) 项目名称: 黑白棋(6) 项目背景: 黑白棋,又称翻转棋,反棋,苹果棋,奥赛罗棋,是一个经典策略性游戏,最初流行于西方和日本,随着电脑的普及,黑白棋在中国日趋兴盛,它以其规则简单,上手容易,变化多端,竞争激烈,一子之间,乾坤大变,深合兵法诡变之道,深受爱好智力游戏的中国人的喜爱。黑白棋的游戏规则和胜负判定的标准十分简单,在此略去。 (7) 项目分工: 曹爱华:资料的收集,前景展望,资料分析,编写部分程序。 陈 旭:管理整个小组的活动,指导编程,编写部分程序。 厉 达:算法的收集与整理,编写部分程序。 李 宁:文档的设计与编写,编写部分程序。 陈 聪:软件的最后测试,编写部分程序。(8) 项目进度: 5 6周:前期准备,各类资料收集,数据图算法等同时完成。 7 8周:实现基本功能。 9 13周:附加功能的实现。 1415周:最后测试,最后优化。 (各类文档的设计与编写穿插于始终) 二、 技术路线2.1 总体方案我们的程序从总体上说分为四个块,希望通过四个类来解决,分别为:(1) 位图的导入与棋盘的生成。(2) 记录双方对弈时间的计时器与记录双方子数的计数器。(3) 选择人机对战和人人对战的函数及控制堆栈难度的主函数。(4) 实现悔棋功能的堆栈。游戏的简单流程如下:2.2 详细设计这是一个基于对话框的vc程序。在本程序中共需导入三张位图,为(1)底色为绿的空方格,(2)已下入黑棋的方格,(3)已下入白棋的方格,三个方格大小完全相同.我们定义kerne88的数组来储存这些方格的情况,用CGrid类封装了每一格的位置、尺寸和贴图,当为0时贴空方格;函数时为1时贴黑棋,为3时贴白棋。每次OnDraw()函数被调用时,它会根据kernel的键值来命令每个CGrid对象m_grid在64个不同的位置贴上相应的位图,形成我们看到的棋盘。转函数B2w()在下棋过程中通过改变kernel的键值来显示不同位图以符合当前的下棋状态。下棋规则分为两种模式,一是人-人对战(在OnMan中启动),一是人机对战(在On Computer中启动)。(1) 在人-人对战模式(RunMode=MODE_2MAN) 时,每次发生LeftButtomDown事件后都要判断鼠标当时所在空格中是否可以下棋。判断的内容可以分为:a.比赛是否开始(m_GameFlag1?)否则返回。B.方格内是否空,空则可能,否则不能,c.空方格相邻的八个方格内是否有对方棋子,若有,则分别判断空格与对方棋子所在行列或斜线内有无己方棋子,若有且与对方棋子相邻,则棋子可下。若上述三个判断均成立,则将棋子放入空格中,并将相邻所夹的对方棋子翻转为己方棋子(B2W(),并将己方定时器关闭,启动对方定时器,轮对手下棋。当上述三个条件有一个不满足时,不能落棋,为增加程序的趣味性,导入了一个声音提示。为判断输赢,每次完成一个翻转之后更新双方的得分计数器(CDigitalPlayer m_CountW,m_CountB)。并调用IsEnd()函数来判断输赢。(2) 在人-机对战中,可否落棋的判断、翻转的判断及输赢的判断与人-人对战中基本相同。不同的是我们要在人机对战中通过设Easy,normal,experd,三个等级。分别用不同数量的函数来判断计算机所落得棋子:a当所选为Easy时,计算在各可能空格中所能翻转的对方棋子个数,以最大数为准,b当所选择normal时,程序要将为每个可能的落子点打分(GiveMark(int flag),打分的原理是:当在该点落子后,计算棋盘上我方每个子的加权分数,并累加起来作为该可能落子点的总分数,然后选择得分最高的可能落子点落子。计算加权分数是根据该子所在的位置给的,打分策略如下图: 200-501001010100-50200-50-100-10-10-10-10-100-50100-1010022100-1010010-102222-101010-102222-1010100-1010022100-10100-50-100-10-10-10-10-100-50200-501001010100-50200当所设定的难度为Expert时,计算机不仅要计算出所有棋子的加权和A1,还要计算出对方所有棋子的加权和A2,取A1/A2的最大值的可能落子点为计算机下棋处。为增加程序的可玩性,我们要实现悔棋功能。悔棋通过一个堆栈CUndo来实现,也就是将每一步的棋盘状态及显示状态压入堆栈(调用duplicate()。如果要悔棋,从堆栈中弹出上一次的棋盘状态kernel88,和待下子颜色m_ChessFlag。主要通过4个类来实现程序,每个类的作用为:a实现下棋的主对话框类class CB_WDlg : public CDialogb实现悔棋的堆栈类 class CUndoc实现计时器与计数器class CdigitalPlayer(从别人开发的扫雷程序中移植的)d实现棋盘显示的类class Cgrid(里面保存了每一格的位置,尺寸和位图数据。三、 工程进度本次作业历时近十周时间,总的说起来可以分为三个部分:3.1 前期准备部分(57周)主要完成方案的讨论、资料的收集、数据图算法等前期工作,编写报告中需求分析的一部分和总体方案的一部分及项目任务书。5周:选定题名,进行方案的讨论。 6周:收集资料,写出需求分析中的开发背景部分。7周:商定算法,将软件总体分块,写出项目任务书。3.2中期实现功能部分(813周)主要完成预先设想的基本功能和附加功能,完成报告中的技术路线和需求分析的剩余部分,完成调试报告中的单功能调适。 8周:开始软件编写,完成棋盘的设计部分。 9周:完成下棋部分程序的编写,测试棋盘设计部分。 10周:完成计时器部分和悔棋部分程序的编写,测试下棋部分程序。 11周:完成人机对弈部分程序的编写,测试计时器部分和悔棋部分。12周:完成附加功能,测试人机对弈部分情况。13周:完善各项功能,测试附加功能。3.3后期总结完善部分(1415周)总体功能的调试改进,完成大报告。14周:总体功能调试,优化软件。15周:完成个人总结和其它报告剩余部分。四、 测试报告4.1 第九周:测试棋谱 测试人: 陈聪 测试内容:通过VC语言,我们编写了基于对话框的游戏界面。我们将测试它的最基本面貌,希望其是符合我们要求的界面模式! 测试过程:运行程序以后,弹出了棋局的对话框,整体棋局呈现草绿色,棋局右边和上边都有一些空白的区域,这是我们为将来实现其他附加功能预留的地方。但是测试过程中我们始终发现一个问题,棋格的位图没有按照我们的设想正确放置,出现了跃出棋盘的怪现象! 问题解决:通过反复推敲程序相关部分,我们觉得可能是算法有疏漏,于是修改了一下算法。我们将每个棋格的位图封装了起来,将其位置作为Cgird的成员数据。再运行程序,问题就不再出现了。反复运行程序再也没有出现异常情况!4.2 第十周:基本功能测试 测试人:陈聪 测试内容:程序的基本框架已经编好了,希望能按我们的预期目标能实现供两人对弈功能! 测试过程:将程序编译、链接、运行后,弹出棋局的对话框,然后开始下棋,我们一步一步观察了每步落子后棋局上黑白棋子的变化过程,均与我们预期的变化过程一样,我们非常欣喜,这说明我们设计下棋程序时的算法准确无误!4.3 第十一周:测试计时器,悔棋功能 测试人:陈聪 测试内容:观察计时器是否能正确的记录双方走子的时间;是否能在限制时间到达后判定哪方胜出;测试悔棋功能是否真正实现。 测试过程:首先我们测试了计时器,但是令人失望的是两个计时器都是一刻不停地计时根本不管对应的那方在不在下棋!经过反复运行程序,结果都是一样!然后计时器到了规定的300秒限制时间以后,棋局自动结束,也没有弹出任何对话框显示谁胜谁负!最后我们测试了悔棋功能,反复的测试,此功能运行良好,能够一步一步悔棋,直到无子可悔,而且通过记录观察,每步的悔棋过程均准确无误! 问题解决:针对计时器的种种问题,我们真是一点解决它的办法都没有,以前实在没有接触过这种类型的计时器,查阅相关资料和书籍也没有得到很好的解决办法!无奈之下,我们在一些小游戏中找是否有类似的计时器,真没想到,就在我们平时经常玩的扫雷游戏中出现了类似的计时器,我们真是欣喜若狂,立刻找来扫雷游戏的源程序,参考了其相关的计时器程序部分,终于解决了我们的计时器问题!再运行程序,计时器能按照我们的要求,分别对双方计时,哪方的计时到达规定的限制时间还没有下完的话,判定该方为输!4.4 第十二周:测试人机对弈 测试人:陈聪 测试内容:我们在双人对弈的基础上又增加了人机对弈的功能,人机对弈时,电脑将按照我们给定的算法,找到最优的落子点。 测试过程:运行可执行文件以后,我们在游戏菜单里选择了“人机对弈”,在棋力里面设置为“初级”。游戏开始后,将由黑方也就是人先下。我们和电脑下了N盘棋以后发现,程序很好地实现了人机对弈功能,但是由于电脑处理速度实在太快,基本上在人下完以后立刻就落子了,棋局也立刻发生变化,所以很难判断电脑究竟将棋子下到了哪个位置。联想到我们玩过的很多和电脑对弈的棋类游戏,均是这种情况,我们觉得这是正常现象,一个说明电脑处理速度确实很快,另一个也说明我们给电脑设计的走子算法也是非常正确的!观察计时器的显示,黑方的计时器正常运行,电脑的计时器一直显示为0,这个就更能说明电脑的处理速度之快了!而绝不是程序有什么问题!4.5第十三周:测试其他的附加功能 测试人:曹爱华 测试内容:我们对提示音,记录双方棋盘上的棋子数功能进行了测试 测试过程:我们运行可执行文件以后,开始游戏。提示音分两种,一种是落子成功提示音,一种为落子失败提示音。结果提示音均能够在我们落子之时响起,并且完全符合我们的预期要求!右下方分别显示的黑白双方棋子数,能很好地执行它的功能,也没有发现任何错误!总体来说,我们对这部分功能相当满意,因此测试过程进行的也比较快!4.6第十四,十五周:总体测试测试人:陈旭测试内容:我们将在总体上对程序的运行效果和运行环境进行测试,以完善所有功能,达到软件的最优化!测试过程:a.首先我们测试了软件对运行环境的要求,我们先在Windows 98操作系统中运行了一遍,结果并无异常情况出现;随后我们在CPU只有1GHz频率的硬件系统中运行,也并未发现任何问题!我们基本上可以得出结论,我们的软件在一般的软、硬件环境下都能正常稳定地运行,对机子的配置基本没有什么要求,适合于广大的电脑拥有者使用! b.我们重新回到自己的环境下运行,对各个功能再进行调试。但是真是意外,还是出现了一个比较严重的问题!我们在菜单里选择“帮助”,电脑竟毫无反映。本来它是为了实现弹出对话框,帮助大家了解黑白棋的规则而制作的。我们立刻找来参考资料,研究怎么在基于对话框设计的窗口中再实现调用对话框功能,但是均没有得到满意的答案!同时我们还积极在兵马俑计算机程序设计版上发帖寻求帮助,积极向有关老师请教,但是最后比较无奈的是,对于这个功能大家都没有尝试用过,我们的这个功能因此也未能得到解决!这是我们这个软件中存在的唯一一个让我们小组成员比较遗憾的地方,但是我觉得什么东西都没有完美的,保持一点残缺更能体现出它的珍贵来,因为它使我们明白了以后还有很多东西需要我们去探索、去追求!我们小组成员也一致认为,这个得不到解决的问题不仅不会影响我们软件的质量,反而能成为我们今后提高的起点,也说明我们的软件还有很大的提升空间!五、 个人小结在本软件的开发中,还是有不少地方是不太满意的,首先我通过单纯的VC+语言来实现功能。虽然VC+的强大功能足以应付这种软件的开发要求了,但是由于控件的缺乏,语法的繁琐,在实现很多功能的实现中花费了不少力气。但是由于知识水平的缺乏,无法使用Delphi,flash等更简便的手段来实现功能,希望以后可以弥补这一点。其次,缺乏完成大工程的经验,没有建立一个有效可行的工作计划。在工作中时而通宵奋战,时而停顿不前,既浪费了宝贵的时间,也耗费了大量精力,实在得不偿失。但值得注意的是,在软件的开发中,我也学到了很多书本上学不到的经验。首先,我使用了别人开发的计数器控件,虽然开始很不习惯,但是上手之后就深深的体会到模块化开发和面向对象语言的方便与高效。其次,这次开发中我使用了很多以前没接触过的函数。除了上网学习资料(特别是等网站)外,使用msdn成了不二法门。熟练的使用msdn,相信对我以后的工作会有很大的益处。 我觉得这次软件基础的大作业很好地考察了每个学生的知识水平,每个人都发挥了个人最佳的状态。可以说是实践素质教育的一种代表,是现代教育最能启发学生创造性的一种模式。虽然这种形式比普通的卷面考试要难,但是却能够充分调动每个人的积极性去学习自己尚未接触的知识和运用自己已经学过的知识。实验中,我们小组成员之间配合默契,共同商讨问题,使我们在碰到一个一个的问题后,能快速找到相关的答案。难能可贵的是,在软件制作最紧张的时候,大家都义无反顾地放弃了一点休息时间,和团队一起坚持奋斗!所以通过这次实验的合作,我们小组成员之间更加增进了了解,增进了团结! 总的说来,我们这次做的大作业是比较成功的,值得我引以为豪!陈 旭(02041104)这次软件基础的大作业,是我第一次在一个团队中和大家一起合作,为了这个软件的成型我们经历了好几个不眠之夜!可以说,这是我们群体智慧的结晶,是我们精诚合作的产物!开发过程中,我们遇到了种种困难,但是我们从没有放弃过,我们不断地去思考、去尝试、去寻找答案,问题终于一个一个地得到解决,我们的软件质量也因此不断地提高。虽然,最后我们的软件还有一点点的小遗憾,但是已不足以影响我们的成就感了,那点遗憾,只能说明目前我们掌握的知识还不够,也许正好能够成为我们以后提高的起点! 我觉得这次软件基础的大作业很好地考察了每个学生的知识水平,每个人都发挥了个人最佳的状态。可以说是实践素质教育的一种代表,是现代教育最能启发学生创造性的一种模式。虽然这种形式比普通的卷面考试要难,但是却能够充分调动每个人的积极性去学习自己尚未接触的知识和运用自己已经学过的知识。实验中,我们小组成员之间配合默契,共同商讨问题,使我们在碰到一个一个的问题后,能快速找到相关的答案。难能可贵的是,在软件制作最紧张的时候,大家都义无反顾地放弃了一点休息时间,和团队一起坚持奋斗!所以通过这次实验的合作,我们小组成员之间更加增进了了解,增进了团结! 但是我觉得这次实验有些地方还是有欠缺的,比如说开发过程中,仅仅通过单纯的VC+语言来实现功能。虽然VC+的强大功能足以应付这种软件的开发要求了,但是我觉得真正一个好的软件应该是通过多种语言配合开发出来的,这样才能达到各方面最优的效果。所以我觉得这是我们以后做类似实验需要改进的地方。还有就是遇到真正难懂的问题以后,找不到好的解决方法,而只能选择其他比较好的办法来处理,这说明我们掌握的知识水平还有限,需要我们去不断地学习来弥补知识上地漏洞。 总的说来,我们这次做的大作业是比较成功的,值得我引以为豪! 曹爱华(02041102)可以说,这次是我第二次完成一个系统的设计,(第一次为今年9月参加电子设计大赛),但可以说这是我第一次完成一个纯软件系统的设计。通过本次黑白棋程序的设计,我想我学到了很多东西。我主要是负责大报告的设计和编写,同时也编写一部分程序。编程的确是非常辛苦,虽然VC+我们早已学过,但是真正的编写一个可以运行的程序,这还是第一次。我的VC+学的不是很好,编程时遇到了很多的困难,好在我们组的陈旭同学不辞辛苦的帮助我调试程序,我们参考了很多的资料,像我们软件基础大作业中的优秀作品,网上的有关VC+的一些实用的编程技巧,还有一些经典的算法,同时,我们也通过网络向编程高手请教我们在编程中的一些问题。善于利用已有的资源,是我在本次大作业中学到得很宝贵的经验,对于网络,我们不只要用它来实现低级的聊天、看电影、打游戏等功能,我们还要实现获取有用的信息、学习别人先进的方法、查阅相关的电子资料等功能,充分发挥它的作用。我们这次的作品,是一个五人小组共同完成的,通过这次合作,我也有很大的收获。虽然是一个小组,但每个人有不同的看问题的方法,我们在做这个软件的时候,大家也曾有过意见的分歧,我们也曾因为预期的功能没有实现而互相指责,也曾为有一点小小的进步而欣喜若狂。一路风风雨雨,坎坎坷坷,我们毕竟是基本完成了预期的功能,努力没有白费,心里特别的充实,这就是创造的快乐,也是合作的快乐。我还编写了大作业的文档,由于自身能力的有限,我虽然竭尽全力,但总的感觉还是不能让我满意,不过,我也从中学到了一些东西:比如报告的条理性、整体性、可读性,由于程序比较复杂,我们只从总体上给出了几张各个分块之间的关系图,这是我不是很满意的地方。总的说来,这次作业中我锻炼了自己的能力,也培养了团队合作的精神,感谢我的队友!感谢老师!感谢生活! 李 宁(02041111)在这次的程序实现中,我负责程序的算法及部分程序的编写。虽然我的工作在整个程序中只是一小部分,但我已经深刻的感觉到,编写一个程序,一个并不复杂的程序,就需要如此多的知识和如此大的耐心。可想而知,做一个程序员是多么的不易,我的编程水平离一个程序员的要求是多么的遥远。但是,那种畅快的成就感只有在披荆斩棘后才能感受到。我相信,通过这次锻炼,我已经向一个真正的程序编者,迈出了坚实的一步。程序算法的编写,是在最初阶段开始的。当时,我已在课堂上看过上次的得奖作品吉青山棋。从美观和功能实现上来讲,我就是把吉青山棋作为超越对象的。在吉青山棋中,人机对弈的难度是通过调节棋盘大小来实现的,我个人认为,这只是增加了下棋时间与复杂度,并没有提高计算机下棋水平。所以在我的算法中,难度的实现是通过不同的函数控制来实现的,起到了不错的效果。当然,实现的过程中也出现了不少问题,比如说中难度是要考虑棋盘各个空格的加权数,虽然我对黑白棋还算了解,但具体的加权数还需程序完成后不断调试更改。为了达到更高水平,我一开始就引入了悔棋功能,并给出了堆栈实现的算法,因为以前没有类似的经验,我们几个都没有把握用函数把它实现出来,在交计划书时我还是有点压力的。虽然悔棋实现了,但还是有一些考虑到的功能没能实现,所以算法也经过了几次改动。有时候,愿望与现实之间还是有一定差距的。虽然分给我的程序块是我比较熟悉的,但因为VC已经两年不用,生疏了许多,许多函数已经忘记,连格式也出错不少。所以要学好一种编程软件,需要不断地练习。还好,在这次的大作业完成中,我不仅学到了许多编程知识,而且锻炼了耐心毅力,培养了合作精神,可谓受益匪浅。 厉 达(02041112) 这次软件基础的大作业是我迄今为止所做过的最大的一个项目,充分锻炼了我们的各项能力。首先,它巩固了我们学过的VC+语言知识,锻炼了我们解决实际问题的能力;其次,它提高了我们的团队合作精神,小组每个人都各司其职,分别完成项目的一部分,同时,在项目进程中,遇到了很多各种各样的问题,但是大家紧密合作,共同攻关,终于克服了一个又一个困难,在最紧张的时候,大家甚至主动放弃休息时间,加班加点,使其能按期完成,这种团队合作精神对于我们以后的学习和工作是大有裨益的;最后,它使我们体会到了学以致用的快感,提高了我们解决实际问题的信心和能力,并使我们对运用所学知识解决实际问题产生的浓厚的兴趣,并深刻认识到知识的重要性。诚然,由于我们自身的知识能力水平和项目时间有限,做出的项目有这样那样的缺点和不足,但对于我们来说,已经很满足了,因为这毕竟是我们的第一个合作劳动成果。我相信,随着我们自身知识能力水平提高,我们以后的项目会做的越来越好!陈 聪(02041103)六、附录本程序在实现过程中参考的书籍如下:1visual c+于面向对象程序设计教程刘路放编著,高等教育出版社2000年七月版。2C语言设计谭浩强编,清华大学出版社1999年发行。3大学Visual C+程序设计案例教程罗建军,崔舒宁,杨琦编著。高等教育出版社2004年版。特别感谢赵英良老师在程序实现过程中的帮助与指导!附录 二:以下时详细算法中提到的主要函数,其他函数在程序中。(1) 实现棋盘的类CGrid class CGrid public:CBitmap* GetBmp(int kernel);bool SetPoint(int x,int y,int line,int row);CPoint point;CBitmap m_bCan;CBitmap m_bEmpty;CBitmap m_bBlackNow;CBitmap m_bBlack;CBitmap m_bWhiteNow;CBitmap m_bWhite;int GridSize;CGrid();virtual CGrid();CGrid:CGrid()m_bBlack.LoadBitmap(IDB_BLACK);m_bBlackNow.LoadBitmap(IDB_BLACKNOW);m_bWhite.LoadBitmap(IDB_WHITE);m_bWhiteNow.LoadBitmap(IDB_WHITENOW);m_bEmpty.LoadBitmap(IDB_EMPTY);m_bCan.LoadBitmap(IDB_CAN);GridSize = 48;得到位图及位置函数bool CGrid:SetPoint(int x,int y,int line,int row)int n=line;int m=row;point = CPoint(x+n*GridSize,y+m*GridSize);return 1;CBitmap* CGrid:GetBmp(int kernel)switch(kernel)case 0:return &m_bEmpty;case 1:return &m_bBlack;case 2:return &m_bBlackNow;case 3:return &m_bWhite;case 4:return &m_bWhiteNow;case 5:return &m_bCan;default:return 0;(2)主函数类CDialog1翻转函数B2Wint CB_WDlg:B2W(int x1, int y1, int flag)int yes;/if yes =0 then there is no position to change/if yes=1 then there is any position to changeint temp=flag;int x=0,y=0,i=0,j=0;int result=0;/result=0 indicate that x1,y1 is the wrong position /result=1 indicate that they are legal positionif(x1=8 | y1=8)return 0;/横向-当前左x=x1;/y=0;yes=0;for(i=y1-1;i=0;i-)if(kernelxi=0)yes=0;break;else if(kernelxi=temp)break;elseyes=1;if(i!=0-1) & (yes=1)for(i+;iy1;i+)kernelxi=temp;result=
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 全国市级联考湖南省邵阳市2026届中考一模语文试题含解析
- 新能源电池档案管理制度
- 管理创新新视野
- 心血管疾病患者的居家护理查房
- 高危药物输注的安全管理策略
- 输液满溢风险监测与防范
- 导尿管护理中的感染控制策略
- 静脉血样采集合规操作指南
- 静脉留置针使用的安全管理方法
- 事业单位考试公共基础知识考试试题(附答案)
- 2025时政试题及答案(100题)
- GB/T 45365-2025纺织品保湿效果的测定蒸发热板测微气候法
- 2025江苏科技大学辅导员考试题库
- 2025年-江苏省安全员《A证》考试题库及答案
- 医院人力资源部门年终总结
- 急流救援IRB培训一(水域救援基础理论、艇操、船外机安装)
- 2025年宁波农商发展集团限公司招聘高频重点提升(共500题)附带答案详解
- 《眼内炎患者的疾病》课件
- 《石油和化工行业产品碳足迹核算指南》
- 临时厕所施工方案
- 2024-2030年中国独立学院行业转型挑战分析发展规划研究报告
评论
0/150
提交评论