C课程设计说明书.docx

上传人:b****5 文档编号:4309309 上传时间:2022-11-29 格式:DOCX 页数:18 大小:62.68KB
下载 相关 举报
C课程设计说明书.docx_第1页
第1页 / 共18页
C课程设计说明书.docx_第2页
第2页 / 共18页
C课程设计说明书.docx_第3页
第3页 / 共18页
C课程设计说明书.docx_第4页
第4页 / 共18页
C课程设计说明书.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

C课程设计说明书.docx

《C课程设计说明书.docx》由会员分享,可在线阅读,更多相关《C课程设计说明书.docx(18页珍藏版)》请在冰豆网上搜索。

C课程设计说明书.docx

C课程设计说明书

江苏大学

编程及软件应用实践课程设计说明书

五子棋游戏

 

学生姓名:

    黄小宝    

学号:

  3070302019  

年级专业:

 2007级测控技术与仪器

班级:

   测控0701班   

指导老师:

   张 世 庆   

学院:

   机械工程学院   

江苏·镇江

提交日期:

2009年7月

 

五子棋游戏

黄小宝

(江苏大学,中国,镇江212013)

摘要:

该游戏软件在Windows系统为玩家提供传统五子棋游戏的基本功能,在这简单的五子棋中,玩家通过鼠标进行两个人的游戏。

游戏中包含姓名输入、开始/重新开始、悔棋、是否同意和回放等功能,游戏的主战场为15行15列的棋盘。

游戏结束,如果有输赢,则输出谁胜,否则,输出平局的信息框。

关键词:

五子棋;视窗操作系统;游戏;MFC

 

 TheGameofGobang

XiaobaoHuang

(JiangsuUniversity,China,Zhenjiang212013)

Abstract:

ToprovideatraditionalGobanggame,thisgamesoftwareintheWindowssystem,isforplayerswiththebasicfunctionsinthissimpleGobang,theaudiencesthroughamouseforatwo-persongame.Youcanenteryournamesincludedinthegame,ithasastart/restart,HuiQi,agreeornotandplaybackfunctions,themainbattlefieldofthegamefor15to15ofthechessboard.Theendofthegame,ifawinorlose,whowinsandoutput,oroutputtietheinformationbox.

Keywords:

Gobang;WindowsSystem;Game;MFC

目录

课程设计任务书1

一、课程设计题目:

五子棋游戏1

二、目的与要求:

1

1、目的:

1

2、基本要求:

1

 3、创新要求:

1

4、写出设计说明书1

三、设计方法和基本原理:

1

四、设计中涉及到的重要内容:

1

五、程序设计和调试:

2

六、答辩与评分标准:

2

1前言3

2需求分析3

2.1系统概述3

2.1.1概述3

2.2系统运行环境3

2.2.1运行环境3

 2.3功能需求描述3

2.3.1功能需求3

3总体设计4

3.1开发与设计的总体思想4

3.1.1屏幕的组成4

3.1.2形状的组成4

3.1.3形状的统一4

4概要设计5

4.1系统流程图5

4.2系统功能模块5

5详细设计6

5.1.界面的设计6

5.2游戏中棋盘的形成7

5.3游戏下子功能代码8

5.4判断功能代码10

5.5设置项目中的功能代码12

 5.6悔棋功能代码12

5.7回放功能代码14

6测试分析15

7心得体会15

参考文献16

致谢17

课程设计任务书

一、课程设计题目:

五子棋游戏

二、目的与要求:

1、目的:

(1)要求学生达到熟练掌握C++语言的基本知识和C++调试技能;

(2)基本掌握面向对象程序设计的基本思路和方法;

(3)能够利用所学的基本知识和技能,解决简单的面向对象程序设计问题。

(4)培养学生综合利用C++语言进行程序设计的能力,主要是培养学生利用系统提供的标准图形函数进行创新设计。

2、基本要求:

(1)在开始编写程序以前,要完成对系统的分析,画出程序的流程框图。

 

(2)要求用C++类的思想来完成程序的设计。

(3)要求的程序中至少要定义两个类(例如:

坐标position类,棋子chess类等),类中要有多个属性和方法。

(4)完成的程序界面要美观,能够完成五子棋的基本游戏功能(两人对战)。

3、创新要求:

在基本要求达到后,进行创新设计,完善与增加游戏的功能,例如悔棋功能。

4、写出设计说明书

按照设计过程写出设计说明书。

三、设计方法和基本原理:

1、创建棋盘大小(可任意),并且要保存棋盘上各个点的位置;

2、创建棋子类及其属性和方法;

 3、从盘键分别获取两个用户的输入,根据用户的身份及输入的位置,调用棋子类的相应方法,完成棋子的走动;

4、输赢的判断;

5、游戏结束。

四、设计中涉及到的重要内容:

1、对话框应用程序的编写方法及其相关函数;

2、绘图工具的使用方法;

五、程序设计和调试:

六、答辩与评分标准:

1、完成基本功能:

40分;

2、设计报告及使用说明书:

30分;

3、设置错误或者按照要求改变结果:

15分;

4、回答问题:

15分。

 1前言

随着社会发展,人类的生产生活越来越离不开信息。

谁拥有了更多更有效的信息,谁就将在竞争中处于有利地位。

信息产业正在成为一个国家的支柱。

只有拥有了先进的数据库技术,才能有效地管理好浩如烟海的数据,并从中提取出对自己有用的信息来加以利用。

作为计算机应用的一部分,使用计算机对信息进行管理,具有手工管理所无法比拟的优点。

例如:

检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等。

这些优点能够极大地提高管理的效率,也是正规化管理与世界接轨的重要条件。

在下面的各章中我们将以开发一个五子棋游戏为例,谈谈其开发过程和所涉及到的问题及解决方法。

2需求分析

2.1系统概述

2.1.1概述

 该游戏软件在Windows系统为玩家提供五子棋游戏两人对战的基本功能,玩家可以通过鼠标在棋盘的相应位置下子,一方为白色,另一方为黑色,先下的为黑子(主场)。

游戏过程中,只要有一人先连成五个棋子,不论横、竖或斜,就会在屏幕上显示是谁赢了比赛,也可以是平局收场,从而可以进行下一场比赛。

在比赛过程中,如果一方需要悔棋,先得通过对手的同意才可以。

在右下方,有黑子和白子,且还有“0”和“1”,“1”表示轮到此色子下了。

2.2系统运行环境

2.2.1运行环境

(1)硬件环境。

本系统适用于那种Inter386以上计算机,内存容量为128M,应配备键盘、鼠标、显示器等外部设备。

(2)软件环境。

本系统的设计采用VisualC++6.0编写。

在WindowsXPSP2环境下 测试通过。

(3)本游戏软件在Windows平台下都可以运行。

2.3功能需求描述

2.3.1功能需求

这是一次新的尝试,也是一次比较成功的设计,其算法与程序结构足以让人满意。

这个游戏,不仅可以满足游戏爱好者对游戏的要求,同时我们增加了美观因素,让游戏有一个比较美观的界面,满足我们游戏爱好者的视觉要求,回放效果更是让玩家欣赏自己是如何赢得或输的。

3总体设计

3.1开发与设计的总体思想

3.1.1屏幕的组成

一个游戏一定要有一个界面供游戏者对游戏控制。

这个界面中要包含让游戏者更加清楚游戏状态的信息,比如,白方要下子时,必须要先看一看所有黑子的排列情况,决定是防守还是进攻,这关系着玩家要如何放置自己的棋子,让整体有个更加的布局,有利于游戏的进行。

屏幕由15行15列的网格组成;其中行的眉头上标有字母A、B、C…O;列的方向标有数字1、2、3……15。

菜单栏中的组成部分:

3.1.2形状的组成

每一种形状都是由五个棋子组成,比如●●●●●或○○○○○由五个棋子排列而成。

 3.1.3形状的统一

妻子的排列,如:

●●●●●等共有8种形状(黑白的形状归为不同的形状)。

如图形状:

黑棋的四种情况:

●●●●●●○○○○●○○○○○○○○●

○○○○○●○○○○○●○○○○○○●○

○○○○○●○○○○○○●○○○○●○○

○○○○○●○○○○○○○●○○●○○○

○○○○○●○○○○○○○○●●○○○○

图3.1

白棋的四种情况:

○○○○○○●●●●○●●●●●●●●○

 ●●●●●○●●●●●○●●●●●●○●

●●●●●○●●●●●●○●●●●○●●

●●●●●○●●●●●●●○●●○●●●

●●●●●○●●●●●●●●○○●●●●

图3.2

4概要设计

4.1系统流程图

系统流程图是对系统的大致流程进行描述,本游戏的系统流程图如下:

图4.1功能模块

 

图4.1系统流程图

4.2系统功能模块

系统功能模块是对系统的大致功能进行描述,本游戏的系统功能模块如下:

图4.2系统功能模块

5详细设计

根据上面所介绍的本系统的各个模块及其需要实现的功能,下面详细设计如下:

5.1.界面的设计

程序界面程序在启动运行时,系统会通过调用视图类中的重绘图函数对界面进行 界面的初始化。

使程序界面更加友好,在使用上给用户一种清新怡然的感觉。

5.2游戏中棋盘的形成

实现此功能相关代码如下:

voidCCk19View:

:

OnDraw(CDC*pDC)

{

CCk19Doc*pDoc=GetDocument();

ASSERT_VALID(pDoc);

//TODO:

adddrawcodefornativedatahere

CBitmapbitmap;//背景棋盘

bitmap.LoadBitmap(IDB_BITMAP1);

CDCmem,mem1,mem2,qzh,qzb;

mem.CreateCompatibleDC(pDC);

mem.SelectObject(&bitmap);

 pDC->BitBlt(0,0,600,400,&mem,0,0,SRCCOPY);

CBitmapbitmap5;//死骑

bitmap5.LoadBitmap(IDB_BITMAP5);

mem2.CreateCompatibleDC(pDC);

mem2.SelectObject(&bitmap5);

pDC->BitBlt(350,0,600,352,&mem2,0,0,SRCCOPY);

CBitmapbitmap4;//五子棋

bitmap4.LoadBitmap(IDB_BITMAP4);

mem1.CreateCompatibleDC(pDC);

mem1.SelectObject(&bitmap4);

pDC->BitBlt(420,285,600,400,&mem1,0,0,SRCCOPY);

 

CBitmapbitmap2;//黑子

bitmap2.LoadBitmap(IDB_BITMAP2);

qzh.CreateCompatibleDC(pDC);

qzh.SelectObject(&bitmap2);

CBitmapbitmap3;//白子

bitmap3.LoadBitmap(IDB_BITMAP3);

qzb.CreateCompatibleDC(pDC);

qzb.SelectObject(&bitmap3);

//以下是显示棋子的代码

CRectrect;//矩形区域

GetClientRect(&rect);//获得窗口矩形区域

 pDC->BitBlt(0,0,rect.Width(),rect.Height(),&qp,0,0,SRCCOPY);//绘图

for(inti=0;i<15;i++)

for(intj=0;j<15;j++)

{

if(qz[i][j]==1)

{

pDC->BitBlt(18+i*24,18+j*24,20,20,&qzh,0,0,SRCCOPY);

}

elseif(qz[i][j]==2)

{

pDC->BitBlt(18+i*24,18+j*24,20,20,&qzb,0,0,SRCCOPY);

 }

}

}

5.3游戏下子功能代码

intqz[15][15];//棋子的二维数组

实现此功能相关代码如下:

voidCCk19View:

:

OnLButtonDown(UINTnFlags,CPointpoint)

{

//TODO:

Addyourmessagehandlercodehereand/orcalldefault

inti=(point.x-10)/24;intj=(point.y-10)/24;

if(i<15&&j<15)

if(qz[i][j]==0)

{

qz[i][j]=count%2+1;

count++;

jl[i][j]=count;

 

OnDraw(this->GetDC());

Positionp(i,j,qz[i][j]);//Position类记录各棋子的位置和值

//inths,ss,ps,ns;是判断点(i,j)的横、竖、撇和捺有无五个子

hs=p.GetHorizontal();

ss=p.GetVertical();

ps=p.GetRightSlanting();

ns=p.GetLeftSlanting();

if(hs==5||ss==5||ps==5||ns==5)

{

if(qz[i][j]==1)

MessageBox("你真是太牛了!

\n恭喜你,黑子赢了!

\n游戏结束,请重新开始。

");

if(qz[i][j]==2)

MessageBox("你真是太牛了!

\n恭喜你,白子赢了!

\n游戏结束,请重新开始。

");

 }

if((count==225)&&(hs!

=5)&&(ss!

=5)&&(ps!

=5)&&(ns!

=5))

MessageBox("你俩都很棒!

\n平手!

","请握手言和",MB_OK);

}

CView:

:

OnLButtonDown(nFlags,point);

}

5.4判断功能代码

此代码用来判断当某一方下完子后是否有练成五个子的可能性。

自己创建一个类并判断

classPosition//坐标position类

{

public:

Position(intm,intn,intk)

{x=m;y=n;f=k;}

intGetHorizontal();//获得水平连续棋子的个数

 intGetVertical();//获得垂直连续棋子的个数

intGetRightSlanting();//获得右斜连续棋子的个数

intGetLeftSlanting();//获得左斜连续棋子的个数

private:

intf;//记录棋子的颜色,1为黑子,2为白子

intx;//行数

inty;//列数

inthsy;//水平向右

inthsz;//水平向左

intsss;//竖直向上

intssx;//竖直向下

intys;//右上

intzx;//左下

 intyx;//右下

intzs;//左上

};

实现此功能相关代码如下:

intPosition:

:

GetHorizontal()//水平方向

{

hsy=hsz=0;

for(inti=1;y-i>=0;i++)

if(qz[x][y-i]!

=f)break;

hsz=i-1;

for(i=1;y+i<=14;i++)

if(qz[x][y+i]!

=f)break;

 hsy=i-1;

return(hsy+hsz+1);

}

intPosition:

:

GetLeftSlanting()//左斜方向

{

ys=zx=0;

for(inti=1;(x-i>=0)&&(y+i<=14);i++)

if(qz[x-i][y+i]!

=f)break;

ys=i-1;

for(i=1;(x+i<=14)&&(y-i>=0);i++)

if(qz[x+i][y-i]!

=f)break;

zx=i-1;

return(ys+zx+1);

}

intPosition:

:

GetRightSlanting()//右斜方向

 {

yx=zs=0;

for(inti=1;(x-i>=0)&&(y-i>=0);i++)

if(qz[x-i][y-i]!

=f)break;

zs=i-1;

for(i=1;(x+i<=14)&&(y+i<=14);i++)

if(qz[x+i][y+i]!

=f)break;

yx=i-1;

return(yx+zs+1);

}

intPosition:

:

GetVertical()//垂直方向

{

sss=ssx=0;

for(inti=1;x-i>=0;i++)

if(qz[x-i][y]!

=f)break;

sss=i-1;

for(i=1;y+i<=14;i++)

if(qz[x+i][y]!

=f)break;

ssx=i-1;

 return(sss+ssx+1);

}

5.5设置项目中的功能代码

此功能用来在游戏结束后,用来“开始/重新开始”。

并且一次性消去棋盘上所有的棋子。

实现此功能相关代码如下:

voidCCk19View:

:

OnStart()

{

//TODO:

Addyourcommandhandlercodehere

for(inti=0;i<15;i++)

for(intj=0;j<15;j++)

qz[i][j]=0;

OnDraw(GetDC());

}

5.6悔棋功能代码

 此功能是体现一种人性化,当某一方玩家觉得此步走错了,向对方提出悔棋请求。

当对方同意后,棋盘上会自动消除玩家刚下的一步棋。

程序的具体实现部分如程序清单如下所示。

voidCCk19View:

:

OnBlackAgree()//黑方同意

{

//TODO:

Addyourcommandhandlercodehere

for(inti=0;i<15;i++)

for(intj=0;j<15;j++)

if(jl[i][j]==count)

qz[i][j]=0;

count--;

OnDraw(GetDC());

}

voidCCk19View:

:

OnBlackNoAgree()//黑方不同意

{

//TODO:

Addyourcommandhandlercodehere

MessageBox("SOORY\n我不同意!

");

 }

voidCCk19View:

:

OnBlackStone()//黑方提出悔棋请求

{

//TODO:

Addyourcommandhandlercodehere

MessageBox("黑棋提出悔棋请求!

\n白棋同意吗?

");

}

voidCCk19View:

:

OnWhiteAgree()//白方同意

{

//TODO:

Addyourcommandhandlercodehere

for(inti=0;i<15;i++)

 for(intj=0;j<15;j++)

if(jl[i][j]==count)

qz[i][j]=0;

count--;

OnDraw(GetDC());

}

voidCCk19View:

:

OnWhiteNoAgree()//白方不同意

{

//TODO:

Addyourcommandhandlercodehere

MessageBox("不好意思啦!

\n不同意!

");

}

 voidCCk19View:

:

OnWhiteStone()//白方提出悔棋请求

{

//TODO:

Addyourcommandhandlercodehere

MessageBox("白棋提出悔棋请求!

\n黑气同意吗?

");

}

5.7回放功能代码

为了进一步观察自己的得失和对手的技术,这一功能是一个比较好的平台,具体代码如下:

classChess//棋子chess类

{

 public:

Chess(){i=0;j=0;k=1;}

voidRemember();//记住棋子的位置及次序

private:

inti,j,k;

};

voidChess:

:

Remember()

{

for(k=1;k<=count;k++)

for(i=0;i<15;i++)

for(j=0;j<15;j++)

if(jl[i][j]==k)

{

cp[k].x=i;

cp[k].y=j;

cp[k].n=qz[i][j];

 }

for(i=0;i<15;i++)

for(j=0;j<15;j++)

qz[i][j]=0;

}

下面是实现回放的具体函数:

voidCCk19View:

:

OnReplay()

{

//TODO:

Addyourcommandhandlercodehere

Chessch;

ch.Remember();

SetTimer(1,1000,NULL);

}

inti=1;

voidCCk19View:

:

OnTimer(UINTnIDEvent)

{

//TODO:

Addyourmessagehandlercodehereand/orcalldefault

qz[cp[i].x][cp[i].y]=cp[i].n;i++;

OnDraw(GetDC());

 if(i>count)KillTimer

(1);

CView:

:

OnTimer(nIDEvent);

}

6测试分析

经过无数次的测试,该系统能够较好地满足游戏爱好者的需要,能够比较顺利的进行游戏,能够显示谁赢谁输,还是平局。

如利用鼠标进行下棋,悔棋,回放,用键盘输入姓名,在不需要此游戏界面在屏幕上显示时。

当结束游戏时,会自动弹出一个对话框。

7心得体会

经过一个多星期的设计和开发,系统基本开发完毕。

在本次课程设计中困难遇到不少,比如重新开始,弹出自己创建的对话框,回放等。

由于设计时间较短,所以该系统还有许多不尽如人意的地方,如输入姓名的对话框不够美观、回放不能重复两次等多方面问题。

在这次系统开发的过程中,我深深体会到了做一个系统,首先进行需求分析的重要性,了解了一个系统的制作,从功能分析到功能模块分析、与其他系统的关系,这些都有待以后进一步改进。

通过实践对于我以后的学习是一笔不

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 数学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1