c++课程设计五子棋游戏.pdf
-一、课程设计目的、任务和内容要求:计算机语言程序设计是一门以编程实践为主的专业课,目的在于培养学生利用计算机语言进行软件开发所必需的基本思想和基本技能,进一步提高综合应用计算机语言的各种编程知识和技巧进行程序设计的能力,通过本次课程设计,学生应能达到具备设计功能较为复杂的应用程序的能力,同时培养学生自主学习和独立创新的精神。任务如下:1.进行需求分析和概要设计,给出流程图。2.写出详细设计,熟悉其中采用的关键技术。3.给出具体的编码实现并调试。4.写课程设计报告提交源程序。内容要求:设计并完成软件系统。要求:应具有简洁友好的用户界面。2要求软件系统的功能完整。3.要求程序具备正确性,可读性和运行的高效性。-二、进度安排:第 13 天:查找资料,进行需求分析和概要设计;第 46 天:各模块的详细设计;第 712 天:软件实现与调试;第 1314 天:写课程设计报告并提交源程序。三、主要参考文献:1 四维科技,丁展,汤倩.Vual C+游戏开发技术与实例M.北京:人民邮电出版社,0052求是科技,张宏林.VisulC+6.0 程序设计与开发技术大全M.北京:人民邮电出版社,2005汪翔,袁辉Vsal C+实践与提高(网络编程篇)M.北京:中国铁道出版社,00黄维通.Visu C+面向对象与可视化程序设计M 北京:清华大学出版社,2005谢希任计算机网络(第 4 版)北京:电子工业出版社,2005(美)W.Rihard StevensTCP/IP 详解卷:协议M.北京:机械工业出版社,25北京现代富博科技有限公司,陈兵旗,孙明.北京:Visal C+实用图象处理专业教程.清华大学出版社,2004张静.Widow多媒体编程基础M.北京:清化大学出版社,205刘振安,徐峰.Winws 实用编程指南M.北京:人民邮电出版社,19950刘长明,杨工明.Vis+实践与提高(多媒体篇)M 北京:中国铁道出版社,01指导教师签字:-年月日-目目录录摘要 IAbstt.II1 绪论.11.1 课题背景.1.2课程设计的目的 2 设计方案简述 .2.1 可行性分析.2.2需求分析.23详细设计.3.1 窗体设计.33.2 游戏项目开发 .2.1 棋牌设置.5 2.2 放置棋子功能的开发.63.3.3 游戏获胜决断的开发.122.4 游戏的调试与运行204 设计结果及分析.241 程序的结果.224.2 结果分析.235 总 结.2参考文献.5-摘要网络游戏的出现代表了一种全新娱乐方式的诞生。目前网络游戏正以其独特的魅力吸引着众多的玩家。随着游戏产业的蓬勃发展,将需要越来越多的人加入到游戏开发中来。本毕业设计所完成的五子棋游戏(网络版)是在 Winows XP 下使用 Microsot iual C+.开发的 C/系统,可以实现网络间的双人对战,并且可以提供多媒体播放功能。系统的多媒体播放功能可以播放 MP3、WA 等主流格式的音乐。本论文从基本网络套节字开始入手,介绍了一些本系统相关的理论知识,随后详细介绍了五子棋游戏(网络版)的开发过程。包括服务器端、客户端的 oke编程,五子棋服务器和客户端通信的实现,五子棋判断算法的实现,主界面视图,多媒体播放以及定时器等附加功能的实现。最后对系统进行测试并对所做工作进行总结。关键词程序设计;Fvees;FC;AtracAbstAbsta at tOn-le gms ring o anwform f entetament.Unl n,onlin game is charmin morend mre laye As th developmenof game nusry,ter wll be mreand moredevlers joininthem vome eamh onlin lck&ite game was developed byMicrosot isl C+6.o Wow Xplatform.I hs gme,tw popl canpath ame on lin,and the game lso provie mlieda player funtion.Te sstrt wit inroducinof networ socke progamming,the developmentprocessn o the on-line Black&Whitegam re nrodcdin etail s follod.hethssea fu tuch on sver ndcietsockt programming,thecommunication betwen server an lient wsimplemnted,t algorim oft iea-gam,te multimeda lybck fnins.KeywKeywrdsrds:progrm;comter;MC;Fichess-1 绪论娱乐是人类不可或缺的生活内容,目前市场上的游戏种类繁多读者将所学的语言应用到实际,用学习的 c+语言编程开发一个简易的计算机单机游戏,即五子棋游戏。1.课题背景中国民族原创网络游戏为中国网络游戏产业所做出了巨大贡献,民族原创网络游戏已经成为产业发展的主导力量。同样在中国自主研发的民族原创网络游戏已经真正成为中国游戏市场的主导力量。网络游戏是通过信息网络传播和实现的互动娱乐形式,是一种网络与文化相结合的产业。近年来,网络文化市场发展很快,随着互联网的迅速普及、宽带的接入社区和家庭,我国网络游戏市场发展迅速并进入了一个高速增长期,并已经创造了较大的产值,带动了相关产业的发展,对促进我国网络经济和娱乐业的发展、丰富互联网时代人民群众的文化娱乐生活起到了积极作用。.2.2课程设计目的在程序设计中,通过设计、编制、调试一个五子棋的程序,加深对语法及语义分析原理的理解,并实现对命令语句的灵活应用。在程序设计中,可以用两种方法解决问题:一是传统的结构化程序设计方法,二是更先进的面向对象程序设计方法。由于多个函数均需要访问某些数据,这些数据常被设计为全局变量。而在面向对象程序设计中关键是如何将问题域中的实体(即日常所见的概念)抽取出来,作为 C+程序中的类,而属性与行为作为类的两类要素通常是必不可少的,甚至还应考虑类必须满足的约束。-设计方案简述如下是描述整五子棋游戏的流程,开发一个五子棋游戏需要从两方面入手。一是游戏规则,二是技术。其实,任何软件开发都是这两大类。根据项目的特点,将不相关的功能分块份阶段进行。大致流程如下:1.画棋盘;2 画棋子;增加下棋制约条件;.每下一步,判断输赢;.调试运行。.可行性分析游戏设计已经成为现在社会的一种热门行业。五子棋是一种受大众广泛喜爱的游戏,其规则简单,变化多端,非常富有趣味性和消遣性。这里设计和实现了一个简单的五子棋单机游戏。主要应用了 Visual C+编程来完成这个游戏的设计的。本文主要介绍了本游戏开发环境 Mrost VisuaC+.,使用当前优秀的开发工具VC+编程。包含了五子棋程序的棋盘初始化、游戏规则、胜负判断。思路简单明了,程序也较为简单。可以灵活运用一学过的 c+知识来编写程序。2.22.2 需求分析近年来,随着网络的发展,游戏成为许多人关注的焦点。与传统的影音产业一样,游戏产业也是娱乐行业的一个重要组成部分,基于数字化的网络游戏更让人们找到了前所未有的感受,并已经成为全球互联产业的热点。五子棋,亦称“连五子”、“串珠”、“五目”、“五格”等等,日文称之为“连珠”,英文则称之为“Gobag”或“Renu”或“IR(eIna R)”,是起源于中国古代的传统黑白棋种之一,是一种体现民族特色的休闲游戏,同时能较好的锻炼人的思维。具有广阔的开发前景。-详细设计31窗体设计利用 MF AppWinzar生成五子棋游戏应用程序框架具体步骤如下:()执行 VC 程序,选择命令,弹出 New 对话框.单击ject标签,转到roject选项卡,选择 MC AppWiard(x)选项,然后在 Proj na文本框中输入Fiehes44。acatin 文本框是指项目的本地路径。-(2)单击按钮,弹出 MFCAppinzrd_Ste1 对话框。选中单选按钮,如图所示。(3)单击完成按钮,则建立一个单文档应用框架。-3.2 游戏项目开发(四号字 黑体).2.棋盘设计1在已创建的工程 Fiechess44 中添加画棋盘的函数。首先在“Fivess_44.h”头文件中定义一个用于显示棋盘的自定义公有函数:void Checkerbord(CDpDC);然后在“Fiechess_44w.cpp”源文件中实现该函数。代码如下:vidCFivecess_w::heckrboad(C*pDC)fr(int=0;iovo(i*5,0);/画笔移动到(i50,)点DC-LineT(*50,100);/画笔从(i50,)点到(i*5,1000)点 fo(i=0;iLineTo(1000,i5);.在应用程序框架的 OnDw()函数中调用该画棋盘函数,将 pDC 对象作为实参传递给 Checeroard()函数,代码如下:vid ivechess_44Vw:Daw(CDC DC)Civechess4Do*Dc=eDoumet();SET_VALID(po);/TOO:ddraw code for ate data eheckbrd(pC);/调用自定义的画键盘函数.编译运行得到如下效果:一个空棋盘-322 放置棋子功能的开发按照规划,棋子使用鼠标的左键和右键(分别用这两键来表示下棋的双方)来进行单机下棋,即是当用户单击左键时,下黑色棋子,,用户单击右键时,下白色棋子。因此,必须为鼠标添加鼠标左键和鼠标右键单击的鼠标消息处理函数,步骤如下:1.右击 CFvehesiew 类,调用添加消息处理函数的对话框,选择 Ad wndow essaeHandr2.添加消息处理函数 M_LBUTTOW和M_BUTTONDOW这两个消息处理函数。然后点击Et siting 退出对话框。并添加消息处理函数代码。如下图所示:添加鼠标左键和右键的消息处理函数:(1).左键消息vid Ciechess_44iw::OnLButtonDon(INT Fags,CPinpoit)/TODO:ddoumesagehadlr d here ando call defaltCBush*brush=neCBuh(RGB(0,0,0);/定义黑色画刷CDC*C thisDC();/获取当前的图形设备指针pDC-SeectObect(brush);/选中该黑色画刷for(inti=0;i 100;i+=50)for(i=0;j Ellipe(temPin.x-20,tmpPoint 20,Poin.+20,tempPoy+2);-Cew:OnLButono(nFgs,pont);(2).右键消息voidCivss_44Vew:ORButnDown(UIN nFas,CPipont)/TODO:A ou mesg hale ce ered/or callefaultBrush*brush ewCruh(R(255,255,255);/定义白色画刷CDC*pDC=this-tD();/获取当前的图形设备指针D-ectOect(sh);选中该白色画刷for(inti=0;1000;i+=0)for(nt j=0;jetDC();/获取当前的图形设备-指针D-elcObjct(ruh);/选中该黑色画刷fr(int i 0;i 10;+=5)for(int =0;jEllpe(tempPoint.x-0,tpPointy-2,tempPinx+0,temPnt.+2);RightORLeft+;/鼠标状态变化为Cie:OnLButtonDown(Fas,poit);右键代码:voidCFiecs_44Viw:OnRBunon(UNTnFlags,CPoint poit)/TOO:Ad you mesage haner cod hee andral dfaltif(RighLeft=1)CBrsh*brsh new CBruh(RB(255,2,25);/定义白色画刷CD C this-GtD();/获取当前的图形设备指针p-SelecObjec(bru);/选中该白色画刷fr(in i=0;i1000;i+5)fr(int j 0;jEllipse(tepPit.x-2,empPoit.y-20,temoint.x+,mpPnty20);-RhtOeft-;/鼠标状态变化为 1,鼠标右键按下后,再次改变鼠标状态CView::OnRuttonow(nla,point);其二,解决第二个问题:(1)在iveches_44Vew.h 头文件中加入行公有代码,并且在该头文件中包含 vectr的头文件,代码如下:#nludlas CFivecess_44Viw:public C;st:ecr chessVec;bool i Loatn(CPoint cp);vd Loatio(Coint cp);.;(2)根据函数名在正确位置添加或修改以下函数.添加实现放置棋子函数额判断放置许可函数:bo Fvechss44View:Loin(CPinc)bolisLo=ru;for(nt i=0;i chesse.iz();i+)if(cp.x=hesecix&cp.y cesVei.)ioc fal;tunLo;oid Fivess_44Vw:Laion(CPoint p)chessVcpush_bak(cp);-修改鼠标左键和右键单击的消息处理函数代码如下,并注意为了消除该缺陷“,鼠标消息标志变量变化”的位置有所改变,代码如下,该代码已经将下棋的全部约束条件全部实现了。oid CFivehes_44Viw:OnLButonDn(UINTnlags,Point point)/TO:Add you mess handler cod ador clefalif(RightORLeft=0)CBu*bu=new Cruh(RGB(0,0,));/定义黑色画刷D*pDC=th-GtDC();/获取当前的图形设备指针p-SelectObject(brus);/选中该黑色画刷for(nt i=0;i 1000;+=50)fr(int 0;j eC();/选中该白色画刷pDC-Selectbjct(bruh);for(int i 0;i 00;i+50)fr(it j=0;j lipe(tmpoix-20,temPoint.y-20,tmpPoint.+20,temPoit.y+20);Lat(emoint);RigtORLeft-;/鼠标消息标志变量变化(注意)Ciew:OnRutoDown(nFlas,pint);3.2.3 游戏获胜决断的开发1.该功能是棋牌游戏中较难的功能。所以编写程序时要细心。游戏规则是这样的:如果某一方(黑棋或白棋)在同一行或同一列或同一斜线上具有 5 个同色的棋子,则该颜色的这一方就获胜。因此可以使用一个整形二维数组来记录当前的棋局情况,二维数组的值定义如下:0:表示该位子没有棋子;1:表示该位置已经放了黑色棋子;2:表示该位置已经放了白色棋子;解决的问题:问题 1:要在下每个棋子后,将数组变量对应位置的数组元素值做改变,变为“1”或“2”,这个只需要在鼠标消息处理函数中调用 Loation()函数后改变数组元素值即可。问题 2:下每个棋子后,判断在这个棋子同一行同一列或同一斜线上是否具有连续 5-个同色的棋子,若有,则宣判该方胜利,并退出游戏,如果没有,则继续游戏,轮到下一方下棋。具体实施步骤如下;(1)增加棋盘状态记录数组。在 Fivechss_44i.h 头文件中定义一个公有的整形数组,如下代码:int chesrr2020;并在视图类的构造函数中将整形数组初始化为,代码为:CFivchess_44Ve:Fvehes44w()/TOO:add ctcin o hrRhtOLft=0;/初始化棋盘,左键先下棋o(it i0;i20;i+)o(int0;j20;j+)chesArri j=0;/将棋盘初始化为空棋盘(2)新增判断输赢的函数。在 ivechess_Vw头文件中添加该函数的定义:ol iWn(Point c);将该函数的代码写入vecss_4iew.cp源文件中,代码如下:/判断下棋后棋盘输赢的函数:ool Cieches_ew:isn(CPointcp)int cp_x=cp.x/50;tcp_y=cp.y/5;int =cp_x;int j=cy;n ot=1;int nowhesColr chessArrc_p_y;whie()if(i 0&i 0&i 0)+;f(owCssColor=chessArj)con+;(ount=5)return true;esebre;lsreak;i=cp_x;cot 1;whil(1)-i(j 0&0&j j&i 0 j 0&i 0&j 0&i 2)j+;i-;if(nossolor=cessArri j)cut+;i(cont=5)eturn tue;ele reak;lsebak;j _y;cpx;wle(1)if(j&j 0&i tDC();/获取当前的图形设备指针C-Seectj(brus);/选中该黑色画刷for(it i=0;i 1000;i=50)f(it ;j Elipse(temPoin.x-20,tempPoint.y-20,temn.x+20,temoit.y+20);ocation(tepPot);/画了该点后,将该点插入到向量中chrtempPoint x0tempoi.y5=;f(isW(poin)eageBox(黑色棋子获胜!);RighORLet+;CVie::OnLutonDown(nlags,point);鼠标右键具有输赢判断的鼠标消息处理函数与左键类似,代码如下:void CFechess_44iew:OnRutonDown(UINTnFlag,Cont point)/TOD:Adour mesag handler codeereandor call dfaut if(RighOReft=)Crush*brush=ne CBrus(RGB(55,5,55));CC*pDC=ths-GtDC();pDC-eetOect(brus);fr(it=0;i 100;+=0)for(in =0;j000;j+=50)CRc rct(i,j,i+50,+0);CPont tpPin;tepPint=recCnterPoit();if(rect.PtInRect(point)&isLation(tempoint))DC-Elie(tempit.x-20,epi.y20,tpPo-nt+0,tempPoint.+0);ocation(tmpPoit);hessArrtempPoint.0mpPint.y/5=2;if(isWn(pint))MessgeBx(白色棋子获胜!);RightORL-;Vie:OnRBttnDown(nlags,i);3.4 游戏的调试与运行编译程序:鼠标点击组建全部重建。编译若出现错误提示,则根据提示修改程序,直至编译无误。然后运行。得到的结果如下未进行游戏时的结果:-开始游戏后的结果:-4设计结果及分析41 程序的结果黑棋获胜的结果为:白棋获胜的结果为:-结果分析画棋子的原理在于,读取鼠标点击的坐标来判断点击位所在的格子,然后求出该格子的中心位置坐标,以该中心位置为圆心画黑色圆或白色圆。棋牌游戏中都有轮流下棋或出牌的一般性规则,这种情况下,都采用令牌变量,通过令牌变量来判断当前谁有下棋或出牌的权利。5总结本毕业设计是一款休闲五子棋游戏,离真正意义上的广域网网络游戏还要差距。但是它已经拥有了局域上的连接进行游戏的功能,。在设计中确实遇到了不少的困难,但是通过调试已经解决了绝大多数问题。游戏设计已经成为现在社会的一种热门行业。五子棋是一种受大众广泛喜爱的游戏,其规则简单,变化多端,非常富有趣味性和消遣性。这里设计和实现了一个双人对下的五子棋单机游戏。主要应用了 Vial 编程来完成这个游戏的设计的。本文主要介绍了本游戏开发环境 Mirsoft su C+6.0,使用当前优秀的开发工具 VC+编程。包含了五子棋程序的棋盘初始化、游戏规则、胜负判断方法。但是仍有一些不足之处:游戏只是局限于两个人之间;并且局限于一个电脑的鼠标;没有定时功能及提醒功能。这款游戏可以继续完善菜单功能也可以通过扩展实现成一款围棋游戏,总之它可以继续发展成一个比较成熟的休闲类小游戏。还有很多需要完善和改进的地方。参考文献 四维科技,丁展,汤倩.Val+游戏开发技术与实例M.北京:人民邮电出版社,2005求是科技,张宏林.Visual C+.0 程序设计与开发技术大全.北京:人民邮电出版社,203汪翔,袁辉Visul C+实践与提高(网络编程篇)M 北京:中国铁道出版社,2014黄维通.isual C+面向对象与可视化程序设计 M.北京:清华大学出版社,20035谢希任.计算机网络(第 4 版)北京:电子工业出版社,056(美)W Richard Sves.C/P 详解卷 1:协议M.北京:机械工业出版社,20057北京现代富博科技有限公司,陈兵旗,孙明.北京:Val C+实用图象处理专业教程M.清华大学出版社,204-张静.indows 多媒体编程基础M.北京:清化大学出版社,2059刘振安,徐峰.Windw实用编程指南M北京:人民邮电出版社,19510刘长明,杨工明.iual C+实践与提高(多媒体篇).北京:中国铁道出版社,21答辩记录表-学生姓名:学号:班级:答辩地点:答辩内容记录:成绩评定表-学生姓名:学号:班级:类别合计各项分值分值10平时完成情况评分标准按时参加课程设计,无旷课、迟到、早退、违反实验室纪律等情况。实际合计得分得分备注30设计方案规范合理,设计目标明确,10符合专业培养要求,时间安排得当,技术路线可靠。按设计任务书的要求完成了全部10任务,能完整演示其设计内容,符合要求。报告文字通顺,内容翔实,论述充10分、完整,立论正确,结构严谨合理,报告整体格式规范。报告完成0情况设计方案合理、可行,论证严谨,逻10辑性强;符号统一;图表完备、符合规范要求。能对整个设计过程进行全面的总结,得出有价值的结论或结果;参考10文献数量在篇以上,格式符合要求,在正文中正确引用。在规定时间内能就所设计的内容20进行阐述,言简意明,重点突出,论点正确,条理清晰。在规定时间内能准确、完整、流利20地回答教师所提出的问题。答辩情况40答辩组长:总评成绩:分指 导 教 师:(签字)日期:年月日课程设计总结-成绩分析表班级分数分布学生数百分比最高分(以下为总结内容)(以下为总结内容)90 分以上89-80最低分79-7069-60平均分60 分以下-