qq_38884094 2017-05-24 14:14 采纳率: 0%
浏览 1009

这是用c++编写的六子棋游戏,编译可以通过,但运行player2时就会有问题,找了很久也找不到,哪里有问题呢?

#include

using namespace std;

const char outstr[11][4]={"?","?","?","?","?","?","?","?","?","?","?"};

void choice_sh1();//显示选择项(开始游戏、查看规则、结束游戏)

void choice_sh2();//显示选择项(以规则一开始、以规则二开始)

void game_ch();//游戏规则选择

void game_st1();//以游戏规则一开始游戏

void game_st2();//以游戏规则二开始游戏

void rule_sh();//显示游戏规则

void player2();//玩家二落子函数

int panduan1(int,int,int);//以规则一开始游戏时游戏结束的条件

int panduan2(int,int,int);//以规则二开始游戏时游戏结束的条件

int choice1,choice2;

int pl[15][15];

int c,d;

int a[15][15]={0,1,1,1,1,1,1,1,1,1,1,1,1,1,2,

3,4,4,4,4,4,4,4,4,4,4,4,4,4,5,

3,4,4,4,4,4,4,4,4,4,4,4,4,4,5,

3,4,4,4,4,4,4,4,4,4,4,4,4,4,5,

3,4,4,4,4,4,4,4,4,4,4,4,4,4,5,

3,4,4,4,4,4,4,4,4,4,4,4,4,4,5,

3,4,4,4,4,4,4,4,4,4,4,4,4,4,5,

3,4,4,4,4,4,4,4,4,4,4,4,4,4,5,

3,4,4,4,4,4,4,4,4,4,4,4,4,4,5,

3,4,4,4,4,4,4,4,4,4,4,4,4,4,5,

3,4,4,4,4,4,4,4,4,4,4,4,4,4,5,

3,4,4,4,4,4,4,4,4,4,4,4,4,4,5,

3,4,4,4,4,4,4,4,4,4,4,4,4,4,5,

3,4,4,4,4,4,4,4,4,4,4,4,4,4,5,

6,7,7,7,7,7,7,7,7,7,7,7,7,7,8}; int main()//主函数 以循环和switch语句的套用来实现做出正确的选择当、选择查看规则时可以重新选择开始游戏、退出游戏

{

do//以循环的形式实现当选择查看规则时可以重新选择开始游戏、退出游戏

{

choice_sh1();

switch (choice1)

{

case 1: game_ch();break;//当选择是1时开始游戏

case 2: rule_sh();break;//当选择是2时查看规则

case 3: system("pause");//当选择是3时退出游戏

}

}while(choice1==2);

return 0;

}

void choice_sh1()//显示选择菜单一

{

cout<<endl;

cout<<endl;

cout<<endl;

cout<<" c++课程设计作业 六子棋"<<endl;cout<<endl;

cout<<endl;

cout<<" 计算机102001班"<<endl;cout<<endl;

cout<<endl;

cout<<"***********************************************************************

********"<<endl;

cout<<endl;

cout<<" 选择 开始游戏"<<endl;

cout<<endl;

cout<<" 选择 规则介绍"<<endl;

cout<<endl;

cout<<" 选择 退出游戏"<<endl;

cout<<endl;

cout<<"***********************************************************************

********"<<endl;

cout<<endl;

cout<<endl;

do//当输入不为1、2、3中的一个时重新输入

{

cout<<"请输入您的选择:";

cin>>choice1;

}while(choice1!=1 && choice1!=2 && choice1!=3);

}

void game_ch()//游戏规则选择

{

system("cls");//清屏

choice_sh2();

switch (choice2)

{

case 1: game_st1();break;//当选择是1时以规则一开始游戏

case 2: game_st2();break;//当选择是2时以规则二开始游戏

}

}

void choice_sh2()//显示规则选择的菜单

{

cout<<endl;

cout<<endl;

cout<<endl;

cout<<endl;

cout<<endl;

cout<<endl;

cout<<"***********************************************************************

*********"<<endl;

cout<<endl;

cout<<" 选择 以规则一开始游戏"<<endl;

cout<<endl;

cout<<endl;

cout<<" 选择 以规则二开始游戏"<<endl;cout<<endl;

cout<<"***********************************************************************

*********"<<endl;

cout<<endl;

do//当选择不为1、2中的一个时要重新输入选择

{

cout<<"请输入您的选择:";

cin>>choice2;

}while(choice2!=1 && choice2!=2);

}

void rule_sh()//显示游戏规则

{

system("cls");

cout<<endl;

cout<<endl;

cout<<endl;

cout<<" 游戏规则:"<<endl;

cout<<endl;

cout<<endl;

cout<<" 本游戏有两种规则供选择"<<endl;

cout<<" 选择规则一时:"<<endl;

cout<<" 当其中一方的棋子有六子相连的时候游戏结束"<<endl;

cout<<" 输出游戏结果,程序结束"<<endl;

cout<<" 选择规则二时:"<<endl;

cout<<" 当其中一方的棋子六子排成一排并且每两个子中间隔着空位或对方棋子时游";

cout<<" 戏结束"<<endl;

cout<<" 输出游戏结果,程序结束";

}

void game_st1()//以规则一开始游戏

{

system("cls");

int i,j,x,y;

cout<<" 0 1 2 3 4 5 6 7 8 9 10 1 2 3 4"<<endl;

for(i=0;i<=14;i++)

{

if(i!=0)

cout<<endl;

cout<<i%10;

for(j=0;j<=14;j++)

{cout<<outstr[a[i][j]];}

}//画棋盘

cout<<endl;

cout<<"请player1输入要落子的位置:";

while(cin>>x>>y)

{

if(pl[x][y]==0 && x>=0 && x<=14 && y>=0 && y<=14)//判断输入的落子位置是否合法

{

{a[x][y]=9;

pl[x][y]=1;}

system("cls");

cout<<" 0 1 2 3 4 5 6 7 8 9 10 1 2 3 4"<<endl;

for(i=0;i<=14;i++)

{

if(i!=0)

cout<<endl;

cout<<i%10;

for(j=0;j<=14;j++)

{

cout<<outstr[a[i][j]];

}

}

cout<<endl;//画出棋盘显示落子位置

if(panduan1(x,y,1)==0)//判断是否构成结束游戏的条件

{

player2();

if(panduan1(c,d,2)==0)//判断是否构成结束游戏的条件

{

cout<<"请player1输入要落子的位置:";

}

else

{

cout<<"player2获胜"<<endl;break;

}//输出玩家二获胜 跳出循环结束游戏

}

else

{

cout<<"player1获胜"<<endl;break;

}

}//输出玩家一获胜 跳出循环结束游戏

else

cout<<"输入错误请重新输入";//当输入的落子位置不合法时重新输入

}

}

void game_st2()//以规则二开始游戏

{

system("cls");

int i,j,x,y;

cout<<" 0 1 2 3 4 5 6 7 8 9 10 1 2 3 4"<<endl;

for(i=0;i<=14;i++)

{

if(i!=0)

cout<<endl;

cout<<i%10;

for(j=0;j<=14;j++)

{

cout<<outstr[a[i][j]];

}

}

cout<<endl;//画棋盘

cout<<"请player1输入要落子的位置:";

while(cin>>x>>y)

{

if(pl[x][y]==0 && x>=0 && x<=14 && y>=0 && y<=14)//判断输入的落子位置是否合法

{

{a[x][y]=9;

pl[x][y]=1;}

system("cls");

cout<<" 0 1 2 3 4 5 6 7 8 9 10 1 2 3 4"<<endl;

for(i=0;i<=14;i++)

{

if(i!=0)

cout<<endl;

cout<<i%10;

for(j=0;j<=14;j++)

{

cout<<outstr[a[i][j]];

}

}

cout<<endl;//画出棋盘显示落子位置

if(panduan2(x,y,1)==0)//判断是否构成结束游戏的条件

{

player2();

if(panduan2(c,d,2)==0)//判断是否构成结束游戏的条件

{

cout<<"请player1输入要落子的位置:";

}

else

{

cout<<"player2获胜"<<endl;break;

}//输出玩家二获胜 跳出循环结束游戏

}

else

{

cout<<"player1获胜"<<endl;break;

}

}//输出玩家一获胜 跳出循环结束游戏

else

cout<<"输入错误请重新输入";//当输入的落子位置不合法时重新输入

}

}

int panduan2(int x,int y,int sum ) //以规则二开始游戏时判断是否构成结束游戏的条件

{

int m,n,b,c,lianzi=0;

for(m=-1;m<=1;m++)

for(n=-1;n<=1;n++)

{

if(m!=0 || n!=0)

{

for(b=1,c=2;b<=9,c<=10;b+=2,c+=2)

{

if((x+b*m>=0&&x+b*m<=14&&y+b*n>=0&&y+b*n<=14&&pl[x+b*m][y+b*n]==sum&&x+c*m

=0&&x+c*m<=14&&y+c*n>=0&&y+c*n<=14&&pl[x+c*m][y+c*n]!=sum )||(x+b*m>=0&&

x+b*m<=14&&y+b*n>=0&&y+b*n<=14&&pl[x+b*m][y+b*n]!=sum&&x+c*m>=0&&x+c*m<=1

4&&y+c*n>=0&&y+c*n<=14&&pl[x+c*m][y+c*n]==sum))

{

lianzi++;

}

else

{

break;

}

}

for(b=-1,c=-2;b>=-9,c>=-10;b-=2,c-=2)

{

if((x+b*m>=0&&x+b*m<=14&&y+b*n>=0&&y+b*n<=14&&pl[x+b*m][y+b*n]==sum&&x+c*m

=0&&x+c*m<=14&&y+c*n>=0&&y+c*n<=14&&pl[x+c*m][y+c*n]!=sum )||(x+b*m>=0&&

x+b*m<=14&&y+b*n>=0&&y+b*n<=14&&pl[x+b*m][y+b*n]!=sum&&x+c*m>=0&&x+c*m<=1

4&&y+c*n>=0&&y+c*n<=14&&pl[x+c*m][y+c*n]==sum))

{

lianzi++;

}

else

{

break;

}

}

if(lianzi>=5)

{

return 1;

}

else

{

lianzi=0;

}

}

}

return 0;

}

int panduan1(int x,int y,int sum ) //以规则二开始游戏时判断是否构成结束游戏的条件 {

int m,n,b,lianzi=0;

for(m=-1;m<=1;m++)

for(n=-1;n<=1;n++)

{

if(m!=0 || n!=0)

{

for(b=1;b<=5;b++)

{

if( x+b*m>=0 && x+b*m<=14 && y+b*n>=0 && y+b*n<=14 &&

pl[x+b*m][y+b*n]==sum )

{

lianzi++;

}

else

{

break;

}

}

for(b=-1;b>=-5;b--)

{

if( x+b*m>=0 && x+b*m<=14 && y+b*n>=0 && y+b*n<=14 &&

pl[x+b*m][y+b*n]==sum )

{

lianzi++;

}

else

{

break;

}

}

if(lianzi>=5)

{

return 1;

}

else

{

lianzi=0;

}

}

}

return 0;

}

void player2()//玩家二落子的函数

{

int i,j,v=0;

do{

cout<<"请player2输入要落子的位置:";

cin>>i>>j;

if(pl[i][j]==0 && i>=0 && i<=14 && j>=0 && j<=14)

{

c=i;d=j;

a[c][d]=10;

pl[c][d]=2;

}

system("cls");

cout<<" 0 1 2 3 4 5 6 7 8 9 10 1 2 3 4"<<endl;

for(i=0;i<=14;i++)

{

if(i!=0)

cout<<endl;

cout<<i%10;

for(j=0;j<=14;j++)

{

cout<<outstr[a[i][j]];

}

}

cout<<endl;//棋盘重画显示落子位置

break;

}

else

cout<<"输入错误请重新输入:";v=1;}while(v==1);//如果输入的落子位置不合法重新输

}

  • 写回答

2条回答 默认 最新

  • devmiao 2017-05-24 15:54
    关注
    评论

报告相同问题?

悬赏问题

  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)