课 程 设 计 说 明 书五子棋C++.docx

上传人:b****6 文档编号:7748043 上传时间:2023-01-26 格式:DOCX 页数:19 大小:82.80KB
下载 相关 举报
课 程 设 计 说 明 书五子棋C++.docx_第1页
第1页 / 共19页
课 程 设 计 说 明 书五子棋C++.docx_第2页
第2页 / 共19页
课 程 设 计 说 明 书五子棋C++.docx_第3页
第3页 / 共19页
课 程 设 计 说 明 书五子棋C++.docx_第4页
第4页 / 共19页
课 程 设 计 说 明 书五子棋C++.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

课 程 设 计 说 明 书五子棋C++.docx

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

课 程 设 计 说 明 书五子棋C++.docx

课程设计说明书五子棋C++

课程设计说明书

 

五子棋游戏

TheGameofGobang

 

学院名称:

专业班级:

学生姓名:

学号:

  

指导教师姓名:

指导教师职称:

 

 

2011年7月

五子棋游戏

摘要:

此课程设计的目的是为了达到熟练掌握C++语言的基本知识和C++调试技能;基本掌握面向对象程序设计的基本思路和方法;能够利用所学的基本知识和技能,解决简单的面向对象程序设计问题;培养综合利用C++语言进行程序设计的能力,主要是培养利用系统提供的标准图形函数进行创新设计。

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

游戏的主战场为15行15列的棋盘,初始状态棋盘上无落子,进入游戏后,按照棋盘下的提示开局,然后轮流落子,一旦有一方的棋子在某一方向上构成连续的五个棋子,则该方胜利,游戏结束,如果有输赢,则输出谁胜,否则,输出平局的信息框。

游戏还有悔棋和重新开始的的功能。

关键词:

五子棋;视窗操作系统;悔棋;双人游戏。

TheGameofGobang

Abstract:

Thiscourseisdesignedinordertomasterthebasicknowledgeofthec++languagetestingskills;andc++Basicgraspofobjectorientedprogrammingbasictrainofthoughtandmethod;Canuseofmyknowledgeofthebasicknowledgeandskills,solvesimpleobject-orientedprogramdesignproblem;Usingc++languagetrainingcomprehendsiveprogramdesignability,ismainlyusethesystemtoprovidethetrainingofstandardgraphicsfunctionsofinnovationdesign.ThisgamesoftwareonWindowssystemforplayerswithtraditionalrenjugame,thebasicfunctionofinthissimplerenjuplayersthroughthemouse,twopersonalgame.Themainbattlefieldgamesforline15to15listedintheboard.Thegameisover,ifaloser,theoutputwhowins,otherwise,theoutputofthedrawinformationbox.

Keywords:

Gobang;WindowsSystem;Takeback;thegameofTwopeopleplaying

目录

课程设计任务书4

一、课程设计题目:

五子棋游戏4

二、目的与要求:

4

1、目的:

4

2、基本要求:

4

3、创新要求:

4

4、写出设计说明书4

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

4

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

4

五、程序设计和调试:

5

六、答辩与评分标准:

5

引言6

第一章需求分析6

1.1系统概述6

1.1.1概述6

1.2系统运行环境6

1.2.1运行环境6

1.3功能需求描述7

1.3.1功能需求7

第二章总体设计7

2.1开发与设计的总体思想7

2.1.1总体设计思路7

2.1.2屏幕的组成8

2.1.3形状的组成8

2.1.4形状的统一8

第三章概要设计9

3.1系统流程图9

3.2软件功能模块10

3.3系统功能模块10

第四章详细设计11

4.1.界面的设计11

4.1.1总体界面设计11

4.1.2界面棋子的设计11

4.2显示界面的准备13

4.2.1在窗体类中添加存放黑白棋两维数组和背景棋盘、黑棋、白棋位图对象13

4.2.2在窗体构造函数中初始化wb,装入棋盘、黑棋、白棋位图13

4.3显示棋盘和棋子代码13

4.4轮流下子代码14

4.5判断输赢15

4.5.1判断是否白棋胜代码15

4.5.2判断是否黑棋胜代码16

4.5.3判断是否平局代码17

4.6悔棋18

4.7重新开始18

4.8回放功能19

第五章测试分析20

结论和心得体会20

致谢21

参考文献22

 

课程设计任务书

一、课程设计题目:

五子棋游戏

二、目的与要求:

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.1系统概述

1.1.1概述:

本程序是一款棋类益智游戏程序,名为五子棋游戏,是采用C语言编写的可在WINDOWS系统下运行的娱乐游戏平台。

该程序面向广大棋类游戏的爱好者,能够提供方便,实现基本智能控制的游戏环境。

棋盘由若干网格构成,初始状态棋盘上无落子,玩家可以通过鼠标在棋盘的相应位置下子,一方为白色,另一方为黑色,先下的为黑子。

游戏过程中,一旦有一方的棋子在某一方向上先构成连续的五个棋子,不论横、竖或斜,就会在屏幕上显示是谁赢了比赛。

1.2系统运行环境

1.2.1运行环境

(1)硬件环境。

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

(2)软件环境。

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

在WindowsXPSP2环境下测试通过。

(3)只要计算机具有VisualC++6.0,本游戏软件在Windows平台下都可以运行。

1.3功能需求描述

1.3.1功能需求

五子棋是一种大众喜爱的游戏,其规则简单,变化多端,非常富有趣味性何消遣性,是一种两人对弈的纯策略型棋类游戏,是起源于中国古代的传统黑白棋种之一。

发展于日本,流行于欧美。

容易上手,老少皆宜,而且趣味横生,引人入胜;不仅能增强思维能力,提高智力,而且富含哲理,有助于修身养性。

近来随着计算机的快速发展,各种棋类游戏被纷纷请进了电脑,使得那些喜爱下棋,又常常苦于没有工具的棋迷们能随时过足棋瘾。

 

 在这里我也设计了一个较简单的五子棋游戏,这个游戏,不仅可以满足游戏爱好者对游戏的要求,同时我们增加了美观因素,让游戏有一个比较美观的界面,满足我们游戏爱好者的视觉要求,同时有悔棋和重新清盘开始的功能,更加方便了玩家的操作和游戏的有趣性。

 

第二章总体设计

2.1开发与设计的总体思想

2.1.1总体设计思路

棋盘设计为15*15格,初始状态棋盘的为空,玩家黑子先走,轮流落子,当一方连成五子或下满棋盘时,游戏结束(连成五子的一方获胜,下满棋盘为和棋)。

当游戏一方胜利后显示胜利信息。

从程序表面看,这是一个二维平面图,所以数据用二维数组来表示,数组两个下标可以表示棋盘上的位置,用坐标表示位置,数组元素的值代表棋格上的状态,共有三种情况,分别是0代表空格,1代表黑棋,2代表白棋。

这样程序的主要工作是接收棋手鼠标按键操作,棋手用鼠标控制光标移动,按键表示落子。

一旦接收到按键,说明棋手落子,先判断是否是有效位置,也就是说已经有棋子的位置不能重叠落子。

落子成功后,马上判断该棋盘上是否有相同颜色的棋子连成五子,如果连成五子,则游戏结束,输出相应的信息。

按确认后,自动调用清盘函数,此时清盘重新开始,输家先走。

在游戏中,如果玩家悔棋,则按下悔棋按钮,调用悔棋函数,将刚下的棋去掉,重下一子。

按下重新开始菜单,可清盘使游戏重新开始。

2.1.2屏幕的组成

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

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

此游戏的屏幕由15行15列的网格和菜单栏组成。

2.1.3形状的组成

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

2.1.4形状的统一

棋子的排列,如:

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

如图形状:

黑棋的四种情况:

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

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

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

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

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

图2.1

白棋的四种情况:

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

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

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

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

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

图2.2

 

第三章概要设计

3.1系统流程图

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

 

图3.1系统流程图

 

3.2软件功能模块

本游戏的软件功能模块如下:

 

图3.2软件功能图

 

3.3系统功能模块

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

图3.3系统功能图

 

第四章详细设计

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

4.1.界面的设计

4.1.1总体界面的设计

程序界面程序在启动运行时,系统会调用在资源视图中导入的围棋背景图片,使程序界面更加友好,在使用上给用户一种直观方便的感觉。

4.1.2界面棋子的设计

在资源视图中导入围棋的黑棋图片、白旗图片,使下子时调用此图片,使游戏更加直观有趣。

同时在窗口视图中添加显示透明色图片函数,是棋子图片更加逼真有趣。

显示透明色图片函数如下所示:

//显示透明色函数

voidPutBitmap(CDC*pDC,intx,inty,CBitmap*pBitmap,COLORREFcolor)

{COLORREFoldColor;

CBitmapbmAndBack,bmAndObject,bmAndMem,bmSave;

CDCmemDC,backDC,objectDC,saveDC,pieceDC;

BITMAPbm;

pBitmap->GetBitmap(&bm);

intnWidth=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.CreateBitmap(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);

saveDC.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(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在窗体类中添加存放黑白棋两维数组和背景棋盘、黑棋、白棋位图对象

intwb[15][15];

CBitmapBoard,Black,White;//背景棋盘、黑棋、白棋位图对象

4.2.2在窗体构造函数中初始化wb,装入棋盘、黑棋、白棋位图

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

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

wb[i][j]=0;//零表示空、1表示黑棋、2表示白棋

Board.LoadBitmap(IDB_CHESSBOARD);//装入背景位图

Black.LoadBitmap(IDB_BLACK);//装入黑棋位图

White.LoadBitmap(IDB_WHITE);//装入白棋位图

4.3.显示棋盘和棋子代码

在窗口OnDraw函数中添加显示棋盘和棋子代码

voidCChessView:

:

OnDraw(CDC*pDC)

{

CChessDoc*pDoc=GetDocument();

ASSERT_VALID(pDoc);

CDCmem;

mem.CreateCompatibleDC(pDC);

mem.SelectObject(&Board);

pDC->BitBlt(0,0,535,536,&mem,0,0,SRCCOPY);//绘制棋盘

for(inti=0;i<15;i++)//绘制棋子

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

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

PutBitmap(pDC,5+i*35,7+j*35,&Black,RGB(255,255,255));

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

PutBitmap(pDC,5+i*35,7+j*35,&White,RGB(255,255,255));

//TODO:

adddrawcodefornativedatahere

}

4.4.轮流下子代码

voidCChessView:

:

OnLButtonDown(UINTnFlags,CPointpoint)

{

//TODO:

Addyourmessagehandlercodehereand/orcalldefault

if(flag==1)

{

intx=(point.x-5)/35,y=(point.y-7)/35;//计算坐标

if(x<15&&y<15)//点击鼠标的位置在棋盘内

if(wb[x][y]==0)//且该位置还没有棋子

{

wb[x][y]=count%2+1;//设置成黑棋

jl[x][y]=count;

p[count].x=x;

p[count].y=y;

count++;

CDC*pDC;

pDC=this->GetDC();

PutBitmap(pDC,5+x*35,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();}

 

}

else

{

intx=(point.x-5)/35,y=(point.y-7)/35;//计算坐标

if(x<15&&y<15)//点击鼠标的位置在棋盘内

if(wb[x][y]==0)//且该位置还没有棋子

{

wb[x][y]=count%2+1;//设置成白棋

jl[x][y]=count;

p[count].x=x;

p[count].y=y;

count++;

CDC*pDC;

pDC=this->GetDC();

PutBitmap(pDC,5+x*35,7+y*35,&White,RGB(255,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判断是否白棋胜代码

intCChessView:

:

baisheng(inta[15][15])

{

inti,j;//判断横着的5个是否都相等

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

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

if(a[i][j]==2&&a[i][j+1]==2&&a[i][j+2]==2&&a[i][j+3]==2&&a[i][j+4]==2)

return1;

for(j=0;j<15;j++)//判断竖着的5个是否都相等

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

if(a[i][j]==2&&a[i+1][j]==2&&a[i+2][j]==2&&a[i+3][j]==2&&a[i+4][j]==2)

return1;

for(i=0;i<15;i++)//判断左斜5个

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

if(a[i][j]==2&&a[i+1][j+1]==2&&a[i+2][j+2]==2&&a[i+3][j+3]==2&&a[i+4][j+4]==2)

return1;

for(i=0;i<15;i++)//右斜5个

for(j=15;j>=0;j--)

if(a[i][j]==2&&a[i+1][j-1]==2&&a[i+2][j-2]==2&&a[i+3][j-3]==2&&a[i+4][j-4]==2)

return1;

return0;

}

4.5.2判断是否黑棋胜代码

intCChessView:

:

heisheng(inta[15][15])

{

inti,j;//判断横着的5个是否都相等

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

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

{if(a[i][j]==1&&a[i][j+1]==1&&a[i][j+2]==1&&a[i][j+3]==1&&a[i][j+4]==1)

return1;}

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

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

当前位置:首页 > 小学教育 > 语文

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

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