C++课程设计五子棋游戏Word格式.docx
- 文档编号:19501671
- 上传时间:2023-01-07
- 格式:DOCX
- 页数:21
- 大小:389.08KB
C++课程设计五子棋游戏Word格式.docx
《C++课程设计五子棋游戏Word格式.docx》由会员分享,可在线阅读,更多相关《C++课程设计五子棋游戏Word格式.docx(21页珍藏版)》请在冰豆网上搜索。
根据设计分析方案编写C++代码,然后调试该代码,实现课题要求的功能。
这一阶段在第4-7天完成。
3、总结报告阶段:
总结设计工作,写出课程设计说明书,要求学生写出需求分析、总体设计、详细设计、编程测试的步骤和内容。
这一阶段在第8-9天完成。
4、考核阶段。
这一阶段在第10天完成。
四、课程设计说明书要求
课程设计说明书包括课程设计的目的、意义和任务,软件开发工具介绍、任务分析、总体设计、详细设计、编程、调试的步骤和内容、课程设计总结、参考资料等,不符合以上要求者,则本次设计以不及格记。
具体格式参看《江苏大学课程设计说明书写作规范》
五、课程设计题目:
设计一个五子棋游戏
六、上机时间及地点
地点:
计算中心NA1NA2
上机时间:
19周星期四1234节
星期五12345678节
20周星期一5678节
星期二12345678节
星期三1234节
星期四12345678节
星期五1234节
七、答辩时间
20周星期六
摘要此课程设计的目的是为了达到熟练掌握C++语言的基本知识和C++调试技能;
基本掌握面向对象程序设计的基本思路和方法;
能够利用所学的基本知识和技能,解决简单的面向对象程序设计问题;
培养综合利用C++语言进行程序设计的能力,主要是培养利用系统提供的标准图形函数进行创新设计。
该游戏软件在Windows系统为玩家提供传统五子棋游戏的基本功能,在这简单的五子棋中,玩家通过鼠标进行两个人的游戏。
游戏的主战场为15行15列的棋盘,初始状态棋盘上无落子,进入游戏后,默认黑棋先下,也可由玩家选择先下的棋子,然后轮流落子,一旦有一方的棋子在某一方向上构成连续的五个棋子,则该方胜利,游戏结束并重新开始,如果有输赢,则输出谁胜,否则,输出平局的信息框。
游戏还有悔棋和重新开始的的功能。
另外,在游戏中还有背景音乐,运行时自动播放,也可通过工具栏按钮关闭。
还可以保存和读取游戏文件功能。
关键词:
五子棋;
视窗操作系统;
悔棋;
双人游戏。
AbstractThiscourseisdesignedinordertomasterthebasicknowledgeofthec++languagetestingskills;
andc++Basicgraspofobjectorientedprogrammingbasictrainofthoughtandmethod;
Canuseofmyknowledgeofthebasicknowledgeandskills,solvesimpleobject-orientedprogramdesignproblem;
Usingc++languagetrainingcomprehendsiveprogramdesignability,ismainlyusethesystemtoprovidethetrainingofstandardgraphicsfunctionsofinnovationdesign.ThisgamesoftwareonWindowssystemforplayerswithtraditionalrenjugame,thebasicfunctionofinthissimplerenjuplayersthroughthemouse,twopersonalgame.Themainbattlefieldgamesforline15to15listedintheboard.Thegameisover,ifaloser,theoutputwhowins,otherwise,theoutputofthedrawinformationbox.
Keywords:
Gobang;
WindowsSystem;
Takeback;
thegameofTwopeopleplaying
引言
随着经济时代的发展,人们的精神压力越来越大,精神上得不到应有的放松,精神生活得不到极大的满足,随着计算机技术的飞速发展,计算机已逐渐成为人们办公不可或缺的工具,因此及时的开发一些应用于计算机上的小型游戏软件,以供人们在办公的闲暇时间得到充分的休闲娱乐。
而棋类因为其兼具动脑并且娱乐的双重功效,并且十分符合现代式生活,因此已经得到越来越多人的欢迎,为此我们开发一个简单的五子棋游戏,开发此五子棋游戏软件的目的,主要是供办公人员与同事一起休闲娱乐,增进友谊、减轻疲劳,以提高工作效率,创造更多的社会财富,造福人类。
查阅有关程序设计的案例资料,进一步理解程序设计模块化的思想,并利用此思想,根据对程序设计课程的学习,编写一个简单的游戏软件系统。
通过本设计可以加深理解利用程序设计思想开发一个系统的整个流程,提高分析问题、解决问题和实际动手的能力。
在下面的各章中我们将以开发一个五子棋游戏为例,谈谈其开发过程和所涉及到的问题及解决方法。
第一章需求分析
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种形状(黑白的形状归为不同的形状)。
如图形状:
黑棋的四种情况:
●●●●●●○○○○●○○○○○○○○●
○○○○○●○○○○○●○○○○○○●○
○○○○○●○○○○○○●○○○○●○○
○○○○○●○○○○○○○●○○●○○○
○○○○○●○○○○○○○○●●○○○○
白棋的四种情况:
○○○○○○●●●●○●●●●●●●●○
●●●●●○●●●●●○●●●●●●○●
●●●●●○●●●●●●○●●●●○●●
●●●●●○●●●●●●●○●●○●●●
●●●●●○●●●●●●●●○○●●●●
第三章概要设计
3.1系统流程图
系统流程图是对系统的大致流程进行描述,本游戏的系统流程图如下:
3.2软件功能模块
本游戏的软件功能模块如下:
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.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);
pieceDC,0,0,SRCPAINT);
pDC->
BitBlt(x,y,nWidth,nHeight,&
memDC,0,0,SRCCOPY);
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<
j++)
wb[i][j]=0;
//零表示空、1表示黑棋、2表示白棋
Board.LoadBitmap(IDB_BITMAP1);
//装入背景位图
Black.LoadBitmap(IDB_BITMAP2);
//装入黑棋位图
White.LoadBitmap(IDB_BITMAP3);
//装入白棋位图
4.3.显示棋盘和棋子代码
在窗口OnDraw函数中添加显示棋盘和棋子代码
voidCChessView:
:
OnDraw(CDC*pDC)
{
CChessDoc*pDoc=GetDocument();
ASSERT_VALID(pDoc);
CDCmem;
mem.CreateCompatibleDC(pDC);
mem.SelectObject(&
Board);
BitBlt(0,0,535,536,&
mem,0,0,SRCCOPY);
//绘制棋盘
i++)//绘制棋子
j++)
if(wb[i][j]==1)
PutBitmap(pDC,5+i*35,7+j*35,&
Black,RGB(255,255,255));
elseif(wb[i][j]==2)
White,RGB(255,255,255));
//TODO:
adddrawcodefornativedatahere
4.4.轮流下子代码
voidCFivechessView:
OnLButtonDown(UINTnFlags,CPointpoint)
Addyourmessagehandlercodehereand/orcalldefault
if(RightORLet==0)//如果鼠标状态为0,黑棋先下
{
intx=(point.x-5)/35,y=(point.y-7)/35;
//计算坐标
if(x<
15&
&
y<
15)//点击鼠标的位置在棋盘内
if(wb[x][y]==0)//且该位置还没有棋子
{
for(inti=0;
for(intj=0;
if(jl[i][j]==count)
a[i][j]=0;
wb[x][y]=1;
//设置成黑棋
a[x][y]=1;
count++;
jl[x][y]=count;
CDC*pDC;
pDC=this->
GetDC();
PutBitmap(pDC,5+x*35,7+y*35,&
//显示该棋子
Red,RGB(255,255,255));
CView:
OnLButtonDown(nFlags,point);
if(heisheng(wb)==1)
{
this->
MessageBox("
黑子胜"
"
完成"
MB_OK);
OnStart();
}
if(ping(wb)==1)
MessageBox("
平局"
RightORLet++;
//鼠标状态变为1
}
}
else//如果鼠标状态为1,则下白棋
wb[x][y]=2;
//设置成白棋
a[x][y]=2;
Green,RGB(255,255,255));
if(baisheng(wb)==1)
白子胜"
RightORLet--;
//鼠标状态变为0
}
4.5.判断输赢
此功能用来判断当某一方下完子后在八个方向上是否有连成五个子的可能性,若连成五子则执此棋子方获胜;
或者棋盘下满为和局。
4.5.1判断是否白棋胜代码
intCFivechessView:
heisheng(inta[15][15])
{
inti,j;
//判断横着的5个是否都相等
for(i=0;
i++)
for(j=0;
11;
{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++)//判断竖着的5个是否都相等
for(i=0;
{if(a[i][j]==1&
a[i+1][j]==1&
a[i+2][j]==1&
a[i+3][j]==1&
a[i+4][j]==1)
i++)//判断左斜5个
j++){if(a[i][j]==1&
a[i+1][j+1]==1&
a[i+2][j+2]==1&
a[i+3][j+3]==1&
a[i+4][j+4]==1)
i++)//右斜5个
for(j=14;
j>
=4;
j--){if(a[i][j]==1&
a[i+1][
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 课程设计 五子棋 游戏