《五子棋控制台课设题目.docx》由会员分享,可在线阅读,更多相关《五子棋控制台课设题目.docx(19页珍藏版)》请在三一办公上搜索。
1、五子棋控制台课设题目课设题目: 五子棋游戏 需求分析: 程序所能达到的功能 1)输出棋盘界面菜单及图像2)开始进入控制3)黑白棋正确输入格式控制4)判断黑白输赢控制5)正确计数对羿步数及下一步所要走的棋盘界面 输出的形式 以20行20列的坐标的形式输出 输入的形式和输入值的范围 用坐标方位确定所要输入棋子的准确位置 输入值的范围都比须在20行20列的正方形中 系统设计 本系统的主要结构和类结构 1)五子棋功能实现的主要结构函数 void getpointxy; /白棋出子函数 void getpointmn; /黑棋出子函数 void showqipan; /实现20行20列正方形界面输出 v
2、oid print; /输出下一棋盘界面及计数 bool IsxyWin; /白棋获胜 bool IsmnWin; /黑棋获胜 void menu;/显示开始菜单界面 2)五子棋类的结构 class five private: int x; int y; int m; int n; int num_xy; int num_mn; char qipan2020; /定义20行20列的数组 public: five(int X = 0,int Y =0,int M = 0,int N = 0,int Num_xy = 0,int Num_mn = 0) /构造函数初始化 x = X; y = Y;
3、 m = M; n = N; num_xy = Num_xy; num_mn = Num_mn; for(int i = 0 ; i 20 ; i +) /输出20行20列的棋盘界面 for(int j = 0 ;j 20 ; j +) qipanij = +; ; 本系统所设计的主要技术简介; 1)通过输出流实现五子棋美化的开始菜单界面2)图像处理技术控制界面的颜色3)在主函数中通过定义类的对象实现对功能函数的调用4)通过for循环语句实现20行20列的坐标界面的输出 系统工作流程介绍。 类的介绍: 该类完成了对输入棋子坐标的初始化,通过for循环实现了一个20行20列的坐标,在公有成员中定
4、义了相应的功能函数 void getpointxy; /白棋出子及计数 void getpointmn; /黑棋出子及计数 void showqipan; /实现20行20列正方形界面输出 void print; /输出下一棋盘界面 bool IsxyWin; /白棋获胜 bool IsmnWin; /黑棋获胜 void menu;/显示开始菜单界面 调试与测试: 调试过程中所遇到的问题及解决方法; )在我负责的部分中,在输出20行20列的坐标界面中开始设想用特殊字符代表坐标平面的位置,这样设计出版面效果会更好,但运行时,却出现如下的乱码错误 最后只好用键盘上常见字符+代替, )因为当输入的横
5、坐标和纵坐标中值为二位数则与一位的数值之间存在间距的不同,为了正确输出20行20列正方形坐标,因此在当输入值小于10时,必须在结尾时输出一个空格 )在判断棋子的输赢的过程中,通过四种情况的判断,只要其中的一种情况满足其累积值大于等于5,则获胜,但开始时却忽略了其中的一种情况,因为运行时没有报错,所以一直到后来,进入游戏操作中才被发现有问题,设计不完全 测试数据:包括正确的输入输出结果和错误的输入及其输出结果 如下是正确输出的结果: 错误的输入: 经验与体会 )通过课设,首先让我生产对编程的兴趣,尤其是当我真正把那程序运行出来时,那种兴奋劲,无法比拟。 )在这次课设的过程中当然也让我学到了很多东
6、西,让我学到了很多课外的相关+高层次的东西,当然其中也复习到了,这学期刚学的+知识,尤其是通过类的运用,更让我体会面向对象在编程的过程中的作用, )另外,通过这次课设也让我体会到合作的重要性,通过我和我搭档的分工合作,我们解决很多问题,让我真正认识到团队的力量 用户使用说明:说明如何使用你的程序,详细列出每一步操作步骤 在整个程序中我负责三个版块: )类的实现:包括对数据成员的赋值和成员函数的初始化还有通过for循环实现对20行20列坐标的定义:源代码如下 class five int x; int y; int m; int n; int num_xy; int num_mn; char q
7、ipan2020; /定义20行20列的数组 public: five(int X = 0,int Y =0,int M = 0,int N = 0,int Num_xy = 0,int Num_mn = 0)/构造函数初始化 x = X; y = Y; m = M; n = N; num_xy = Num_xy; num_mn = Num_mn; for(int i = 0 ; i 20 ; i +) /输出20行20列的棋盘界面 for(int j = 0 ;j 20 ; j +) qipanij = +; void getpointxy; /白棋出子函数 void getpointmn;
8、 /黑棋出子函数 void showqipan; void print; bool IsxyWin; /白棋获胜 bool IsmnWin; /黑棋获胜 ; void five:getpointxy/白棋出子实现函数 SetColor(70,300); std:cout请分别输入第num_xy+1 x y; if(x = 0 | y 20 | y 20 ) std:cout 出界,请重新输入:endl ; getpointxy; else if(qipany-1x-1 != + ) std:cout 请所下的位置已经有棋子,请重新输入: = 400) std:cout 棋盘已满,平局! end
9、l; exit(0); else qipany-1x-1 = o; num_xy+; )白棋和黑棋落子情况的判断的实现,源代码如下: void five:getpointxy/白棋出子实现函数 SetColor(70,300); std:cout请分别输入第num_xy+1 x y; if(x = 0 | y 20 | y 20 ) std:cout 出界,请重新输入:endl ; getpointxy; else if(qipany-1x-1 != + ) std:cout 请所下的位置已经有棋子,请重新输入: = 400) std:cout 棋盘已满,平局! endl; exit(0);
10、else qipany-1x-1 = o; num_xy+; void five:getpointmn /黑棋出子实现函数 std:cout请分别输入第num_mn+1 m n; if(m = 0 | n 20 | n 20 ) std:cout 出界,请重新输入:endl ; getpointmn; else if(qipann-1m-1!=+) std:cout 请所下的位置已经有棋子,请重新输入: = 400) std:cout 棋盘已满,平局! endl; exit(0); else qipann-1m-1 = x; num_mn+; )黑白棋输赢的判断,其源代码如下: bool fi
11、ve:IsxyWin/白棋获胜实现函数 int num1=1,num2=1,num3=1,num4=1; for(int i = x ; i x+5& x+5= 0 ; i -) if(qipany-1i != o) break; if(qipany-1i = o) num1+; for( i = y ; i = 0 ; i -) if(qipanix-1 != o) break; if(qipanix-1 = o) num2+; for(i = 0 ; i 5 & x+i20 & y+i=0 & y-i-2=0 & i 5;i+ ) if(qipany-i-2x-i-2 != o) brea
12、k; if(qipany-i-2x-i-2 = o) num3+; for(i = 0 ; x + i = 0 & i 5;i +) /另一方向斜的棋子情况判断 if(qipany-i-2x+i != o) break; if(qipany-i-2x+i = o) num4+; for(i = 0 ; y + i = 0 & i =5|num2=5|num3=5|num4=5) /以上四种情况只要有一种情况满足则获胜 return 1; else return 0; 黑棋获胜情况类似上面情况判断 测试结果:列出对于给定的输入所产生的输出结果 )运行开始界面如下: 进入游戏界面如下: 黑白棋落子
13、情况如下: 游戏结束结果如下: 附录:提交带注释的完整源程序: #include #include #include using namespace std;/界面窗口颜色控制 void SetColor(unsigned short ForeColor=4,unsigned short BackGroundColor=0) HANDLE hCon = GetStdHandle(STD_OUTPUT_HANDLE); SetConsoleTextAttribute(hCon,ForeColor|BackGroundColor); ; class five int x; int y; int m
14、; int n; int num_xy; int num_mn; char qipan2020; /定义20行20列的数组 public: five(int X = 0,int Y =0,int M = 0,int N = 0,int Num_xy = 0,int Num_mn = 0) /构造函数初始化 x = X; y = Y; m = M; n = N; num_xy = Num_xy; num_mn = Num_mn; for(int i = 0 ; i 20 ; i +) /输出20行20列的棋盘界面 for(int j = 0 ;j 20 ; j +) qipanij = +; v
15、oid getpointxy; /白棋出子及计数 void getpointmn; /黑棋出子及计数 void showqipan; /实现20行20列正方形界面输出 void print; /输出下一棋盘界面 bool IsxyWin; /白棋获胜 bool IsmnWin; /黑棋获胜 void menu;/显示开始菜单界面 ; void five:getpointxy /判断白棋出子情况及对其计数 SetColor(100,200); std:cout请分别输入第num_xy+1 x y; if(x = 0 | y 20 | y 20 ) std:cout 出界,请重新输入:endl ;
16、 getpointxy; else if(qipany-1x-1 != + ) std:cout 请所下的位置已经有棋子,请重新输入: = 400) std:cout 棋盘已满,平局! endl; exit(0); else qipany-1x-1 = o; num_xy+; void five:getpointmn /判断白棋出子情况及对其计数 std:cout请分别输入第num_mn+1 m n; if(m = 0 | n 20 | n 20 ) std:cout 出界,请重新输入:endl ; getpointmn; else if(qipann-1m-1!=+) std:cout 请所
17、下的位置已经有棋子,请重新输入: = 400) std:cout 棋盘已满,平局! q; if(strcmp(q,c) five:showqipan; void five:showqipan /输出20行20列的坐标数值 int p=0,q=0; for(int i = 0 ; i = 20 ; i+) if(p10) std:cout p ; else std:cout p ; p+; cout endl; for(i = 0 ; i =0) q+; if(q10) std:cout q ; else std:cout q; for(int j = 0 ; j 20 ; j +) std:c
18、out qipanij ; std:cout endl; void five:print int p=0,q=0; for(int i = 0 ; i = 20 ; i+) if(p10) std:cout p ; else std:cout p ; p+; std:cout endl; for(i = 0 ; i =0) q+; if(q10) std:cout q ; else std:cout q; for(int j = 0 ; j 20 ; j +) std:cout qipanij ; std:cout endl; bool five:IsxyWin/白棋获胜实现函数 int nu
19、m1=1,num2=1,num3=1,num4=1; for(int i = x ; i x+5& x+5= 0 ; i -) if(qipany-1i != o) break; if(qipany-1i = o) num1+; for( i = y ; i = 0 ; i -) if(qipanix-1 != o) break; if(qipanix-1 = o) num2+; for(i = 0 ; i 5 & x+i20 & y+i=0 & y-i-2=0 & i 5;i+ ) if(qipany-i-2x-i-2 != o) break; if(qipany-i-2x-i-2 = o)
20、 num3+; for(i = 0 ; x + i = 0 & i 5;i +) if(qipany-i-2x+i != o) break; if(qipany-i-2x+i = o) num4+; for(i = 0 ; y + i = 0 & i =5|num2=5|num3=5|num4=5) return 1; else return 0; bool five:IsmnWin /黑棋获胜实现函数 int num1=1,num2=1,num3=1,num4=1; for(int i = m ; i m+5& m+5= 0 ; i -) if(qipann-1i != x) break;
21、if(qipann-1i = x) num1+; for( i = n ; i = 0 ; i -) if(qipanim-1 != x) break; if(qipanim-1 = x) num2+; for(i = 0 ; i 5 & m+i20 & n+i=0 & n-i-2=0 & i 5;i+ ) if(qipann-i-2m-i-2 != x) break; if(qipann-i-2m-i-2 = x) num3+; for(i = 0 ; m + i = 0 & i 5;i +) if(qipann-i-2m+i != x) break; if(qipann-i-2m+i =
22、x) num4+; for(i = 0 ; n + i = 0 & i =5|num2=5|num3=5|num4=5) return 1; else return 0; void main SetColor(30,400);/界面颜色控制 std:cout*endl; std:cout*endl; std:cout*endl; std:cout*endl; std:cout*endl; std:cout*endl; std:cout*双*endl; std:cout*endl; std:cout*人*endl; std:cout*endl; std:cout*五*endl; std:cout
23、*endl; std:cout*子*endl; std:cout*endl; std:cout*棋*endl; std:cout*endl; std:cout*endl; std:cout*endl; std:cout*endl; std:cout请按任意字母开始体验; five a; /定义一个类的对象 int temp; a.menu; SetColor(100,600); std:cout 这是本游戏的棋盘,请按坐标输入棋子: endl; SetColor(10,10); a.showqipan; /通过对象调用功能函数 std:cout temp; if(temp = 2) /游戏开始及退出控制 exit(1); if(temp = 1) std:cout 您选择了双人游戏,下面游戏开始: endl; for(int i = 0 ; ; i +) SetColor(100,600); a.getpointxy; SetColor(10,10); a.print; if(a.IsxyWin) std:cout 白棋胜! endl; break; a.getpointmn; a.print; if(a.IsmnWin) std:cout 黑棋胜! endl; break; std:cout Press any key to EXITn; getch;
链接地址:https://www.31ppt.com/p-3236865.html