三子连珠游戏.docx

上传人:b****7 文档编号:25117623 上传时间:2023-06-05 格式:DOCX 页数:16 大小:124.85KB
下载 相关 举报
三子连珠游戏.docx_第1页
第1页 / 共16页
三子连珠游戏.docx_第2页
第2页 / 共16页
三子连珠游戏.docx_第3页
第3页 / 共16页
三子连珠游戏.docx_第4页
第4页 / 共16页
三子连珠游戏.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

三子连珠游戏.docx

《三子连珠游戏.docx》由会员分享,可在线阅读,更多相关《三子连珠游戏.docx(16页珍藏版)》请在冰豆网上搜索。

三子连珠游戏.docx

三子连珠游戏

 

课程设计报告

 

三子连珠游戏

 

班级:

学号:

姓名:

时间:

指导老师:

 

程序功能简介

该程序是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模板 > 其它模板

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1