三子连珠游戏.docx
- 文档编号:25117623
- 上传时间:2023-06-05
- 格式:DOCX
- 页数:16
- 大小:124.85KB
三子连珠游戏.docx
《三子连珠游戏.docx》由会员分享,可在线阅读,更多相关《三子连珠游戏.docx(16页珍藏版)》请在冰豆网上搜索。
三子连珠游戏
课程设计报告
三子连珠游戏
班级:
学号:
姓名:
时间:
指导老师:
程序功能简介
该程序是TICTACTOE游戏,棋盘为3*3,3个棋子连起来即为赢。
输入参数时,若输入的数字超过边界或在已有棋子的地方再输入,则提示出错,要求重新输入。
课程设计要求
1.将程序改写成类。
2.将棋盘扩充成4*4。
3.统计输赢结果并打印输出。
4.选做:
使游戏更生动。
(输赢条件相同)
程序设计思想
设计一个玩家下棋的操作类,里面封装了棋盘﹑棋子类别和输赢次数等成员数据。
操作类的函数包括有初始化棋盘﹑下棋﹑判断输赢等。
定义一个类的对象,在调用类中函数时直接使用对象名加函数名即可。
将两个玩家定义为两个数组用于区分他们的信息,分别用‘O’和‘X’代表两个玩家所用棋子,然后分别对两个玩家通过已定义的类的对象调用类中的函数,完成下棋过程。
进一步改进程序:
1.程序中用ifelseif格式的语句来判断玩家的输赢,当棋盘增大时,三子连珠的各种可能性成倍增加,使得语句非常繁琐,所以将其改为for语句的循环结构进行判断,当棋盘增大时,只需更改循环条件结束的参数即可,可灵活使用于各种尺寸的棋盘。
2.为防止用户误操作,特别是在姓名的输入时的失误,可以采用函数读入在判断确认。
3.在完成第一步的基础上可将三子连珠扩充为标准的五子棋。
原程序各个功能说明
原程序的结构(见下页)
开始
1.类的说明
类是对一组具有相同属性、相同行为的对象的抽象的描述,不占用内存空间。
可以把类看作“理论上”的对象,也就是说,它为对象提供蓝图,但在内存中并不存在。
从这个蓝图可以创建任何数量的对象。
从累创建的所有对象都有相同的成员:
属性、行为或方法。
这些对象才是具体的独立的个体,占用存储空间,因此,对象又称作类的实例。
下面以具体程序说明。
在头文件之后定义了一个名为CGobang的类:
classCGobang
{
charboard[4][4];负条件的判定
< cout<<"EnterthecoordinatesforRowsandColumns"< cout<<"StrikeenterwhenDone."< cout< } voidCGobang: : Dayinqp() { < cout<<"Otherwise,pressanyotherletterkeytoexittheloop."< cin>>choice; } voidCGobang: : Xiaqi(char*player1,int&x,int&y,charc) { cout<<"该"< "< cout<<"您的棋子所在行: "; cin>>x; cout<<""<<""<<""<<""<<"棋子所在列: "; cin>>y; while(x>4||y>4||x<1||y<1||''! =board[x-1][y-1]) //输入数字超过边界或在已有棋子的地方再输入 //''! =board[x-1][y-1]表示已有棋子 { cout<<"对不起,您的输入有误,请重新输入! "< cout<<"您的棋子所在行: "; cin>>x; cout<<""<<""<<""<<""<<"棋子所在列: "; cin>>y; } board[x-1][y-1]=c;//在x行,y列处下O或X } voidCGobang: : Chongzhi() { for(intRow=0;Row<4;Row++) for(intColumn=0;Column<4;Column++) board[Row][Column]=''; } //定义判断获胜条件的函数 /*此函数以下棋的点为坐标分别向8个方向判断是否能构成胜利条件,若能 返回值1,则该选手获胜,程序结束;若不能,返回值为0,继续循环下棋程序。 */ intCGobang: : Huosheng(intx,inty,charc) { intcount,a; //从左斜上方向判断是否构成胜利条件 for(a=0,count=0;(x-a>=0)&&(y-a>=0)&&(board[x-a][y-a]==c);a++) if(++count==3)return1; //从右斜下方向判断是否构成胜利条件 for(a=1;(x+a<4)&&(y+a<4)&&(board[x+a][y+a]==c);a++) if(++count==3)return1; //从上向下方向判断是否构成胜利条件 for(a=0,count=0;(x-a>=0)&&(board[x-a][y]==c);a++) if(++count==3)return1; //从下向上方向判断是否构成胜利条件 for(a=1;(x+a<4)&&(board[x+a][y]==c);a++) if(++count==3)return1; //从左至右方向判断是否构成胜利条件 for(a=0,count=0;(y-a>=0)&&(board[x][y-a]==c);a++) if(++count==3)return1; //从右至左方向判断是否构成胜利条件 for(a=1;(y+a<4)&&(board[x][y+a]==c);a++) if(++count==3)return1; //从右斜上方向判断是否构成胜利条件 for(a=0,count=0;(x-a>=0)&&(y+a<4)&&(board[x-a][y+a]==c);a++) if(++count==3)return1; //从左斜下方向判断是否构成胜利条件 for(a=1;(x+a<4)&&(y-a>=0)&&(board[x+a][y-a]==c);a++) if(++count==3)return1; return0; } voidmain()//主函数 { CGobangs;//定义类的一个对象s ();//通过已定义的类的对象s调用Guize函数,提示玩家如何进行游戏 charplayer1[20],player2[20];//定义两个玩家的姓名变量,分别用两个数组储存 intFirstWin=0,SecondWin=0,Draws=0,x,y,N;//说明变量,并对部分变量付初值,以待计算输赢结果 charchoice='Y'; (20,'\n');//输入输出流,前面如果有输入把输入行所有字符 //取空,以便后面的输入从新的一行开始 cout<<"请输入第一个玩家姓名: "; (player1,20);//连续读取数据,实现对玩家一命名 cout<<"请输入第二个玩家姓名: "; (player2,20);//连续读取数据,实现对玩家二命名 while(choice=='Y'||choice=='y')//条件成立,开始下棋 { ();//通过对象s调用Chongzhi函数 N=0;//对变量付初值,表示已经下在棋盘上的妻子总数 while(N<=16)//在棋盘未满的条件下下棋 { ();//打印棋盘 (player1,x,y,'O');//调用下棋的运行函数 N++;//记录已下棋子数 if(x-1,y-1,'O'))//返回值不为0则条件成立 { cout< "< FirstWin++;//记录玩家一所赢局数 break;//终止本次循环 } ();//交换玩家下棋,下棋方法同上 (player2,x,y,'X'); N++; if(x-1,y-1,'X')) { cout< "< SecondWin++;//记录玩家二所赢局数 break; } if(N==16)//当棋盘满时,此局结束 { cout<<"和棋! "; Draws++;//记录平局总数 break; } } (choice);//让玩家选择是否在玩一次 } //输出游戏输赢次数 cout< cout< cout<<"和"< cout<<"谢谢使用。 "< cout<<"任意键继续。 "< }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 连珠 游戏