c++课程设计五子棋游戏.docx
- 文档编号:9476432
- 上传时间:2023-02-04
- 格式:DOCX
- 页数:42
- 大小:333.22KB
c++课程设计五子棋游戏.docx
《c++课程设计五子棋游戏.docx》由会员分享,可在线阅读,更多相关《c++课程设计五子棋游戏.docx(42页珍藏版)》请在冰豆网上搜索。
c++课程设计五子棋游戏
一、课程设计目的、任务和内容要求:
《计算机语言程序设计》是一门以编程实践为主的专业课,目的在于培养学生利用计算机语言进行软件开发所必需的基本思想和基本技能,进一步提高综合应用计算机语言的各种编程知识和技巧进行程序设计的能力,通过本次课程设计,学生应能达到具备设计功能较为复杂的应用程序的能力,同时培养学生自主学习和独立创新的精神。
任务如下:
1.进行需求分析和概要设计,给出流程图。
2.写出详细设计,熟悉其中采用的关键技术。
3.给出具体的编码实现并调试。
4.写课程设计报告提交源程序。
内容要求:
设计并完成软件系统。
要求:
1.应具有简洁友好的用户界面。
2.要求软件系统的功能完整。
3.要求程序具备正确性,可读性和运行的高效性。
二、进度安排:
第1~3天:
查找资料,进行需求分析和概要设计;
第4~6天:
各模块的详细设计;
第7~12天:
软件实现与调试;
第13~14天:
写课程设计报告并提交源程序。
三、主要参考文献:
[1]四维科技,丁展,汤倩.VisualC++ 游戏开发技术与实例[M].北京:
人民邮电出版社,2005
[2]求是科技,张宏林.VisualC++6.0程序设计与开发技术大全[M]. 北京:
人民邮电出版社,2005
[3]汪翔,袁辉.VisualC++实践与提高(网络编程篇)[M].北京:
中国铁道出版社,2001
[4]黄维通.VisualC++面向对象与可视化程序设计[M].北京:
清华大学出版社,2003
[5]谢希任.计算机网络(第4版)[M].北京:
电子工业出版社,2005
[6](美)W.RichardStevens.TCP/IP详解卷1:
协议[M]. 北京:
机械工业出版社,2005
[7]北京现代富博科技有限公司,陈兵旗,孙明.北京:
VisualC++实用图象处理专业教程[M].清华大学出版社,2004
[8]张静.Windows多媒体编程基础[M].北京:
清化大学出版社,2005
[9]刘振安,徐峰.Windows实用编程指南[M].北京:
人民邮电出版社,1995
[10]刘长明,杨工明.VisualC++实践与提高(多媒体篇)[M].北京:
中国铁道出版社,2001
指导教师签字:
年月日
摘要……………………………………………………………………………………… II
Abstract …………………………………………………………………………………... II
1绪论 …………………….……………………………………..1
1.1 课题背景 …………………………………………………………………………...1
1.2课程设计的目的…………………………………………..………………………… 1
2设计方案简述 ………………………………………..…………………..2
2.1可行性分析………………………………………………..………………………….2
2.2需求分析…………………………………………………..………………………….2
3详细设计……………………………………………………………..………………..3
3.1窗体设计………………………………………………..……………………………..3
3.2游戏项目开发………………………………………..…………………………………5
3.2.1棋牌设置…………………………………………………………………………..…5
3.2.2放置棋子功能的开发………………………………………………………………..6
3.3.3游戏获胜决断的开发…………………………………………………….……….12
3.2.4游戏的调试与运行………………………………………….……………20
4 设计结果及分析………………………………………………..…….……………22
4.1程序的结果……………………………………….………………………………..22
4.2结果分析…………………………………………..………………………………..23
5总结……..…………………………………………………..………………………24
参考文献…….………………..………………………………..………………………25
摘要
网络游戏的出现代表了一种全新娱乐方式的诞生。
目前网络游戏正以其独特的魅力吸引着众多的玩家。
随着游戏产业的蓬勃发展,将需要越来越多的人加入到游戏开发中来。
本毕业设计所完成的五子棋游戏(网络版)是在Windows XP下使用MicrosoftVisualC++6.0开发的C/S系统,可以实现网络间的双人对战,并且可以提供多媒体播放功能。
系统的多媒体播放功能可以播放MP3、WMA等主流格式的音乐。
本论文从基本网络套节字开始入手,介绍了一些本系统相关的理论知识,随后详细介绍了五子棋游戏(网络版)的开发过程。
包括服务器端、客户端的socket编程,五子棋服务器和客户端通信的实现,五子棋判断算法的实现,主界面视图,多媒体播放以及定时器等附加功能的实现。
最后对系统进行测试并对所做工作进行总结。
关键词 程序设计;Fivechess;MFC;
Abstract
Abstract
On-linegames bringtoanew formofentertainment.Untilnow,on-linegamesischarmingmoreand moreplayers.Asthe developmentofgame industry,therewillbemore andmore developersjoin inthegame developmentteam.
The on -lineBlack&WhitegamewasdevelopedbyMicrosoftVisualC++6.0onWindows XP platform.In thisgame, twopeople can play the gameonline,andthe gamealso provides multimediaplayerfunction.
Thethesisstart withintroductionofnetwork socketprogramming, the developmentprocessingofthe on -lineBlack&Whitegameareintroducedindetailasfollowed.Thethesishaveafulltouchonserverand clientsocketprogramming,the communicationbetweenserverand clientwasimplemented,thealgorithmof thefive-in-a-rowgame,themultimediaplaybackfunctions.
Keywords:
program;computer; MFC;Fivechess
1绪论
娱乐是人类不可或缺的生活内容,目前市场上的游戏种类繁多读者将所学的语言应用到实际,用学习的c++语言编程开发一个简易的计算机单机游戏,即五子棋游戏。
1.1课题背景
中国民族原创网络游戏为中国网络游戏产业所做出了巨大贡献,民族原创网络游戏已经成为产业发展的主导力量。
同样在中国自主研发的民族原创网络游戏已经真正成为中国游戏市场的主导力量。
网络游戏是通过信息网络传播和实现的互动娱乐形式,是一种网络与文化相结合的产业。
近年来,网络文化市场发展很快,随着互联网的迅速普及、宽带的接入社区和家庭,我国网络游戏市场发展迅速并进入了一个高速增长期,并已经创造了较大的产值,带动了相关产业的发展,对促进我国网络经济和娱乐业的发展、丰富互联网时代人民群众的文化娱乐生活起到了积极作用。
1.2 课程设计目的
在程序设计中,通过设计、编制、调试一个五子棋的程序,加深对语法及语义分析原理的理解,并实现对命令语句的灵活应用。
在程序设计中,可以用两种方法解决问题:
一是传统的结构化程序设计方法,二是更先进的面向对象程序设计方法。
由于多个函数均需要访问某些数据,这些数据常被设计为全局变量。
而在面向对象程序设计中关键是如何将问题域中的实体(即日常所见的概念)抽取出来,作为C++程序中的类,而属性与行为作为类的两类要素通常是必不可少的,甚至还应考虑类必须满足的约束。
2 设计方案简述
如下是描述整五子棋游戏的流程,开发一个五子棋游戏需要从两方面入手。
一是游戏规则,二是技术。
其实,任何软件开发都是这两大类。
根据项目的特点,将不相关的功能分块份阶段进行。
大致流程如下:
1.画棋盘;2画棋子;3增加下棋制约条件;4.每下一步,判断输赢;5.调试运行。
2.1 可行性分析
游戏设计已经成为现在社会的一种热门行业。
五子棋是一种受大众广泛喜爱的游戏,其规则简单,变化多端,非常富有趣味性和消遣性。
这里设计和实现了一个简单的五子棋单机游戏。
主要应用了VisualC++编程来完成这个游戏的设计的。
本文主要介绍了本游戏开发环境MicrosoftVisualC++6.0,使用当前优秀的开发工具VC++编程。
包含了五子棋程序的棋盘初始化、游戏规则、胜负判断。
思路简单明了,程序也较为简单。
可以灵活运用一学过的c++知识来编写程序。
2.2需求分析
近年来,随着网络的发展,游戏成为许多人关注的焦点。
与传统的影音产业一样,游戏产业也是娱乐行业的一个重要组成部分,基于数字化的网络游戏更让人们找到了前所未有的感受,并已经成为全球互联产业的热点。
五子棋,亦称“连五子”、“串珠”、“五目”、“五格”等等,日文称之为“连珠”,英文则称之为“Gobang”或“Renju”或“FIR(FiveIna Row)”,是起源于中国古代的传统黑白棋种之一,是一种体现民族特色的休闲游戏,同时能较好的锻炼人的思维。
具有广阔的开发前景。
3详细设计
3.1窗体设计
利用MFCAppWinzard生成五子棋游戏应用程序框架具体步骤如下:
(1)执行VC程序,选择File|New命令,弹出New对话框.单击Projects标签,转到Projects选项卡,选择MFC AppWizard(exe)选项,然后在Projectname文本框中输入Fivechess_44。
Lacation文本框是指项目的本地路径。
(2)单击按钮,弹出MFCAppWinzard_Step1对话框。
选中单选按钮,如图所示。
(3)单击完成按钮,则建立一个单文档应用框架。
3.2游戏项目开发(四号字黑体)
3.2.1棋盘设计
1.在已创建的工程Fivechess_44中添加画棋盘的函数。
首先在“Fivechess_44.h”头文件中定义一个用于显示棋盘的自定义公有函数:
voidCheckerboard(CDC*pDC);
然后在“Fivechess_44View.cpp”源文件中实现该函数。
代码如下:
voidCFivechess_44View:
:
Checkerboard(CDC*pDC)
{
ﻩfor(int i=0;i<20;i++) //连续画20条竖线
{
ﻩﻩpDC->MoveTo(i*50,0); //画笔移动到(i*50,0)点
pDC->LineTo(i*50,1000);//画笔从(i*50,0)点到(i*50,1000)点
ﻩ }
for(i=0;i<20;i++) //连续画20条横线
{
ﻩpDC->MoveTo(0,i*50);
ﻩpDC->LineTo(1000,i*50);
}
}
2.在应用程序框架的OnDraw()函数中调用该画棋盘函数,将pDC对象作为实参传递给Checkerboard()函数,代码如下:
voidCFivechess_44View:
:
OnDraw(CDC*pDC)
{
ﻩCFivechess_44Doc*pDoc=GetDocument();
ASSERT_VALID(pDoc);
//TODO:
adddrawcodefornativedatahere
Checkerboard(pDC); //调用自定义的画键盘函数
}
3.编译运行得到如下效果:
一个空棋盘
3.2.2放置棋子功能的开发
按照规划,棋子使用鼠标的左键和右键(分别用这两键来表示下棋的双方)来进行单机下棋,即是当用户单击左键时,下黑色棋子,,用户单击右键时,下白色棋子。
因此,必须为鼠标添加鼠标左键和鼠标右键单击的鼠标消息处理函数,步骤如下:
1.右击CFivechessView类,调用添加消息处理函数的对话框,选择AddwindowsMessageHandler
2.添加消息处理函数WM_LBUTTONDOWN和WM_RBUTTONDOWN这两个消息处理函数。
然后点击EditExisiting退出对话框。
并添加消息处理函数代码。
如下图所示:
添加鼠标左键和右键的消息处理函数:
(1).左键消息
voidCFivechess_44View:
:
OnLButtonDown(UINT nFlags,CPoint point)
{//TODO:
Add yourmessagehandlercodehereand/or calldefault
ﻩCBrush*brush=newCBrush(RGB(0,0,0));//定义黑色画刷
ﻩﻩCDC*pDC=this->GetDC(); //获取当前的图形设备指针
ﻩﻩpDC->SelectObject(brush); //选中该黑色画刷
ﻩfor(inti=0;i< 1000 ;i+=50)
{for(intj =0;j <1000;j+=50)
ﻩﻩﻩ{CRectrect(i,j,i+50,j+50);
if(rect.PtInRect(point))
{CPoint tempPoint;
ﻩﻩtempPoint=rect.CenterPoint();
ﻩpDC->Ellipse(tempPoint.x-20,tempPoint.y-20,tempPoint.x+20,tempPoint.y+20);
ﻩﻩ }
ﻩﻩ}
}
CView:
:
OnLButtonDown(nFlags,point);
}
(2).右键消息
voidCFivechess_44View:
:
OnRButtonDown(UINTnFlags,CPointpoint)
{
//TODO:
Addyourmessagehandlercodehereand/orcalldefault
CBrush* brush= newCBrush(RGB(255,255,255)) ;//定义白色画刷
ﻩCDC* pDC = this->GetDC(); //获取当前的图形设备指针
ﻩpDC->SelectObject(brush); //选中该白色画刷
ﻩﻩfor(int i=0 ;i<1000; i+=50)
{
for(int j= 0 ; j<1000; j+=50)
{
CRectrect(i,j,i+50,j+50);//每格都信定义一矩形
if(rect.PtInRect(point)) //如果鼠标点在该矩形内
{ CPointtempPoint;
ﻩﻩtempPoint=rect.CenterPoint();//获取矩形中心,用于画棋子
ﻩﻩpDC->Ellipse(tempPoint.x-20,tempPoint.y-20,tempPoint.x+20,tempPoint.y+20);
ﻩﻩﻩ }
ﻩﻩ}
}
ﻩCView:
:
OnRButtonDown(nFlags,point);
}
到此便将画棋盘和棋子的代码编好,编译运行如下:
左击鼠标左键画黑点,右击鼠标右键画白点
3.但程序至此尚有两点未解决:
其一,下棋子的约束条件,即双方按顺序一人下一次才可第二次落棋子。
其二,同一方格不能重复下棋子;
解决第一个问题,添加以下代码:
(1)在CFivechess_44View中添加一个公有的整形变量
int RightORLet; //定义保存左键或右键下棋的标记变量
(2)构造函数将下棋的顺序初始化为左键先下
CFivechess_44View:
:
CFivechess_44View()
{
// TODO:
addconstructioncodehere
RightORLet=0; //初始化默认左键先下
}
(3)修改鼠标的左键和右键的单击消息处理函数,在画棋子之前判断轮到哪方下棋,代码如下:
左键代码:
voidCFivechess_44View:
:
OnLButtonDown(UINT nFlags,CPointpoint)
{
//TODO:
Addyour message handlercodehereand/orcall default
if(RightORLeft==0)
{
ﻩCBrush* brush=newCBrush(RGB(0,0,0));//定义黑色画刷
ﻩCDC*pDC= this->GetDC(); //获取当前的图形设备指针
pDC->SelectObject(brush); //选中该黑色画刷
ﻩﻩfor(int i= 0;i<1000 ;i+=50)
ﻩﻩ{
ﻩfor(intj = 0; j<1000;j+=50)
ﻩ{
ﻩﻩCRect rect(i,j,i+50,j+50);
if(rect.PtInRect(point))
{CPointtempPoint;
ﻩﻩtempPoint=rect.CenterPoint();
ﻩpDC->Ellipse(tempPoint.x-20,tempPoint.y-20,tempPoint.x+20,tempPoint.y+20);
ﻩ }
ﻩﻩ}
ﻩﻩ}
RightORLeft++;//鼠标状态变化为0
}
CView:
:
OnLButtonDown(nFlags,point);
}
右键代码:
voidCFivechess_44View:
:
OnRButtonDown(UINTnFlags,CPointpoint)
{
ﻩ//TODO:
Addyourmessagehandlercodehere and/or calldefault
if(RightORLeft==1)
{ CBrush* brush=newCBrush(RGB(255,255,255));//定义白色画刷
ﻩCDC*pDC=this->GetDC(); //获取当前的图形设备指针
ﻩpDC->SelectObject(brush); //选中该白色画刷
ﻩﻩfor(inti= 0;i<1000;i+=50)
{
ﻩﻩfor(intj=0; j< 1000;j+=50)
ﻩﻩ{
ﻩﻩCRectrect(i,j,i+50,j+50);//每格都信定义一矩形
if(rect.PtInRect(point))//如果鼠标点在该矩形内
{CPointtempPoint;
ﻩﻩﻩtempPoint= rect.CenterPoint();//获取矩形中心,用于画棋子
ﻩﻩpDC->Ellipse(tempPoint.x-20,tempPoint.y-20,tempPoint.x+20,tempPoint.y+20);
ﻩ }
}
ﻩﻩ}
RightORLeft--;//鼠标状态变化为1,鼠标右键按下后,再次改变鼠标状态
ﻩ
}
CView:
:
OnRButtonDown(nFlags,point);
}
其二,解决第二个问题:
(1)
在Fivechess_44View.h头文件中加入3行公有代码,并且在该头文件中包含vector的头文件,代码如下:
# include classCFivechess_44View: publicCView { …………; std: : vector bool isLocation(CPointcp); ﻩ voidLocation(CPointcp); ………..; } (2)根据函数名在正确位置添加或修改以下函数 <1>.添加实现放置棋子函数额判断放置许可函数: boolCFivechess_44View: : isLocation(CPointcp) { bool isLoc = true; for(inti=0 ;i { ﻩﻩif(cp.x==chessVec[i].x&&cp.y== chessVec[i].y) ﻩ{ ﻩﻩisLoc= false; ﻩﻩ} ﻩ} ﻩreturnisLoc ; } voidCFivechess_44View: : Location(CPointcp) { chessVec.push_back(cp); } <2>修改鼠标左键和右键单击的消息处理函数代码如下,并注意为了消除该缺陷,“鼠标消息标志变量变化”的位置有所改变,代码如下,该代码已经将下棋的全部约束条件全部实现了。 voidCFivechess_44View: : OnLButtonDown(UINT nFlags, CPointpoint) { // TODO: Addyourmessagehandlercode hereand/or call default if(RightORLeft==0) ﻩ{ CBrush*brush=newCBrush(RGB(0,0,0));//定义黑色画刷
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- c+ 课程设计 五子棋 游戏