您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > C/C++资料 > c++五子棋课程设计报告
福建农林大学计算机与信息学院课程设计报告课程名称:面向对象程序设计课程设计课程设计题目:五子棋姓名:系:计算机专业:软件工程年级:学号:指导教师:职称:年月日2福建农林大学计算机与信息学院计算机类课程设计报告结果评定评语:评分项目分值得分课程设计报告符合规范10分类图、用例图、系统框图合理30分主要技术线路正确30分设计报告条理清晰、重点突出20分有一定创新性、难易程度10分成绩:指导教师签字:任务下达日期:12月6日评定日期:3目录1.设计目的.................................................................42.设计要求................................................................43.设计方案................................................................44.设计内容................................................................74.1系统的主要结构和类结构..................................................74.2(2)五子棋类的结构.......................................................74.3⑶系统工作流程介绍....................................................7错误!未定义书签。⑷类的介绍.............................................................84.5(5)各个模块的介绍......................................................84.6(6)程序运行图示........................................................145.总结.....................................................................16参考文献...................................................................174(a)1.设计目的(1)加深我对面向对象程序基本的理解和掌握。(2)熟练掌握基本流程图的绘制。(3)熟练visio的一些操作方法。(4)能够在调试程序中快速发现并排除程序中的错误。(5)提高面向对象程序语言解决实际中的问题的能力。(b)2.设计要求五子棋是玩家在游戏棋盘上逐个输入黑子或白子的坐标,因此游戏要求在DOS界面生成一个可供操作的棋盘。通过输入坐标完成对应落子情况,在输入过程中判断落子是否正确、是否有一方胜利等情况。编写代码可以在VC6.0下编译通过。游戏要能实现五子棋游戏的简单操作。程序中要体现面向对象思想。(c)3.设计方案(必须包含系统功能说明、用例图和类图)一、用例图落子基于用户的用例图5步数用例图系统用例图1)输出棋盘界面菜单及图像2)开始进入控制3)黑白棋正确输入格式控制4)判断黑白输赢控制5)正确计数对羿步数及下一步所要走的棋盘界面6二、类图7(d)4.设计内容⑴本系统的主要结构和类结构1)五子棋功能实现的主要结构函数voidgetpointxy();//白棋出子函数voidgetpointmn();//黑棋出子函数voidshowqipan();//实现20行20列正方形界面输出voidprint();//输出下一棋盘界面及计数boolIsxyWin();//白棋获胜boolIsmnWin();//黑棋获胜voidmenu();//显示开始菜单界面(2)五子棋类的结构classfive{intx,y,m,n,num_xy,num_mn;charqipan[20][20];//定义20行20列的数组public:five(intX=0,intY=0,intM=0,intN=0,intNum_xy=0,intNum_mn=0)//构造函数初始化{x=X;y=Y;m=M;n=N;num_xy=Num_xy;num_mn=Num_mn;for(inti=0;i20;i++)//输出20行20列的棋盘界面{for(intj=0;j20;j++)qipan[i][j]='.';}}⑶系统工作流程介绍。8⑷类的介绍:该类完成了对输入棋子坐标的初始化,通过for循环实现了一个20行20列的坐标,在公有成员中定义了相应的功能函数voidgetpointxy();//白棋出子及计数voidgetpointmn();//黑棋出子及计数voidshowqipan();//实现20行20列正方形界面输出voidprint();//输出下一棋盘界面boolIsxyWin();//白棋获胜boolIsmnWin();//黑棋获胜voidmenu();//显示开始菜单界面(5)各个模块的介绍:1)类的实现:包括对数据成员的赋值和成员函数的初始化还有通过for循环实现对20行20列坐标的定义:源代码如下classfive{intx,y,m,n,num_xy,num_mn;charqipan[20][20];//定义20行20列的数组public:9five(intX=0,intY=0,intM=0,intN=0,intNum_xy=0,intNum_mn=0)//构造函数初始化{x=X;y=Y;m=M;n=N;num_xy=Num_xy;num_mn=Num_mn;for(inti=0;i20;i++)//输出20行20列的棋盘界面{for(intj=0;j20;j++)qipan[i][j]='.';}}voidgetpointxy();//白棋出子及计数voidgetpointmn();//黑棋出子及计数voidshowqipan();//实现20行20列正方形界面输出voidprint();//输出下一棋盘界面boolIsxyWin();//白棋获胜boolIsmnWin();//黑棋获胜voidmenu();//显示开始菜单界面};2)白棋和黑棋落子情况的判断的实现,源代码如下:voidfive::getpointxy()//判断白棋出子情况及对其计数{std::cout请分别输入第num_xy+1步白棋○的横坐标和纵坐标:;std::cinyx;if(!(1=x&&x=20&&1=y&&y=20)){std::cout输入错误,请重新输入:endl;getpointxy();}elseif(qipan[y-1][x-1]!='.'){std::cout请所下的位置已经有棋子,请重新输入:endl;getpointxy();}elseif(num_xy+num_mn=400){std::cout棋盘已满,平局!endl;exit(0);}else{qipan[y-1][x-1]='O';num_xy++;}}10voidfive::getpointmn()//判断黑棋出子情况及对其计数{std::cout请分别输入第num_mn+1步黑棋●的横坐标和纵坐标:;std::cinnm;if(!(1=m&&m=20&&1=n&&n=20)){std::cout输入错误,请重新输入:endl;getpointmn();}elseif(qipan[n-1][m-1]!='.'){std::cout请所下的位置已经有棋子,请重新输入:endl;getpointmn();}elseif(num_xy+num_mn=400){std::cout棋盘已满,平局!endl;exit(0);}else{qipan[n-1][m-1]='*';num_mn++;}}3)菜单界面模块voidfive::menu()//进入菜单界面{char*q=newchar[9];cinq;if(strcmp(q,c))five::showqipan();}4)输出模块voidfive::showqipan()//输出20行20列的坐标数值{intp=0,q=0;for(inti=0;i=20;i++){if(p10){std::coutp'';}elsestd::coutp;p++;}coutendl;for(i=0;i20;i++){if(i=0)11{q++;if(q10)std::coutq'';elsestd::coutq;}for(intj=0;j20;j++)std::coutqipan[i][j]'';std::coutendl;}}voidfive::print(){intp=0,q=0;for(inti=0;i=20;i++){if(p10){std::coutp'';}elsestd::coutp;p++;}std::coutendl;for(i=0;i20;i++){if(i=0){q++;if(q10)std::coutq'';elsestd::coutq;}for(intj=0;j20;j++){std::coutqipan[i][j]'';}std::coutendl;}}5)黑白棋输赢的判断,其源代码如下:boolfive::IsxyWin()//白棋获胜实现函数{intnum1=1,num2=1,num3=1,num4=1;for(inti=x;ix+5&&x+520;i++){if(qipan[y-1][i]!='O')break;if(qipan[y-1][i]=='O')num1++;}for(i=x-2;i=0;i--){if(qipan[y-1][i]!='O')break;12if(qipan[y-1][i]=='O')num1++;}for(i=y;iy+5;i++){if(qipan[i][x-1]!='O')break;if(qipan[i][x-1]=='O')num2++;}for(i=y-2;i=0;i--){if(qipan[i][x-1]!='O')break;if(qipan[i][x-1]=='O')num2++;}for(i=0;i5&&x+i20&&y+i20;i++){if(qipan[y+i][x+i]!='O')break;if(qipan[y+i][x+i]=='O')num3++;}for(i=0;x-i-2=0&&y-i-2=0&&i5;i++){if(qipan[y-i-2][x-i-2]!='O')break;if(qipan[y-i-2][x-i-2]=='O')num3++;}for(i=0;x+i20&&y-i-2=0&&i5;i++){if(qipan[y-i-2][x+i]!='O')break;if(qipan[y-i-2][x+i]=='O')num4++;}for(i=0;y+i20&&x-i-2=0&&i5;i++){if(qipan[y+i][x-i-2]!='O')break;if(qipan[y+i][x-i-2]=='O')num4++;}if(num1=5||num2=5||num3=5||num4=5)return1;elsereturn0;}黑棋获胜情况与白棋类似6)主函数模块13voidmain(){std::cout*************欢迎使用*^_^*`~******************endl;std::cout_____________________
本文标题:c++五子棋课程设计报告
链接地址:https://www.777doc.com/doc-6020526 .html