#include "iostream.h"
#include "string.h"
#include "stdlib.h"
#include "iomanip.h"
class M //玩家输入数字控制棋盘大小
{
public:
int size(int)
{
int n;
cout<<"\n输入3~9的数字选择棋盘大小:"; //选择棋盘大小
do
{
cin>>n;
m=n;
if(n<3||n>9)
cout<<"(?)输入的数值超出范围。\n请输入3~9的数字:";
else break;
}while(n>=3||n<=9);
cout<<"棋盘大小为:"<<n<<"×"<<n<<"\n\n"<<endl;
return n;
}
private:
int m;
};
void main()
{
system("color 0e"); //设置颜色
cout<<"\n\t\t\t《三子连珠》课程设计 \n"<<endl;
cout<<"\t\t\t\t\t0691101 06 朱旭";
cout<<"\n\n\t\t1.欢迎进入三子连珠游戏!"<<endl; //游戏说明
cout<<"\t\t2.开始时输入3~9的数字选择棋盘大小。"<<endl; //游戏说明
cout<<"\t\t3.游戏中两位玩家轮流输入落子位置的坐标。"<<endl; //游戏说明
cout<<"\t\t4.首先将三子连成一直线为胜。\n\n"<<endl; //游戏说明
cout<<"\n\t\t(!)键入任意一个字符 按回车键开始游戏。\n\n:"; //游戏说明
char enter,round;
int n,m,a,b,p1=0,p2=0;
cin>>enter; //开始游戏
//——————————————————————————————————————
do //**重要循环**控制回合(最外层循环,一回合结束后提示是否重新开局)
{
int win=0;
M N;
n=N.size(m);
char P[10][10]; //输出空棋盘
cout<<" ";
for(int r=1;r<=n;r++)
{
cout<<" "<<r<<" ";
}
cout<<endl;
for(int i=1;i<=n;i++)
{
cout<<i<<" ";
for(int j=1;j<=n;j++)
{
P[i][j]=' ';
cout<<"["<<P[i][j]<<"]";
}
cout<<endl;
}
cout<<"\n"<<endl;
do //**重要循环**两位玩家轮流下子(控制玩家轮流下子的循环,当有一玩家获胜后则退出循环)
{
//玩家1落子
cout<<"玩家一(O)下子:";
cin>>a>>b;
cout<<"\n";
do //判断目标位置是否已存在棋子或所选位置超出范围
{
if(P[a][b]!=' ')
{
cout<<"(!)不可落子。\n请重新输入:";
cin>>a>>b;}
else
{
P[a][b]='O';
break;
}
}while(P[a][b]=' ');
//判断玩家1输赢:
P[a][b]='O';
for(i=1;i<=n;i++)
{for(int j=1;j<=n;j++)
{
if(P[i][j]==P[a][b]&&P[i+1][j+1]==P[a][b]&&P[i+2][j+2]==P[a][b])
{win=1;}
else if(P[i][j]==P[a][b]&&P[i][j+1]==P[a][b]&&P[i][j+2]==P[a][b])
{win=1;}
else if(P[i][j]==P[a][b]&&P[i-1][j+1]==P[a][b]&&P[i-2][j+2]==P[a][b])
{win=1;}
else if(P[i][j]==P[a][b]&&P[i+1][j]==P[a][b]&&P[i+2][j]==P[a][b])
{win=1;}
}
}
//输出落子后的棋盘
cout<<" "; //输出落子后的棋盘
for(int r=1;r<=n;r++)
{
cout<<" "<<r<<" ";
}
cout<<endl;
for(i=1;i<=n;i++)
{
cout<<i<<" ";
for(int j=1;j<=n;j++)
{
if(i==a&&j==b)
{
cout<<"["<<P[a][b]<<"]";
}
else
{
cout<<"["<<P[i][j]<<"]";
}
}
cout<<endl;
}
cout<<"\n"<<endl;
if(win==1)
{ cout<<"[win="<<win<<"]"<<"玩家1获胜\n"<<endl; //检测win值
p1++;
cout<<"[玩家1获胜次数为: "<<setw(3)<<p1<<" ]"<<endl;
cout<<"[玩家2获胜次数为: "<<setw(3)<<p2<<" ]\n\n"<<endl;
break;} //若玩家1获胜则跳出循环
else win=0;
//玩家2落子
cout<<"玩家二(X)下子:";
cin>>a>>b;
cout<<"\n";
do //判断目标位置是否已存在棋子或所选位置超出范围
{
if(P[a][b]!=' ')
{cout<<"(!)不可落子。\n请重新输入:";
cin>>a>>b;}
else
{
P[a][b]='X';
break;
}
}while(P[a][b]=' ');
//判断玩家2的输赢:
P[a][b]='X';
for(i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
if(P[i][j]==P[a][b] && P[i+1][j+1]==P[a][b] && P[i+2][j+2]==P[a][b])
{win=1;}
else if(P[i][j]==P[a][b] && P[i][j+1]==P[a][b] && P[i][j+2]==P[a][b])
{win=1;}
else if(P[i][j]==P[a][b] && P[i-1][j+1]==P[a][b] && P[i-2][j+2]==P[a][b])
{win=1;}
else if(P[i][j]==P[a][b] && P[i+1][j]==P[a][b] && P[i+2][j]==P[a][b])
{win=1;}
}
}
//输出落子后的棋盘
cout<<" ";
for(r=1;r<=n;r++)
{
cout<<" "<<r<<" ";
}
cout<<endl;
for(i=1;i<=n;i++)
{
cout<<i<<" ";
for(int j=1;j<=n;j++)
{
if(i==a&&j==b)
{
cout<<"["<<P[a][b]<<"]";
}
else
{
cout<<"["<<P[i][j]<<"]";
}
}
cout<<endl;
}
cout<<"\n"<<endl;
if(win==1)
{ cout<<"[win="<<win<<"]"<<"玩家2获胜\n"<<endl; //检测win值
p2++;
cout<<"[玩家1获胜次数为: "<<setw(3)<<p1<<" ]"<<endl;
cout<<"[玩家2获胜次数为: "<<setw(3)<<p2<<" ]\n\n"<<endl;
break;} //若玩家2获胜则跳出循环
else win=0;
}while(win==0);
cout<<"是否重新游戏?(是:y 否:n):";cin>>round; //是否继续?
}while(round=='y');
//——————————————————————————————————————
cout<<"\t\t\t游戏结束\n\t\t\t感谢使用"<<endl;
}