《课程设计说明书----五子棋(C++).doc》由会员分享,可在线阅读,更多相关《课程设计说明书----五子棋(C++).doc(23页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、课 程 设 计 说 明 书五子棋游戏The Game of Gobang学院名称: 专业班级: 学生姓名: 学号: 指导教师姓名: 指导教师职称: 2011年 7 月五子棋游戏摘要: 此课程设计的目的是为了达到熟练掌握C+语言的基本知识和C+调试技能;基本掌握面向对象程序设计的基本思路和方法;能够利用所学的基本知识和技能,解决简单的面向对象程序设计问题;培养综合利用C语言进行程序设计的能力,主要是培养利用系统提供的标准图形函数进行创新设计。该游戏软件在Windows系统为玩家提供传统五子棋游戏的基本功能,在这简单的五子棋中,玩家通过鼠标进行两个人的游戏。游戏的主战场为15行15列的棋盘,初始状
2、态棋盘上无落子,进入游戏后,按照棋盘下的提示开局,然后轮流落子,一旦有一方的棋子在某一方向上构成连续的五个棋子,则该方胜利,游戏结束,如果有输赢,则输出谁胜,否则,输出平局的信息框。游戏还有悔棋和重新开始的的功能。关键词: 五子棋; 视窗操作系统; 悔棋; 双人游戏。The Game of GobangAbstract: This course is designed in order to master the basic knowledge of the c + + language testing skills; and c + + Basic grasp of object orien
3、ted programming basic train of thought and method; Can use of my knowledge of the basic knowledge and skills, solvesimple object-oriented program design problem; Using c + + language training comprehend sive program design ability, is mainly use the system to provide the training of standard graphic
4、s functions of innovation design. This game software on Windows system for players with traditional renju game, the basic function of in this simple renju players through the mouse, two personal game. The main battlefield games for line 15 to 15 listed in the board. The game is over, if a loser, the
5、 output who wins, otherwise, the output of the draw information box.Keywords: Gobang; Windows System; Takeback; the game of Two people playing目 录课程设计任务书4一、课程设计题目:五子棋游戏4二、目的与要求:41、目的:42、基本要求:43、创新要求:44、写出设计说明书4三、设计方法和基本原理:4四、设计中涉及到的重要内容:4五、程序设计和调试:5六、答辩与评分标准:5引言6第一章 需求分析61.1系统概述61.1.1概述61.2系统运行环境61.2
6、.1运行环境61.3功能需求描述71.3.1功能需求7第二章 总体设计72.1开发与设计的总体思想72.1.1总体设计思路72.1.2屏幕的组成82.1.3形状的组成82.1.4形状的统一 8第三章 概要设计93.1系统流程图93.2 软件功能模块103.3 系统功能模块 10第四章 详细设计114.1.界面的设计114.1.1总体界面设计 114.1.2 界面棋子的设计 114.2显示界面的准备 134.2.1在窗体类中添加存放黑白棋两维数组和背景棋盘、黑棋、白棋位图对象 134.2.2在窗体构造函数中初始化wb,装入棋盘、黑棋、白棋位图 134.3显示棋盘和棋子代码134.4轮流下子代码1
7、44.5判断输赢154.5.1判断是否白棋胜代码 154.5.2判断是否黑棋胜代码 164.5.3判断是否平局代码 174.6悔棋184.7重新开始184.8回放功能19第五章 测试分析20结论和心得体会20致谢21参考文献22课程设计任务书一、课程设计题目:五子棋游戏二、目的与要求:1、目的:(1)要求学生达到熟练掌握C+语言的基本知识和C+调试技能;(2)基本掌握面向对象程序设计的基本思路和方法;(3)能够利用所学的基本知识和技能,解决简单的面向对象程序设计问题。(4)培养学生综合利用C语言进行程序设计的能力,主要是培养学生利用系统提供的标准图形函数进行创新设计。2、基本要求:(1)在开始
8、编写程序以前,要完成对系统的分析,画出程序的流程框图。(2)要求用C+类的思想来完成程序的设计。(3)要求的程序中至少要定义两个类(例如:坐标position类,棋子chess类等),类中要有多个属性和方法。(4)完成的程序界面要美观,能够完成五子棋的基本游戏功能(两人对战)。3、创新要求:在基本要求达到后,进行创新设计,完善与增加游戏的功能,例如悔棋功能。4、写出设计说明书按照设计过程写出设计说明书。三、设计方法和基本原理:1、创建棋盘大小(可任意),并且要保存棋盘上各个点的位置;2、创建棋子类及其属性和方法;3、从盘键分别获取两个用户的输入,根据用户的身份及输入的位置,调用棋子类的相应方法
9、,完成棋子的走动;4、输赢的判断;5、游戏结束。四、设计中涉及到的重要内容:1、对话框应用程序的编写方法及其相关函数;2、绘图工具的使用方法;五、程序设计和调试:六、答辩与评分标准:1、完成基本功能:40分;2、设计报告及使用说明书:30分;3、设置错误或者按照要求改变结果:15分;4、回答问题:15分。引言随着经济时代的发展,人们的精神压力越来越大,精神上得不到应有的放松,精神生活得不到极大的满足,随着计算机技术的飞速发展,计算机已逐渐成为人们办公不可或缺的工具,因此及时的开发一些应用于计算机上的小型游戏软件,以供人们在办公的闲暇时间得到充分的休闲娱乐。而棋类因为其兼具动脑并且娱乐的双重功效
10、,并且十分符合现代式生活,因此已经得到越来越多人的欢迎,为此我们开发一个简单的五子棋游戏,开发此五子棋游戏软件的目的,主要是供办公人员与同事一起休闲娱乐,增进友谊、减轻疲劳,以提高工作效率,创造更多的社会财富,造福人类。查阅有关程序设计的案例资料,进一步理解程序设计模块化的思想,并利用此思想,根据对程序设计课程的学习,编写一个简单的游戏软件系统。通过本设计可以加深理解利用程序设计思想开发一个系统的整个流程,提高分析问题、解决问题和实际动手的能力。在下面的各章中我们将以开发一个五子棋游戏为例,谈谈其开发过程和所涉及到的问题及解决方法。第一章 需求分析1.1系统概述1.1.1概述:本程序是一款棋类
11、益智游戏程序,名为五子棋游戏,是采用C语言编写的可在WINDOWS 系统下运行的娱乐游戏平台。该程序面向广大棋类游戏的爱好者,能够提供方便,实现基本智能控制的游戏环境。棋盘由若干网格构成,初始状态棋盘上无落子,玩家可以通过鼠标在棋盘的相应位置下子,一方为白色,另一方为黑色,先下的为黑子。游戏过程中,一旦有一方的棋子在某一方向上先构成连续的五个棋子,不论横、竖或斜,就会在屏幕上显示是谁赢了比赛。1.2系统运行环境1.2.1运行环境(1)硬件环境。本系统适用于那种Inter386以上计算机,内存容量为128M,应配备键盘、鼠标、显示器等外部设备。(2)软件环境。本系统的设计采用Visual C+6
12、.0编写。在Windows XP SP2环境下测试通过。(3) 只要计算机具有Visual C+6.0, 本游戏软件在Windows平台下都可以运行。1.3功能需求描述1.3.1功能需求五子棋是一种大众喜爱的游戏,其规则简单,变化多端,非常富有趣味性何消遣性,是一种两人对弈的纯策略型棋类游戏,是起源于中国古代的传统黑白棋种之一。发展于日本,流行于欧美。容易上手,老少皆宜,而且趣味横生,引人入胜;不仅能增强思维能力,提高智力,而且富含哲理,有助于修身养性。近来随着计算机的快速发展,各种棋类游戏被纷纷请进了电脑,使得那些喜爱下棋,又常常苦于没有工具的棋迷们能随时过足棋瘾。在这里我也设计了一个较简单
13、的五子棋游戏,这个游戏,不仅可以满足游戏爱好者对游戏的要求,同时我们增加了美观因素,让游戏有一个比较美观的界面,满足我们游戏爱好者的视觉要求,同时有悔棋和重新清盘开始的功能,更加方便了玩家的操作和游戏的有趣性。第二章 总体设计2.1开发与设计的总体思想2.1.1总体设计思路棋盘设计为15*15格,初始状态棋盘的为空,玩家黑子先走,轮流落子,当一方连成五子或下满棋盘时,游戏结束(连成五子的一方获胜,下满棋盘为和棋)。当游戏一方胜利后显示胜利信息。从程序表面看,这是一个二维平面图,所以数据用二维数组来表示,数组两个下标可以表示棋盘上的位置,用坐标表示位置,数组元素的值代表棋格上的状态,共有三种情况
14、,分别是0代表空格,1代表黑棋,2代表白棋。这样程序的主要工作是接收棋手鼠标按键操作,棋手用鼠标控制光标移动,按键表示落子。一旦接收到按键,说明棋手落子,先判断是否是有效位置,也就是说已经有棋子的位置不能重叠落子。落子成功后,马上判断该棋盘上是否有相同颜色的棋子连成五子,如果连成五子,则游戏结束,输出相应的信息。按确认后,自动调用清盘函数,此时清盘重新开始,输家先走。在游戏中,如果玩家悔棋,则按下悔棋按钮,调用悔棋函数,将刚下的棋去掉,重下一子。按下重新开始菜单,可清盘使游戏重新开始。2.1.2屏幕的组成一个游戏一定要有一个界面供游戏者对游戏控制。这个界面中要包含让游戏者更加清楚游戏状态的信息
15、,比如,白方要下子时,必须要先看一看所有黑子的排列情况,决定是防守还是进攻,这关系着玩家要如何放置自己的棋子,让整体有个更加的布局,有利于游戏的进行。此游戏的屏幕由15行15列的网格和菜单栏组成。2.1.3形状的组成每一种形状都是由五个棋子组成,比如或 由五个棋子排列而成。2.1.4形状的统一棋子的排列,如:等共有8种形状(黑白的形状归为不同的形状)。如图形状:黑棋的四种情况: 图2.1白棋的四种情况: 22 图2.2第三章 概要设计3.1系统流程图系统流程图是对系统的大致流程进行描述,本游戏的系统流程图如下:重新开始点击开始黑子先下(重新开始后由输家先下)黑白交替下子判断是否连成五子或棋盘满
16、YN悔棋游戏结束回放功能图3.1 系统流程图3.2 软件功能模块本游戏的软件功能模块如下:重新开始模块五子棋界面及显示模块回放功能模块轮流下子模块块胜负判断模块悔棋模块 图3.2 软件功能图3.3 系统功能模块系统功能模块是对系统的大致功能进行描述,本游戏的系统功能模块如下:五子棋游戏功能俩人基本游戏功能悔棋功能重新开始功能回放功能输赢输出图3.3 系统功能图第四章 详细设计根据上面所介绍的本系统的各个模块及其需要实现的功能,下面详细设计如下:4.1.界面的设计4.1.1总体界面的设计程序界面程序在启动运行时,系统会调用在资源视图中导入的围棋背景图片,使程序界面更加友好,在使用上给用户一种直观
17、方便的感觉。4.1.2界面棋子的设计在资源视图中导入围棋的黑棋图片、白旗图片,使下子时调用此图片,使游戏更加直观有趣。同时在窗口视图中添加显示透明色图片函数,是棋子图片更加逼真有趣。显示透明色图片函数如下所示:/显示透明色函数void PutBitmap(CDC *pDC,int x,int y,CBitmap *pBitmap,COLORREF color) COLORREF oldColor; CBitmap bmAndBack,bmAndObject,bmAndMem,bmSave; CDC memDC,backDC,objectDC,saveDC,pieceDC; BITMAP bm;
18、 pBitmap-GetBitmap(&bm); int nWidth=bm.bmWidth,nHeight=bm.bmHeight; memDC.CreateCompatibleDC(pDC); backDC.CreateCompatibleDC(pDC); objectDC.CreateCompatibleDC(pDC); saveDC.CreateCompatibleDC(pDC); pieceDC.CreateCompatibleDC(pDC); bmAndBack.CreateBitmap(nWidth,nHeight,1,1, NULL); bmAndObject.CreateBi
19、tmap(nWidth,nHeight,1,1,NULL); bmAndMem.CreateCompatibleBitmap(pDC,nWidth,nHeight); bmSave.CreateCompatibleBitmap(pDC,nWidth,nHeight); backDC.SelectObject(&bmAndBack); objectDC.SelectObject(&bmAndObject); memDC.SelectObject(&bmAndMem); saveDC.SelectObject(&bmSave); pieceDC.SelectObject(pBitmap); sav
20、eDC.BitBlt(0,0,nWidth,nHeight,&pieceDC,0,0,SRCCOPY); oldColor=pieceDC.SetBkColor(color); objectDC.BitBlt(0,0,nWidth,nHeight,&pieceDC,0,0,SRCCOPY); pieceDC.SetBkColor(oldColor); backDC.BitBlt(0,0,nWidth,nHeight,&objectDC,0,0,NOTSRCCOPY); memDC.BitBlt(0,0,nWidth,nHeight,pDC,x,y,SRCCOPY); memDC.BitBlt(
21、0,0,nWidth,nHeight,&objectDC,0,0,SRCAND); pieceDC.BitBlt(0,0,nWidth,nHeight,&backDC,0,0,SRCAND); memDC.BitBlt(0,0,nWidth,nHeight,&pieceDC,0,0,SRCPAINT); pDC-BitBlt(x,y,nWidth,nHeight,&memDC,0,0,SRCCOPY); pieceDC.BitBlt(0,0,nWidth,nHeight,&saveDC,0,0,SRCCOPY);4.2.显示界面的准备4.2.1在窗体类中添加存放黑白棋两维数组和背景棋盘、黑棋、
22、白棋位图对象int wb1515;CBitmap Board,Black,White;/背景棋盘、黑棋、白棋位图对象4.2.2 在窗体构造函数中初始化wb,装入棋盘、黑棋、白棋位图for(int i=0;i15;i+)for(int j=0;jBitBlt(0,0,535,536,&mem,0,0,SRCCOPY);/绘制棋盘for(int i=0;i15;i+)/绘制棋子for(int j=0;j15;j+)if(wbij=1) PutBitmap(pDC,5+i*35,7+j*35,&Black,RGB(255,255,255);else if(wbij=2) PutBitmap(pDC,
23、5+i*35,7+j*35,&White,RGB(255,255,255);/ TODO: add draw code for native data here4.4. 轮流下子代码void CChessView:OnLButtonDown(UINT nFlags, CPoint point) / TODO: Add your message handler code here and/or call defaultif(flag=1)int x=(point.x-5)/35,y=(point.y-7)/35;/计算坐标if(x15&yGetDC(); PutBitmap(pDC,5+x*35
24、,7+y*35,&Black,RGB(255,255,255);/显示该棋子CView:OnLButtonDown(nFlags, point);flag=2;if(heisheng(wb)=1)this-MessageBox( 黑子胜,完成,MB_OK); OnStart();if(ping(wb)=1)this-MessageBox(平均,完成,MB_OK);OnStart();elseint x=(point.x-5)/35,y=(point.y-7)/35;/计算坐标if(x15&yGetDC(); PutBitmap(pDC,5+x*35,7+y*35,&White,RGB(255,
25、255,255);/显示该棋子CView:OnLButtonDown(nFlags, point);flag=1;if(baisheng(wb)=1)this-MessageBox( 白子胜,完成,MB_OK);OnStart();if(ping(wb)=1)this-MessageBox(平均,完成,MB_OK);OnStart();4.5. 判断输赢此功能用来判断当某一方下完子后在八个方向上是否有连成五个子的可能性,若连成五子则执此棋子方获胜;或者棋盘下满为和局。4.5.1判断是否白棋胜代码int CChessView:baisheng(int a1515) int i,j;/判断横着的5
26、个是否都相等 for(i=0;i15;i+) for(j=0;j15;j+) if(aij=2&aij+1=2&aij+2=2&aij+3=2&aij+4=2) return 1; for(j=0;j15;j+)/判断竖着的5个是否都相等 for(i=0;i15;i+) if(aij=2&ai+1j=2&ai+2j=2&ai+3j=2&ai+4j=2) return 1; for(i=0;i15;i+)/判断左斜5个 for(j=0;j15;j+) if(aij=2&ai+1j+1=2&ai+2j+2=2&ai+3j+3=2&ai+4j+4=2) return 1; for(i=0;i=0;j
27、-) if(aij=2&ai+1j-1=2&ai+2j-2=2&ai+3j-3=2&ai+4j-4=2) return 1; return 0; 4.5.2判断是否黑棋胜代码int CChessView:heisheng(int a1515) int i,j;/判断横着的5个是否都相等 for(i=0;i15;i+) for(j=0;j15;j+) if(aij=1 & aij+1=1 & aij+2=1 & aij+3=1 & aij+4=1) return 1; for(j=0;j15;j+)/判断竖着的5个是否都相等 for(i=0;i15;i+) if(aij=1&ai+1j=1&ai
28、+2j=1&ai+3j=1&ai+4j=1) return 1; for(i=0;i15;i+)/判断左斜5个 for(j=0;j15;j+) if(aij=1&ai+1j+1=1&ai+2j+2=1&ai+3j+3=1&ai+4j+4=1) return 1; for(i=0;i=0;j-) if(aij=1&ai+1j-1=1&ai+2j-2=1&ai+3j-3=1&ai+4j-4=1) return 1; return 0; 4.5.3判断是否平局代码int CChessView:ping(int a1515) for(int i=0;i15;i+) for(int j=0;j15;j+
29、) if(aij=0)/当棋盘全部子都不是0时才能return 1,即棋盘已下满 return 0; return 1; 4.6. 悔棋此功能是体现一种人性化,在菜单栏里添加悔棋按钮,当某一方玩家觉得此步走错了,按下悔棋按钮,调用悔棋函数,棋盘上就会自动消除玩家刚下的一步棋,实行悔棋功能。悔棋代码如下:void CChessView:On1() for(int i=0;i15;i+)for(int j=0;j15;j+)if(jlij=count)wbij=0;count-;if(flag=2)flag=1;if(flag=1)flag=2; OnDraw(GetDC();/ TODO: Ad
30、d your command handler code here4.7. 重新开始在菜单栏里添加重新开始按钮,当按下重新开始按钮时,调用重新开始函数,对棋盘进行清盘处理,然后游戏重新开始。重新开始代码如下:void CChessView:On3() for(int i=0;i15;i+)for(int j=0;j15;j+)wbij=0;OnDraw(GetDC();/ TODO: Add your command handler code here4.8. 回放功能为了进一步观察自己的得失和对手的技术,在菜单栏里添加回放功能按钮,当按下回放功能按钮时,调用回放功能函数,对棋盘进行清盘处理,然
31、后实行回放功能。回放功能函数如下:void CChessView:On2() for(int i=0;i15;i+)for(int j=0;jSetTimer(10,1000,NULL);k=0;/ TODO: Add your command handler code herevoid CChessView:OnTimer(UINT nIDEvent) / TODO: Add your message handler code here and/or call defaultif(kKillTimer(10);CView:OnTimer(nIDEvent);第五章 测试分析经过无数次的测试,
32、该系统能够较好地满足游戏爱好者的需要,能够比较顺利的进行游戏,能够显示谁赢谁输,还是平局。该游戏利用鼠标进行下棋,在菜单栏中选择悔棋,回放,和重新开始的功能。当胜负已分,游戏结束时,会自动弹出一个显示输赢的对话框。结论和心得体会编辑游戏这在一前我都以为是要遥不可及,但现在通过这次五子棋的设计我明白了,并不是如此,只要团队合作也可以搞定,我多学了许多的以前课上没有的知识,比如怎么用c+程序画图,写出文本,编辑游戏功能等。通过课程设计,我们对C+这门课程有了更深一步的了解。它是计算机程序设计的重要理论技术基础,在我们测控专业的学习中占据着十分重要的地位。同时也使我们知道,要学好这门课程,仅学习书本
33、上的知识是不够的,还要有较强的实践能力。因为我们学习知识就是为了实践。而只有多实践,多编写程序,才能更好的理解与掌握书本上的东西。同时对于此游戏还可以进一步研究开发,可以制成有人机对战和人人对战俩种选择的游戏,还可以制成网上游戏形式,可以和网友一起游戏等等。致 谢本说明书和游戏软件是在指导老师悉心指导下和同学的耐心帮助下完成的。这次课程设计能够顺利的完成,要感谢老师同学的帮助。首先要感谢是指导老师,在技术上给了我很大的帮助和启发,当我遇到困难的时候,不知如何去解决时,就会寻求老师的指导,指导老师会很有耐心的为我讲解;感谢我的指导老师,他循循善诱的教导和不拘一格的思路给予了我很多的启发和帮助。感
34、谢班上同学对我的帮助和指点。没有他们的帮助,对于我一个对编程知识不是很精通的人来说,要想在短短的的时间里完成一个系统的软件设计是一件很困难的事情。在一些小问题上,只要能够解答,同学都会尽力帮助我,让我不至于在设计时一直止步不前。感谢同学的耐心帮助和指点。在此表示最诚挚的感谢!参考文献1.谭浩强. C程序设计(第三版), 清华大学出版社,20052.孔鹏. Visual C+6.0 完全自学手册,机械工业出版社,20073.温秀梅 丁学钧. Visual C+ 面向对象程序设计教程与实验. 清华大学出版社,20064.温秀梅 高丽婷 丁学钧. Visual C+ 面向对象程序设计教程与实验学习指导与习题解答. 清华大学出版社,2010