已阅读5页,还剩3页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
黑白棋游戏摘 要 本课题设计一个黑白棋游戏系统,游戏通过相互翻转对方的棋子,最后以棋盘上谁的棋子多来判断胜负。它的游戏规则简单上手很容易,但是它变化又非常复杂。我选择这个题目做设计,一方面是巩固和提高以前所学C语言知识,另一方面是因为这可能是我第一次完成一个软件的系统设计,选择一个中等难度且相对成熟的软件来设计既易于实现又留有一定的上升空间,符合我的实际情况。我所设计的这种黑白棋游戏有几个特点:程序短小精悍简洁明了,游戏界面美观,功能丰富容易操作,趣味性强。关键词: 程序设计;C语言;黑白棋;两人对弈The black and white chess (Department of electronic and Information Engineering Ankang university)Directed by Chen ShoumanAbstract: This topic is to design a Reversi game system. The game flips through each others game pieces. And last the people who has more chess pieces than the other, will win. The game rules are simple and easy to use. But It changes very complex. I choose this topic to do the design, one is the consolidation and improvement of previously learned C language knowledge, on the other hand, is because it is my first time to complete a software system design. Selection of a medium difficulty and relatively mature software design is easy to implement and have certain ascendant space. Its fit in with my actual situation. I designed this game has several characteristics: Dappering procedures concise. The game interface aesthetics. The function is rich and easy to operate.Much interesting.Key word: Program design. C language. The black and white chess. Chess1 引 言我国是棋文化的发祥地之一,上古的尧时代围棋就在我国诞生了,在随后的几千年长河里,我国人民不断以自己的聪明才智创造出深受人们喜爱的棋类游戏,像中国象棋、五子棋、军棋等等一直是在民间很流行的棋类项目。同时国外的棋类游戏也流传到中国,比如国际象棋、跳棋等,逐渐在国内盛行。可以说棋类游戏一直是我国人民喜闻乐见的一种休闲方式,由于棋类游戏都是比较注重智力策略的,所以从中也可以折射出我国人民的智慧。1.1 设计目的在程序设计中,我们将主要通过C语言,运用面向对象的程序设计方法1,开发此款黑白棋游戏。力争使程序短小精悍简洁明了,游戏界面色彩丰富给人以良好的视觉冲击,并且容易操作,功能丰富趣味性强,能供两人对弈。 1.2 运行环境本游戏短小精悍,而且对电脑配置的要求均不高,目前几乎所有的PC机均可运行该游戏。但是为了能让大家更好地体验该款游戏,我们给出如下的最低配置:最低配置:CPU :1GHz; 内存:32 M; 硬盘:4 G;系统:Windows 95 同时结合我们开发该游戏的环境,我们强烈推荐用户使用如下的配置:最佳配置:CPU :2GHz; 内存:256M; 硬盘:80G;系统:Windows XP1.3 游戏说明启动游戏后直接进入棋盘界面,我们就可以开始游戏了,当我们开始下棋时,我们有两个计数器分别对双方棋子数进行记录,以作为判定输赢的依据,游戏中包括的控制有:(1)吃子:以方格为直线或者斜线的方向,以一方对照棋子和即将落下棋子之间(此两子之间必须没有空格且全部为对方棋子)的所有对方棋子被吃掉,被吃掉的对方棋子变为自己一方的棋子。(2)下子:必须在可以吃子的位置处并且该位置为空格时可以落下己方的棋子,如果不能下子,棋子无法显示在棋盘上。(3)赢棋:根据计数器记录的双方棋子数判定棋子数多的一方取得本次游戏的胜利,屏幕上面会自动出现对话框提示。2 系统设计2.1 总体方案棋盘设计为88格,初始状态在棋盘中央交叉排放黑白棋子各两枚,为统计棋子个数,有一个棋子计一分,白棋先走。每个棋手下棋时,摆子的位置必须是以自己的棋子能包围住对方一个或多个棋子,被包围的对方棋子将变成自己的棋子。包围的方向可以是上下左右以及左右斜线共8个方向,只要能连成一条线即可。当轮到一个棋手摆子,而他没有可以包围对方棋子的位置时。他必须停步让对方走棋,直到他可以走为止。当棋盘上有一方的棋子为0或下满64格,游戏结束时棋子少者输。我们的程序从总体上说分为三个块,希望通过四个类来解决,分别为:(1)位图的导入与棋盘的生成;(2)记录双方对弈时间的计时器与记录双方子数的计数器;(3)选择人机对战和人人对战的函数及控制堆栈难度的主函数。游戏的简单流程图如图2.1。图2.1 游戏简单流程图2.2 详细设计这是一个基于对话框的C语言的程序2,程序的界面是一个二维平面图,数据的表示可用二维数组,数组两个下标可以表示棋盘上的位置,数组元素的值代表棋格中的状态,共有三种情况,分别是空格、黑棋和白棋。这样给数组元素的取值设定为0、1、2,其中0代表空格,1代表白色棋子,2代表黑色棋子,这样程序的主要工作是接收棋手按键操作,一旦接收到回车键说明棋手摆子。先判定是不是有效位置,也就是能不能包围住对方棋子,如果能便对棋子所在的位置往上下、左右、左上、左下、右上,右下8个方向寻找被包围住的所有棋子(必须是连续的,中间不能有空格),将这些被包围住的对方棋子都变成自己的棋子,然后对当前棋盘中的黑白棋个数进行统计并输出结果。如果没有这样的位置可以落子,则停步让对方走棋,重复上述步骤,直到游戏结束,如果想提前终止游戏,可以按Esc键。在本程序中共需导入三个方格大小完全相同的位图:(1)底色为蓝色的空方格;(2)已下入黑棋的方格;(3)已下入白棋的方格。初始化中的一些按键的控制信息在内存中的定义为:#include graphics.h /*图形系统头文件*/#define LEFT 0x4b00 /*光标左键值*/#define RIGHT 0x4d00 /*光标右键值*/#define DOWN 0x5000 /*光标下键值*/#define UP 0x4800 /*光标上键值*/#define ESC 0x011b /* ESC键值*/#define ENTER 0x1c0d /* 回车键值*/我们定义Kerne88的数组来储存这些方格的情况,用CGrid类封装了每一格的位置、尺寸和贴图,当为0时贴空方格,函数时为1时贴黑棋,为3时贴白棋,每次OnDraw()函数被调用时,转函数在下棋过程中通过改变Kernel的键值来显示不同位图以符合当前的下棋状态,在程序初始化后在棋盘上先放置四个棋子以示开始: a33=a44=1;/*初始两个黑棋*/a34=a43=2;/*初始两个白棋*/在人-人对战模式时,每次发生LeftButtomDown事件后都要判断鼠标当时所在空格中是否可以下棋。判断的内容可以分为:(1)比赛是否开始(m_GameFlag1?)否则返回;(2)方格内是否空,空则可能,否则不能;(3)空方格相邻的八个方格内是否有对方棋子,若有则分别判断空格与对方棋子所在行列或斜线内有无己方棋子,若有且与对方棋子相邻,则棋子可下。若上述三个判断均成立,则将棋子放入空格中,并将相邻所夹的对方棋子翻转为己方棋子(B2W(),轮对手下棋。当上述三个条件有一个不满足时不能落棋。当格子已经占满或一方棋子为0判断胜负,满足:if(score1+score2)=64|score1=0|score2=0)并调用IsEnd()函数来判断输赢,最后通过函数输出比赛结果:void playWin()/*输出最后的胜利者结果*/settextstyle(0,0,4); setcolor(12); if(score2score1)/*开始判断最后的结果*/ outtextxy(100,50,black win!); else if(score2score1) outtextxy(100,50,white win!); else outtextxy(60,50,you all win!);3 系统测试3.1 测试棋盘界面测试过程:运行程序以后,弹出了棋局的对话框,整体棋局呈现蓝色,棋局右边是我们实现黑白棋记录分数的地方。但是测试过程中我始终发现一个问题,棋格的位图没有按照我们的设想正确放置,出现了跃出棋盘的怪现象。问题解决:通过反复推敲程序相关部分,我觉得可能是算法有疏漏,于是修改了一下算法。我们将每个棋格的位图封装了起来,将其位置作为Cgird的成员数据3。再运行程序,问题就不再出现了,反复运行程序再也没有出现异常情况。3.2 测试两人对弈测试过程:将程序编译、链接、运行后,弹出棋局的对话框,然后开始下棋,我一步一步观察了每步落子后棋局上黑白棋子的变化过程,均与我预期的变化过程一样,我非常欣喜,这说明我们设计下棋程序时的算法准确无误,但是在最后的白棋子多与黑棋子的情况下,系统竟然判了黑棋获胜。问题解决:针对判错的问题,查阅相关资料和书籍也没有得到很好的解决办法!无奈之下,参考了其相关的程序部分4,终于解决了我的判错问题,再运行程序,结果能按照我的要求,分别对双方记分,并正确判输赢。测试内容:程序的基本框架已经可以运行了,希望能按我的预期目标能实现两人对弈功能并可以判断平局的结果!测试过程:将程序编译、链接、运行后,弹出棋局的对话框,然后开始下棋,我一步一步观察了每步落子后棋局上黑白棋子的变化过程,这说明我们设计下棋程序时的算法准确无误。在最后的黑棋子和白棋子相同的情况下,系统判两方同时获胜。其平局游戏结束界面。3.3 测试运行环境测试内容:我们将在总体上对程序的运行效果和运行环境进行测试,以完善所有功能,达到软件的最优化。测试过程:(1)首先我们测试了软件对运行环境的要求,我先在Windows 95操作系统中运行了一遍,结果并无异常情况出现;随后我们在CPU只有1GHz频率的硬件系统中运行,也并未发现任何问题!我们基本上可以得出结论,我们的软件在一般的软、硬件环境下都能正常稳定地运行,对机子的配置基本没有什么要求,适合于广大的电脑拥有者使用!(2)重新回到自己的环境下运行,对各个功能再进行调试。但是真是意外,还是出现了一个比较严重的问题,棋子竟然不能落棋,电脑竟毫无反映。我立刻找来参考资料,但是均没有得到满意的答案!我还积极在兵马俑计算机程序设计版上发帖寻求帮助,积极向有关老师请教,但是最后比较无奈的是,对于这个功能大家都没有尝试用过,我们的这个功能因此也未能得到解决,最后在同学的帮助下,完成了对时序的修改,解决了问题。4 结束语在本软件的开发中,还是有不少地方是不太满意的,首先我通过单纯的C语言来实现功能。虽然C的强大功能足以应付这种软件的开发要求了,但是由于控件的缺乏,语法的繁琐,在实现很多功能的实现中花费了不少力气。但是由于知识水平的缺乏,无法使用Flash等更简便的手段来实现功能,希望以后可以弥补这一点,其次缺乏完成大工程的经验,没有建立一个有效可行的工作计划。在工作中时而通宵奋战,时而停顿不前,既浪费
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 劳动技能提升与职业培训教程
- IT运维岗位职业发展规划
- Kanban看板管理方法与实践应用
- 公路运输应急响应员培训计划
- 场地协议合同范本
- 中介医院聘用合同范本
- 业务流程优化项目实施方案
- 列车长岗位技能培训计划
- 人力资源优化配置方案
- 人力资源总监助理员工关系管理方案
- 电子厂安全生产知识培训课件
- 八年级语文生字词全面复习资料
- 韩语教学课件
- 专升本英语必背核心词汇
- 患者身份识别管理标准WST840-2025学习解读课件
- PE管道工程质量监理细则与验收标准
- 口袋妖怪绿宝石-图文攻略【一周目 二周目】
- DB37∕T 4328-2021 建筑消防设施维修保养技术规程
- 2025昆仑银行笔试题目及答案
- 污水处理厂运营管理及提升方案
- 房地产开发生涯人物访谈报告范文
评论
0/150
提交评论