1、C 课程设计说明书江 苏 大 学编程及软件应用实践课程设计说明书五子棋游戏学生姓名:黄小宝 学 号: 3070302019 年级专业:2007级测控技术与仪器 班 级:测控 0701 班指导老师:张 世 庆学 院:机械工程学院江苏镇江提交日期:2009年7月五子棋游戏黄小宝(江苏大学,中国,镇江 212013)摘要:该游戏软件在Windows系统为玩家提供传统五子棋游戏的基本功能,在这简单的五子棋中,玩家通过鼠标进行两个人的游戏。游戏中包含姓名输入、开始/重新开始、悔棋、是否同意和回放等功能,游戏的主战场为15行15列的棋盘。游戏结束,如果有输赢,则输出谁胜,否则,输出平局的信息框。关键词:五
2、子棋;视窗操作系统;游戏;MFCThe Game of GobangXiaobao Huang (Jiangsu University, China, Zhenjiang 212013)Abstract: To provide a traditional Gobang game, this game software in the Windows system, is for players with the basic functions in this simple Gobang, the audiences through a mouse for a two-person game.Yo
3、u can enter your names included in the game, it has a start / restart, Hui Qi, agree or not and playback functions, the main battlefield of the game for 15 to 15 of the chessboard. The end of the game, if a win or lose, who wins and output, or output tie the information box.Keywords: Gobang; Windows
4、 System; Game;MFC 目 录课程设计任务书 1一、课程设计题目:五子棋游戏 1二、目的与要求: 11、目的: 12、基本要求: 13、创新要求: 14、写出设计说明书 1三、设计方法和基本原理: 1四、设计中涉及到的重要内容: 1五、程序设计和调试: 2六、答辩与评分标准: 21 前言 32 需求分析 32.1系统概述 32.1.1概述 32.2系统运行环境 32.2.1运行环境 32.3功能需求描述 32.3.1功能需求 33 总体设计 43.1开发与设计的总体思想 43.1.1屏幕的组成 43.1.2形状的组成 43.1.3形状的统一 44 概要设计 54.1系统流程图 54
5、.2 系统功能模块 55 详细设计 65.1.界面的设计 65.2游戏中棋盘的形成 75.3游戏下子功能代码 85.4判断功能代码 105.5设置项目中的功能代码 125.6悔棋功能代码 125.7回放功能代码 146 测试分析 157 心得体会 15参考文献 16致 谢 17课程设计任务书一、课程设计题目:五子棋游戏二、目的与要求:1、目的:(1)要求学生达到熟练掌握C+语言的基本知识和C+调试技能;(2)基本掌握面向对象程序设计的基本思路和方法;(3)能够利用所学的基本知识和技能,解决简单的面向对象程序设计问题。(4)培养学生综合利用C语言进行程序设计的能力,主要是培养学生利用系统提供的标
6、准图形函数进行创新设计。2、基本要求:(1)在开始编写程序以前,要完成对系统的分析,画出程序的流程框图。(2)要求用C+类的思想来完成程序的设计。(3)要求的程序中至少要定义两个类(例如:坐标position类,棋子chess类等),类中要有多个属性和方法。(4)完成的程序界面要美观,能够完成五子棋的基本游戏功能(两人对战)。3、创新要求:在基本要求达到后,进行创新设计,完善与增加游戏的功能,例如悔棋功能。4、写出设计说明书按照设计过程写出设计说明书。三、设计方法和基本原理:1、创建棋盘大小(可任意),并且要保存棋盘上各个点的位置;2、创建棋子类及其属性和方法;3、从盘键分别获取两个用户的输入
7、,根据用户的身份及输入的位置,调用棋子类的相应方法,完成棋子的走动;4、输赢的判断;5、游戏结束。四、设计中涉及到的重要内容:1、对话框应用程序的编写方法及其相关函数;2、绘图工具的使用方法;五、程序设计和调试:六、答辩与评分标准:1、完成基本功能:40分;2、设计报告及使用说明书:30分;3、设置错误或者按照要求改变结果:15分;4、回答问题:15分。1 前言随着社会发展,人类的生产生活越来越离不开信息。谁拥有了更多更有效的信息,谁就将在竞争中处于有利地位。信息产业正在成为一个国家的支柱。只有拥有了先进的数据库技术,才能有效地管理好浩如烟海的数据,并从中提取出对自己有用的信息来加以利用。作为
8、计算机应用的一部分,使用计算机对信息进行管理,具有手工管理所无法比拟的优点。例如:检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等。这些优点能够极大地提高管理的效率,也是正规化管理与世界接轨的重要条件。在下面的各章中我们将以开发一个五子棋游戏为例,谈谈其开发过程和所涉及到的问题及解决方法。2 需求分析2.1系统概述2.1.1概述该游戏软件在Windows系统为玩家提供五子棋游戏两人对战的基本功能,玩家可以通过鼠标在棋盘的相应位置下子,一方为白色,另一方为黑色,先下的为黑子(主场)。游戏过程中,只要有一人先连成五个棋子,不论横、竖或斜,就会在屏幕上显示是谁赢了比赛,也可以是平局
9、收场,从而可以进行下一场比赛。在比赛过程中,如果一方需要悔棋,先得通过对手的同意才可以。在右下方,有黑子和白子,且还有“0”和“1”,“1”表示轮到此色子下了。2.2系统运行环境2.2.1运行环境(1)硬件环境。本系统适用于那种Inter386以上计算机,内存容量为128M,应配备键盘、鼠标、显示器等外部设备。(2)软件环境。本系统的设计采用Visual C+6.0编写。在Windows XP SP2环境下测试通过。(3)本游戏软件在Windows平台下都可以运行。2.3功能需求描述2.3.1功能需求这是一次新的尝试,也是一次比较成功的设计,其算法与程序结构足以让人满意。这个游戏,不仅可以满足
10、游戏爱好者对游戏的要求,同时我们增加了美观因素,让游戏有一个比较美观的界面,满足我们游戏爱好者的视觉要求,回放效果更是让玩家欣赏自己是如何赢得或输的。3 总体设计3.1开发与设计的总体思想3.1.1屏幕的组成一个游戏一定要有一个界面供游戏者对游戏控制。这个界面中要包含让游戏者更加清楚游戏状态的信息,比如,白方要下子时,必须要先看一看所有黑子的排列情况,决定是防守还是进攻,这关系着玩家要如何放置自己的棋子,让整体有个更加的布局,有利于游戏的进行。屏幕由15行15列的网格组成;其中行的眉头上标有字母A、B、CO;列的方向标有数字1、2、315。菜单栏中的组成部分:3.1.2形状的组成每一种形状都是
11、由五个棋子组成,比如或 由五个棋子排列而成。3.1.3形状的统一妻子的排列,如:等共有8种形状(黑白的形状归为不同的形状)。如图形状:黑棋的四种情况: 图3.1白棋的四种情况: 图3.24 概要设计4.1系统流程图系统流程图是对系统的大致流程进行描述,本游戏的系统流程图如下:图4.1 功能模块 图4.1 系统流程图 4.2 系统功能模块系统功能模块是对系统的大致功能进行描述,本游戏的系统功能模块如下:图4.2 系统功能模块5 详细设计根据上面所介绍的本系统的各个模块及其需要实现的功能,下面详细设计如下:5.1.界面的设计程序界面程序在启动运行时,系统会通过调用视图类中的重绘图函数对界面进行界面
12、的初始化。使程序界面更加友好,在使用上给用户一种清新怡然的感觉。5.2游戏中棋盘的形成实现此功能相关代码如下:void CCk19View:OnDraw(CDC* pDC) CCk19Doc* pDoc = GetDocument(); ASSERT_VALID(pDoc); / TODO: add draw code for native data here CBitmap bitmap;/背景棋盘 bitmap.LoadBitmap(IDB_BITMAP1); CDC mem,mem1,mem2,qzh, qzb; mem.CreateCompatibleDC(pDC); mem.Sele
13、ctObject(&bitmap); pDC-BitBlt(0,0,600,400,&mem,0,0,SRCCOPY); CBitmap bitmap5;/死骑 bitmap5.LoadBitmap(IDB_BITMAP5); mem2.CreateCompatibleDC(pDC); mem2.SelectObject(&bitmap5); pDC-BitBlt(350,0,600,352,&mem2,0,0,SRCCOPY); CBitmap bitmap4;/五子棋 bitmap4.LoadBitmap(IDB_BITMAP4); mem1.CreateCompatibleDC(pDC)
14、; mem1.SelectObject(&bitmap4); pDC-BitBlt(420,285,600,400,&mem1,0,0,SRCCOPY); CBitmap bitmap2;/黑子 bitmap2.LoadBitmap(IDB_BITMAP2); qzh.CreateCompatibleDC(pDC); qzh.SelectObject(&bitmap2); CBitmap bitmap3;/白子 bitmap3.LoadBitmap(IDB_BITMAP3); qzb.CreateCompatibleDC(pDC); qzb.SelectObject(&bitmap3);/以下
15、是显示棋子的代码 CRect rect; /矩形区域 GetClientRect(&rect); /获得窗口矩形区域 pDC-BitBlt(0,0,rect.Width(),rect.Height(),&qp,0,0,SRCCOPY); /绘图 for(int i=0;i15;i+) for(int j=0;jBitBlt(18+i*24,18+j*24,20,20,&qzh,0,0,SRCCOPY); else if(qzij=2) pDC-BitBlt(18+i*24,18+j*24,20,20,&qzb,0,0,SRCCOPY); 5.3游戏下子功能代码int qz1515;/棋子的二维
16、数组实现此功能相关代码如下:void CCk19View:OnLButtonDown(UINT nFlags, CPoint point) / TODO: Add your message handler code here and/or call default int i=(point.x-10)/24;int j=(point.y-10)/24; if(i15&jGetDC(); Position p(i,j,qzij);/Position类记录各棋子的位置和值 /int hs,ss,ps,ns;是判断点(i,j)的横、竖、撇和捺有无五个子hs=p.GetHorizontal(); ss
17、=p.GetVertical(); ps=p.GetRightSlanting(); ns=p.GetLeftSlanting(); if(hs=5|ss=5|ps=5|ns=5) if(qzij=1) MessageBox( 你真是太牛了!n 恭喜你,黑子赢了!n 游戏结束,请重新开始。); if(qzij=2) MessageBox( 你真是太牛了!n 恭喜你,白子赢了!n 游戏结束,请重新开始。); if(count=225)&(hs!=5)&(ss!=5)&(ps!=5)&(ns!=5) MessageBox(你俩都很棒!n 平手!,请握手言和,MB_OK); CView:OnLBut
18、tonDown(nFlags, point);5.4判断功能代码此代码用来判断当某一方下完子后是否有练成五个子的可能性。自己创建一个类并判断class Position /坐标position类public: Position(int m,int n,int k) x=m;y=n;f=k; int GetHorizontal();/获得水平连续棋子的个数 int GetVertical();/获得垂直连续棋子的个数 int GetRightSlanting();/获得右斜连续棋子的个数 int GetLeftSlanting();/获得左斜连续棋子的个数private: int f;/记录棋子
19、的颜色,1为黑子,2为白子 int x;/行数 int y;/列数 int hsy;/水平向右 int hsz;/水平向左 int sss;/竖直向上 int ssx;/竖直向下 int ys;/右上 int zx;/左下 int yx;/右下 int zs;/左上;实现此功能相关代码如下:int Position:GetHorizontal()/水平方向 hsy=hsz=0; for(int i=1;y-i=0;i+) if(qzxy-i!=f) break; hsz=i-1; for(i=1;y+i=0)&(y+i=14);i+) if(qzx-iy+i!=f) break; ys=i-1
20、; for(i=1;(x+i=0);i+) if(qzx+iy-i!=f) break; zx=i-1; return (ys+zx+1);int Position:GetRightSlanting()/右斜方向 yx=zs=0; for(int i=1;(x-i=0)&(y-i=0);i+) if(qzx-iy-i!=f) break; zs=i-1; for(i=1;(x+i=14)&(y+i=0;i+) if(qzx-iy!=f) break; sss=i-1; for(i=1;y+i=14;i+) if(qzx+iy!=f) break; ssx=i-1; return (sss+ss
21、x+1);5.5设置项目中的功能代码此功能用来在游戏结束后,用来“开始/重新开始”。并且一次性消去棋盘上所有的棋子。实现此功能相关代码如下:void CCk19View:OnStart() / TODO: Add your command handler code here for(int i=0;i15;i+) for(int j=0;j15;j+) qzij=0; OnDraw(GetDC();5.6悔棋功能代码此功能是体现一种人性化,当某一方玩家觉得此步走错了,向对方提出悔棋请求。当对方同意后,棋盘上会自动消除玩家刚下的一步棋。程序的具体实现部分如程序清单如下所示。void CCk19V
22、iew:OnBlackAgree() /黑方同意 / TODO: Add your command handler code here for(int i=0;i15;i+) for(int j=0;j15;j+) if(jlij=count) qzij=0; count-; OnDraw(GetDC();void CCk19View:OnBlackNoAgree() /黑方不同意 / TODO: Add your command handler code here MessageBox( SOORYn我不同意!);void CCk19View:OnBlackStone() /黑方提出悔棋请求
23、 / TODO: Add your command handler code here MessageBox(黑棋提出悔棋请求!n 白棋同意吗?);void CCk19View:OnWhiteAgree() /白方同意 / TODO: Add your command handler code here for(int i=0;i15;i+) for(int j=0;j15;j+) if(jlij=count) qzij=0; count-; OnDraw(GetDC();void CCk19View:OnWhiteNoAgree() /白方不同意 / TODO: Add your comma
24、nd handler code here MessageBox(不好意思啦!n 不同意!);void CCk19View:OnWhiteStone() /白方提出悔棋请求 / TODO: Add your command handler code here MessageBox(白棋提出悔棋请求!n 黑气同意吗?);5.7回放功能代码为了进一步观察自己的得失和对手的技术,这一功能是一个比较好的平台,具体代码如下:class Chess/棋子chess类public: Chess()i=0;j=0;k=1; void Remember();/记住棋子的位置及次序private: int i,j,
25、k;void Chess:Remember() for(k=1;k=count;k+) for(i=0;i15;i+) for(j=0;j15;j+) if(jlij=k) cpk.x=i; cpk.y=j; cpk.n=qzij; for(i=0;i15;i+) for(j=0;jcount) KillTimer(1); CView:OnTimer(nIDEvent);6 测试分析经过无数次的测试,该系统能够较好地满足游戏爱好者的需要,能够比较顺利的进行游戏,能够显示谁赢谁输,还是平局。如利用鼠标进行下棋,悔棋,回放,用键盘输入姓名,在不需要此游戏界面在屏幕上显示时。当结束游戏时,会自动弹出一个对话框。7 心得体会经过一个多星期的设计和开发,系统基本开发完毕。在本次课程设计中困难遇到不少,比如重新开始,弹出自己创建的对话框,回放等。由于设计时间较短,所以该系统还有许多不尽如人意的地方,如输入姓名的对话框不够美观、回放不能重复两次等多方面问题。在这次系统开发的过程中,我深深体会到了做一个系统,首先进行需求分析的重要性,了解了一个系统的制作,从功能分析到功能模块分析、与其他系统的关系,这些都有待以后进一步改进。通过实践对于我以后的学习是一笔不
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1