版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C++上机实习—五子棋目录一概括2二整体方案设计3三详尽设计4四程序的调试与运转结果说明.....8五课程设计总结10六后记11参照文件11附录——源代码12第1页共19页C++上机实习—五子棋一概括课程设计的目的1、学会编写C++程序。2、课程设计是查验我知识能力的一种门路。3、课程设计能让我学会很多书籍中学不到的东西。4、课程设计能使我所学知识举一反三,娴熟掌握C++中一些基本知识点。5、课程设计是一次很好的实践时机,能够经过实质操作来找出不足,改正不足,让自己千锤百炼,做到最好。6、经过设计开发五子棋这个详细的例子把我所学到的和我所想到的都运进设计一个自己的作品。7、经过课程设计培育了我的着手能力以及综合运用所学的C++语言基础论,基础知识,基本技术,进行程序剖析和程序开发,提升在实质开发中解决问题的能力,达到了能够利用C++语言进行应用程序的规划,剖析,设计和实行,更能进一步使我对这门语言有深刻的理解和更好的获得稳固,更能对我所学的知识获得查验。课程设计的要求需要的基本知识与技术:C++语言基本理论,基础知识,基本技术。数据结构有关知识。还没有掌握的知识点:因为最开始想开发windows界面的五子棋,查阅了好多有关资料。比方《浅入浅出MFC》、《c++可视化编程》等等,但最后因自己可视化界面编程知识的缺少和时间问题,改编成了dos界面的五子棋。要想做一个达成的五子棋游戏,还需要学习《算法设计》《人工智能》等有关知识。课程设计的主要设计思想五子棋是一个棋牌类对战游戏,一般有人机对战,和双人对战两种模式。因为人机对战波及人工智能等后续课程,所以我的程序只波及了双人对战这一模式。第2页共19页C++上机实习—五子棋程序用一个二位数组name【N】【N】来寄存棋盘信息,N=20表示一个20*20的棋盘。Name【i】【j】=0表示此地点上没有落子,1、2分别表示落有黑子和白子。程序中还应有个最重要的功能就是判断输赢。五子棋游戏中,只需一方棋子在任向来线上抢先连成五颗即为成功。所以在每一步落子后,系统就应当判断输赢,分别从左到右,从上到下,从左到右斜方向,从右到左斜方向,四方方向判断有无连续的5颗同色棋子。另一个重要功能是如何能让用户经过键盘操作,进行下棋游戏。在此功能中,不单要能辨别用户键入的控制键,也一定控制黑白子下棋次序和能否落子在可用地点。整体方案设计整体设计思路:第一、设计构想好各界面,和功能模块。即用户所见视图,用于指导开发具体的程序实现,提取类和对象的抽象。其次、定义了一个棋盘类。这个类封装了棋盘的数据储存和落子下棋,刷新棋盘等功能。定义好各子模块的接口。再则、分开实现各个棋盘类的方法操作。函数的调用,函数的结构等。再次、使用一些基本控制语句和I/O流来实现各样功能.比如:IF语句,IFELSE语句,WHILE循环语句,SWITCH语句,FOR循环语句等。最后、经过编译、运转在dos环境下实现实质的结果。算法的整体思路:在用户选择开始游戏后,第一需要初始化棋盘类,输出棋盘到dos界面上。而后,调用下棋模块,与用户交互过程中,每下一步,判断输入能否正确并刷新棋盘。最后,在每一步后判断输赢。假如已分出输赢,输出结果并初始化棋盘,不然持续上一步操作。第3页共19页C++上机实习—五子棋整体框图三详尽设计1棋盘类整个架构的核心部分,类名为Qipan。封装了棋盘的各样可能用到的功能[3],如保留棋盘数据、初始化、判断输赢等。用户操作主界面,主界面与Qipan进行交互来达成对游戏的操作。类图第4页共19页C++上机实习—五子棋绘制棋盘模块当游戏初始化时,和每当落子信息触发时,都需要对棋盘进行重绘。这里用特别符号“○”“●”“+”分别来描述白子、黑子和棋盘空格。这个函数主要达成了以下工作:装载棋盘二位数组并进行绘制。依据棋盘数据绘制棋子。绘制最后落子指示矩形。键盘操作控制模块此模块主要用于办理与用户的交互过程。即达成落子判断过程。此模块主要达成以下工作:从键盘读入控制信息(上下左右挪动和落子)判断能否在棋盘内安落子键,和挪动能否高出棋盘范围判断落子点能否已有棋子第5页共19页C++上机实习—五子棋判断输赢模块这是游戏中一个极其重要的算法,用来判断目前棋盘的局势是哪一方获胜。五子棋的输赢,在于判断棋盘上能否有一个点,从这个点开始的右、下、右下、左下四个方向能否有连续的五个同色棋子出现,如图:图.判断输赢方向这个算法也就是Qipan的Win成员函数。从设计的思想上,需要它接受一个棋子颜色的参数,而后返回一个布尔值,这个值来指示能否成功。这里用一个数组intcount[8]来控制2中颜色4个方向的棋子状况。Count[i]中i为单数表示白子个数,此中count[1]=j,表示横方向上白子连续个数为j,cont[3]=j表示竖方向上,count[5]=j表示从左到右斜方向,count[7]=j表示从右到左斜方向。双数表示黑子,同白子原理同样。横向判断设计图“——”第6页共19页C++上机实习—五子棋竖向判断设计图“|”说明:因为外循环(即i,j控制的棋盘循环)各方向上的判断是一致的。下边其余方向的判断就不在赘述。下边所给出的都是有变化的内循环控制。竖向判断设计图从左到右斜方向“”从右到左斜方向“/”第7页共19页C++上机实习—五子棋重置棋盘模块在每一局游戏开始的时候都需要调用这个函数reset( )将棋盘清空,也就是棋盘的初始化工作。在这个函数中,主要发生了这么几件事情:将name[N][N]中每一个落子位都置为无子状态(0)。将光标的初始地点,置于棋盘正中即a=N/2,b=N/2默认的先手次序是黑子先手,置player=1游戏说明模块这一模块主假如介绍此程序的操作方法。不过简单的用一系列cout语句输出说明文字。这里不再详尽介绍。游戏结束模块这一模块主要用于开释内存,用输出流语句输出结束信息,并控制循环退出程序。四程序的调试与运转结果说明进入游戏->主界面点击1->开始游戏第8页共19页C++上机实习—五子棋持续点击1或2->游戏过程中判断输赢第9页共19页C++上机实习—五子棋在主界面中点击2->游戏说明在主界面中点击0->退出游戏五课程设计总结此次课程设计的作品基本达到了要求,达成了五子棋游戏的软件,供给了五子棋游戏的基本下棋控制,输赢判断。但仍旧是一个粗拙的学生作品而已,有待进一步完美。我对此软件的进一步假想是:能够增添玩家书息排行功能,记录玩家姓名、获胜率等信息,有助于提升游戏的挑战性。还能够增添悔棋功能。知足用户更多的需求。经过进一步的C++学习,把dos界面的五子棋游戏改编成更雅观好用的windows界面。经过进一步学习人工智能等知识,完美程序,使之能实现人机对战。最后是学习网络知识,希望能使此程序能实此刻网上了双人对战。并附加聊天功能和别人观战功能等。第10页共19页C++上机实习—五子棋六后记经过编写这个程序,我领会最为深刻的一点是系统架构和设计模式的重要性。即便是关于一个其实不大的程序,代码的组织都是特别重要的,因为这关系到往后的保护以及扩展。这个游戏之中,有关各样算法思想的设计在网络上都能找到。可是关于系统的架构,却完整部是自己的事情,成千上万的代码需要经过适合的方法组织起来,使程序员编写代码更为有条理,更为切合软件工程的标准,这才是最重要的。在刚开始编写这个程序的时候,我天真地以为此中最重要的是算法设计。可是头两天编写程序的时候却发现程序越写越不简单保护,可见是我走错了方向。可是关于代码的组织(也就是软件的架构)才是真实软件工业的核心部分,因为软件事实上是直接和经济挂钩的,所以我们一定在编写代码从前选择一种最为适合的方法来组织这些代码,不然我们将会失掉更多的时间和金钱。于是,我将从前写的代码所有删除,仔细地思虑了一段时间。我也在这三天内真实从一个学生走入了软件开发的大门,我开始发现其实软件开发其实不是纯数学——正相反,数学只占了很小的一部分。它实质上是一种哲学,一种有着数学美感的哲学。在这此课程设计中还碰到一个比较重要的问题。我一开始是打算写一个windows界面的五子棋游戏,于是前两时节间向来在一边学习vc可视化编程,一边建立界面。在短时间了看了好多本书,但仍是因为时间的关系和对API函数的不熟习,使我最后放弃了windows界面的设计思想。固然最后没做出想要的结果,可是在此次课程设计中我真的学到了许多东西。相信我必定能在进一步学习后取出更好的作品以填补此次的遗憾。参照文件[1]甘玲石岩李盘林,分析C++面向对象程序设计,北京,清华大学第一版社,2000年9月。[2]黄维通,VisualC++面向对象与可视化程序设计,北京,清华大学第一版社,2003年2月[3]张基温张伟,C++程序开发例题与习题,北京,清华大学第一版社,2003年7月[4]严蔚敏,数据结构(C语言版),北京,清华大学第一版社,1996年第11页共19页C++上机实习—五子棋附录——源代码//++++++fivechess_qxf..h开始+++++++++++#include<stdio.h>#include<stdlib.h>#include<conio.h>#include<iostream>usingnamespacestd;#defineN21intoutput(intcount[8],intwin);//输入输赢voidexplain( );//游戏说明classQipan{public:inta;intb;intplayer;//用于在【a】【b】处落子intname[N][N];//寄存棋盘数据intwin( );//判断输赢voidreset( );//重置棋盘第12页共19页C++上机实习—五子棋voidchessboard( );//下棋并描述棋盘};//+++++++++fivechess_qxf.h结束+++++++++//====main.cpp开始for(i=0;i<=N;i++)#include<stdio.h>{#include<stdlib.h>for(j=0;j<=N;j++)#include<conio.h>{[i][j]=0;}#include"fivechess_qxf.h"}#include<iostream>dousingnamespacestd;{cout<<"1.开始游戏"<<endl;voidmain( )cout<<"2.游戏说明"<<endl;{cout<<"0.结束游戏"<<endl;scanf("%d",&t);Qipanqipan;switch(t)intt,j,i;{qipan.a=N/2;case1:qipan.b=N/2;system("cls");l;cout<<"**********************"<<endcout<<"1.先手白棋"<<endl;第13页共19页C++上机实习—五子棋cout<<"2.先手黑棋"<<endl;}while(t);}cout<<"**********************"<<end//=====main.cpp结束=l;//====reset.cpp开始=scanf("%d",&qipan.player);#include"fivechess_qxf.h"do//重置棋盘{voidQipan::reset( )system("cls");{qipan.chessboard( );inti,j;}while(qipan.win( ));for(i=0;i<N;i++)qipan.reset( );{break;for(j=0;j<N;j++)case2:{name[i][j]=0;}explain( );}break;a=N/2;case0:b=N/2;cout<<"感谢使用!";player=1;fflush(stdin);}j=getch( );//===reser.cpp结束=break;//====explain.cpp开始=}#include"fivechess_qxf.h"system("cls");#include<iostream>第14页共19页C++上机实习—五子棋#include<stdlib.h>//====chessboard.cpp开始=#include<conio.h>#include"fivechess_qxf.h"usingnamespacestd;////游戏说明//刷新棋盘落子下棋voidexplain( )voidQipan::chessboard( ){{intj;inti,j;cout<<"****************************for(i=0;i<N;i++)****游戏说明{******************************"<<enfor(j=0;j<N;j++)dl;{cout<<"1.按w向上挪动光标"<<endl;if(a==i&&b==j)cout<<"2.按s向下挪动光标"<<endl;{cout<<"3.按a向左挪动光标"<<endl;cout<<"□";cout<<"4.按d向右挪动光标"<<endl;}cout<<"5.按空格放子"<<endl;elseif(name[i][j]==0)cout<<"********************"<<endl;{cout<<"按随意键回到主菜单"<<endl;cout<<"╋";fflush(stdin);}j=getch( );elseif(name[i][j]==1)}{//=====explain.cpp结束=
cout<<"●";第15页共19页C++上机实习—五子棋}}elsebreak;{cout<<"○";case'a':}if(b>0)}{cout<<endl;b--;}}fflush(stdin);break;intinput=getch( );switch(input)case'd':{if(b<N-1)case'w':{if(a>0)b++;{}a--;break;}case'':break;if(name[a][b]==0)case's':{if(a<N-1)player=player==1?2:1;{name[a][b]=player;a++;}else第16页共19页C++上机实习—五子棋{for(k=0;k<5;k++)cout<<"此处有子!"<<endl;{cout<<"按随意键持续"<<endl;if(name[i][j+k]==1)fflush(stdin);{j=getch( );count[0]++;}}break;if(name[i][j+k]==2)}{}count[1]++;//====chessboard.cpp结束=}//====win.cpp开始=======}#include"fivechess_qxf.h"win=output(count,win);}//判断输赢}intQipan::win( )//判断列能否5个{for(j=0;j<N;j++)inti,j,count[8]={0},k,win;{//判断从左到右能否5个for(i=0;i<N;i++)for(j=0;j<N;j++){{for(k=0;k<5;k++)for(i=0;i<N;i++){{if(name[i+k][j]==1)第17页共19页C++上机实习—五子棋{if(name[i+k][j+k]==2)count[2]++;{}count[5]++;if(name[i+k][j]==2)}{}count[
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 小型人员密集场所火灾隐患及防治对策培训
- 塔吊安全技术措施培训课件
- 全民消防 生命至上用火用电消防安全措施培训
- 机械设备安全监督技术交底培训
- 拉车机安全操作规程培训
- 《汽车美容与装饰》项目4教案
- 入收尘器作业安全操作规程培训
- 混凝土拌合站安全操作规程培训
- 汽车与吊车施工安全措施培训
- 立式加工中心操作工安全操作规程培训
- 2026年北京市门头沟区(中小学、幼儿园)教师招聘考试参考试题及答案详解
- 2026-2030中国曲酸行业供需态势与前景动态预测报告
- 2026年中央安全生产考核巡查组问题通报(2026年更新)
- 保安员理论考试题库及答案2026年
- 2026年水利水电安全b证考前冲刺测试卷及参考答案详解【培优B卷】
- 2026润滑油行业人才梯队建设与技术创新力报告
- LY/T 2798-2025森林草原防火宣传设施设置规范
- 第五章-食品分离新技术
- 中国电信校招面笔试题及答案
- 神经重症患者脑电图监测解读
- 无储存危险化学品经营安全管理制度
评论
0/150
提交评论