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