c++井字棋人人对战游戏

#include<bits/stdc++.h>
using namespace std;
int a,b,x,y,p;
string s[100][100];
int main()
{
    cout<<"欢迎来到井字棋人人大赛!!!"<<endl;
    cout<<"你需要跟另一个人比赛"<<endl;
    cout<<"A方棋子是“x”,B方棋子是“o”"<<endl;
    cout<<"你需要根据坐标x行、y列来下棋子"<<endl;
    cout<<"坐标只能输入数字,否则会出现bug"<<endl;
    cout<<"游戏即将开始,祝你们玩得愉快!!!"<<endl;
    cout<<endl<<endl;
    s[1][1]=" ";
    s[1][2]=" ";
    s[1][4]=" ";
    s[1][6]=" ";
    s[2][2]=" "; 
    s[2][4]=" ";
    s[2][6]=" ";
    s[3][2]=" "; 
    s[3][4]=" ";
    s[3][6]=" ";
    s[4][2]=" "; 
    s[4][4]=" ";
    s[4][6]=" ";
    s[1][3]="1";
    s[1][5]="2";
    s[1][7]="3";
    s[2][1]="1";
    s[3][1]="2";
    s[4][1]="3";
    s[2][3]="_";
    s[2][5]="_";
    s[2][7]="_";
    s[3][3]="_";
    s[3][5]="_";
    s[3][7]="_";
    s[4][3]="_";
    s[4][5]="_";
    s[4][7]="_";
    for(int i=1;i<=4;i++)
    {
        for(int j=1;j<=7;j++)cout<<s[i][j];
        cout<<endl;
    }
    cout<<endl;
    for(;;)
    {
        cout<<"轮到A方下棋子,请输入坐标"<<endl<<endl;
        cin>>a>>b;
        if(a==1)x=a+1;
        if(a==2)x=a+1;
        if(a==3)x=a+1;
        if(b==1)y=b+2;
        if(b==2)y=b+3;
        if(b==3)y=b+4;
        if((a>3)||(b>3)||(a<1)||(b<1)||((a>3)&&(b>3))||((a<1)&&(b<1)))
        {
            cout<<"该坐标不存在,请重新输入坐标"<<endl<<endl;
            for(;;)
            {
                cin>>a>>b;
                if(a==1)x=a+1;
                if(a==2)x=a+1;
                if(a==3)x=a+1;
                if(b==1)y=b+2;
                if(b==2)y=b+3;
                if(b==3)y=b+4;
                if((s[x][y]=="_")&&((a<=3)&&(b<=3))&&((a>=1)&&(b>=1)))break;
                if((a>3)||(b>3)||(a<1)||(b<1)||((a>3)&&(b>3))||((a<1)&&(b<1)))cout<<"该坐标不存在,请重新输入坐标"<<endl<<endl;
                if((s[x][y]=="x")||(s[x][y]=="o"))cout<<"已经下过了,请重新输入坐标"<<endl<<endl;
            }
        }
        if((s[x][y]=="x")||(s[x][y]=="o"))
        {
            cout<<"已经下过了,请重新输入坐标"<<endl<<endl;
            for(;;)
            {
                cin>>a>>b;
                if(a==1)x=a+1;
                if(a==2)x=a+1;
                if(a==3)x=a+1;
                if(b==1)y=b+2;
                if(b==2)y=b+3;
                if(b==3)y=b+4;
                if((s[x][y]=="_")&&((a<=3)&&(b<=3))&&((a>=1)&&(b>=1)))break;
                if((a>3)||(b>3)||(a<1)||(b<1)||((a>3)&&(b>3))||((a<1)&&(b<1)))cout<<"该坐标不存在,请重新输入坐标"<<endl<<endl;
                if((s[x][y]=="x")||(s[x][y]=="o"))cout<<"已经下过了,请重新输入坐标"<<endl<<endl;
            }
        }
        s[x][y]="x";
        for(int i=1;i<=4;i++)
        {
            for(int j=1;j<=7;j++)cout<<s[i][j];
            cout<<endl;
        }
        cout<<endl;
        if(s[2][3]=="x"&&s[2][5]=="x"&&s[2][7]=="x"){cout<<"A方赢了!!!";p=1;}
        if(s[3][3]=="x"&&s[3][5]=="x"&&s[3][7]=="x"){cout<<"A方赢了!!!";p=1;}
        if(s[4][3]=="x"&&s[4][5]=="x"&&s[4][7]=="x"){cout<<"A方赢了!!!";p=1;}
        if(s[2][3]=="x"&&s[3][3]=="x"&&s[4][3]=="x"){cout<<"A方赢了!!!";p=1;}
        if(s[2][5]=="x"&&s[3][5]=="x"&&s[4][5]=="x"){cout<<"A方赢了!!!";p=1;}
        if(s[2][7]=="x"&&s[3][7]=="x"&&s[4][7]=="x"){cout<<"A方赢了!!!";p=1;}
        if(s[2][3]=="x"&&s[3][5]=="x"&&s[4][7]=="x"){cout<<"A方赢了!!!";p=1;}
        if(s[2][7]=="x"&&s[3][5]=="x"&&s[4][3]=="x"){cout<<"A方赢了!!!";p=1;}
        if(p==1)break;
        if(s[2][3]!="_"&&s[2][5]!="_"&&s[2][7]!="_"&&s[3][3]!="_"&&s[3][5]!="_"&&s[3][7]!="_"&&s[4][3]!="_"&&s[4][5]!="_"&&s[4][7]!="_"&&p!=1)
        {
            cout<<"平局!!!";
            break; 
        }
        cout<<"轮到B方下棋子,请输入坐标"<<endl<<endl;
        cin>>a>>b;
        if(a==1)x=a+1;
        if(a==2)x=a+1;
        if(a==3)x=a+1;
        if(b==1)y=b+2;
        if(b==2)y=b+3;
        if(b==3)y=b+4;
        if((a>3)||(b>3)||(a<1)||(b<1)||((a>3)&&(b>3))||((a<1)&&(b<1)))
        {
            cout<<"该坐标不存在,请重新输入坐标"<<endl<<endl;
            for(;;)
            {
                cin>>a>>b;
                if(a==1)x=a+1;
                if(a==2)x=a+1;
                if(a==3)x=a+1;
                if(b==1)y=b+2;
                if(b==2)y=b+3;
                if(b==3)y=b+4;
                if((s[x][y]=="_")&&((a<=3)&&(b<=3))&&((a>=1)&&(b>=1)))break;
                if((a>3)||(b>3)||(a<1)||(b<1)||((a>3)&&(b>3))||((a<1)&&(b<1)))cout<<"该坐标不存在,请重新输入坐标"<<endl<<endl;
                if((s[x][y]=="x")||(s[x][y]=="o"))cout<<"已经下过了,请重新输入坐标"<<endl<<endl;
            }
        }
        if((s[x][y]=="x")||(s[x][y]=="o"))
        {
            cout<<"已经下过了,请重新输入坐标"<<endl<<endl;
            for(;;)
            {
                cin>>a>>b;
                if(a==1)x=a+1;
                if(a==2)x=a+1;
                if(a==3)x=a+1;
                if(b==1)y=b+2;
                if(b==2)y=b+3;
                if(b==3)y=b+4;
                if((s[x][y]=="_")&&((a<=3)&&(b<=3))&&((a>=1)&&(b>=1)))break;
                if((a>3)||(b>3)||(a<1)||(b<1)||((a>3)&&(b>3))||((a<1)&&(b<1)))cout<<"该坐标不存在,请重新输入坐标"<<endl<<endl;
                if((s[x][y]=="x")||(s[x][y]=="o"))cout<<"已经下过了,请重新输入坐标"<<endl<<endl;
            }
        }
        s[x][y]="o";
        for(int i=1;i<=4;i++)
        {
            for(int j=1;j<=7;j++)cout<<s[i][j];
            cout<<endl;
        }
        cout<<endl;
        if(s[2][3]=="o"&&s[2][5]=="o"&&s[2][7]=="o"){cout<<"B方赢了!!!";p=1;}
        if(s[3][3]=="o"&&s[3][5]=="o"&&s[3][7]=="o"){cout<<"B方赢了!!!";p=1;}
        if(s[4][3]=="o"&&s[4][5]=="o"&&s[4][7]=="o"){cout<<"B方赢了!!!";p=1;}
        if(s[2][3]=="o"&&s[3][3]=="o"&&s[4][3]=="o"){cout<<"B方赢了!!!";p=1;}
        if(s[2][5]=="o"&&s[3][5]=="o"&&s[4][5]=="o"){cout<<"B方赢了!!!";p=1;}
        if(s[2][7]=="o"&&s[3][7]=="o"&&s[4][7]=="o"){cout<<"B方赢了!!!";p=1;}
        if(s[2][3]=="o"&&s[3][5]=="o"&&s[4][7]=="o"){cout<<"B方赢了!!!";p=1;}
        if(s[2][7]=="o"&&s[3][5]=="o"&&s[4][3]=="o"){cout<<"B方赢了!!!";p=1;}
        if(p==1)break;
        if(s[2][3]!="_"&&s[2][5]!="_"&&s[2][7]!="_"&&s[3][3]!="_"&&s[3][5]!="_"&&s[3][7]!="_"&&s[4][3]!="_"&&s[4][5]!="_"&&s[4][7]!="_"&&p!=1)
        {
            cout<<"平局!!!";
            break; 
        }
    }
    return 0;
}

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值