这是用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);//如果输入的落子位置不合法重新输

}

c++

2个回答

图片说明 使用这个模式贴代码。。

代码不全不能编译。。

http://download.csdn.net/download/lhk000/7084597

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问