c++井字棋(虽为原创,但可能与部分他人作品撞脸)

/*
    Name: 黑客小C
    Date: 06/06/22 21:56
*/
//版本:1.17
#include<bits/stdc++.h>
#include <windows.h>
#include<string>
using namespace std;
int qp[4][4];
void open() {
    std::system("color E4");
    cout<<"                        井字棋"<<endl;
    Sleep(2000);
    system("cls");
    std::system("color E4");
    cout<<"by:黑客小C"<<endl;
    Sleep(2000);
    system("cls");
    std::system("color E4");
    cout<<"版本:1.17"<<endl;
    cout<<"更新内容:提升运行效果,修复部分已知bug。";
    Sleep(2000);
    system("cls");
    std::system("color E4");
    for(int i=0; i<10; i++) {
        std::system("color E4");
        cout<<"加载中";
        Sleep(100);
        cout<<".";
        Sleep(100);
        cout<<".";
        Sleep(100);
        cout<<".";
        Sleep(100);
        system("cls");
        Sleep(100);
    }
}
void first() {
    for(int i=1; i<=3; i++) {
        for(int j=1; j<=3; j++) {
            qp[i][j]=0;
        }
    }
}
void out() {
    for(int i=1; i<=3; i++) {
        for(int j=1; j<=3; j++) {
            cout<<qp[i][j]<<" ";
        }
        cout<<endl;
    }
}
bool win() {
    for(int i=1; i<=3; i++) {
        if(qp[i][1]==1&&qp[i][2]==1&&qp[i][3]==1) {
            return true;
        }
    }
    for(int j=1; j<=3; j++) {
        if(qp[1][j]==1&&qp[2][j]==1&&qp[3][j]==1) {
            return true;
        }
    }
    if(qp[1][1]==1&&qp[2][2]==1&&qp[3][3]==1) {
        return true;
    }
    if(qp[1][3]==1&&qp[2][2]==1&&qp[3][1]==1) {
        return true;
    }
    return false;
}
bool lost() {
    for(int i=1; i<=3; i++) {
        if(qp[i][1]==2&&qp[i][2]==2&&qp[i][3]==2) {
            return true;
        }
    }
    for(int j=1; j<=3; j++) {
        if(qp[1][j]==2&&qp[2][j]==2&&qp[3][j]==2) {
            return true;
        }
    }
    if(qp[1][1]==2&&qp[2][2]==2&&qp[3][3]==2) {
        return true;
    }
    if(qp[1][3]==2&&qp[2][2]==2&&qp[3][1]==2) {
        return true;
    }
    return false;
}
int AI() {
    if(qp[1][1]==1&&qp[2][1]==1&&qp[3][1]==0) {
        qp[3][1]=2;
        return 0;
    }
    if(qp[1][2]==1&&qp[2][2]==1&&qp[3][2]==0) {
        qp[3][2]=2;
        return 0;
    }
    if(qp[1][3]==1&&qp[2][3]==1&&qp[3][3]==0) {
        qp[3][3]=2;
        return 0;
    }
    //
    if(qp[3][1]==1&&qp[2][1]==1&&qp[1][1]==0) {
        qp[1][1]=2;
        return 0;
    }
    if(qp[2][2]==1&&qp[3][2]==1&&qp[1][2]==0) {
        qp[1][2]=2;
        return 0;
    }
    if(qp[2][3]==1&&qp[3][3]==1&&qp[1][3]==0) {
        qp[1][3]=2;
        return 0;
    }
    //
    if(qp[1][1]==1&&qp[3][1]==1&&qp[2][1]==0) {
        qp[2][1]=2;
        return 0;
    }
    if(qp[3][2]==1&&qp[1][2]==1&&qp[2][2]==0) {
        qp[2][2]=2;
        return 0;
    }
    if(qp[3][3]==1&&qp[1][3]==1&&qp[2][3]==0) {
        qp[2][3]=2;
        return 0;
    }
    //
    if(qp[1][1]==1&&qp[1][2]==1&&qp[1][3]==0) {
        qp[1][3]=2;
        return 0;
    }
    if(qp[2][1]==1&&qp[2][2]==1&&qp[2][3]==0) {
        qp[2][3]=2;
        return 0;
    }
    if(qp[3][1]==1&&qp[3][2]==1&&qp[3][2]==0) {
        qp[3][3]=2;
        return 0;
    }
    //
    if(qp[1][3]==1&&qp[1][2]==1&&qp[1][1]==0) {
        qp[1][1]=2;
        return 0;
    }
    if(qp[2][3]==1&&qp[2][2]==1&&qp[2][3]==0) {
        qp[2][3]=2;
        return 0;
    }
    if(qp[3][3]==1&&qp[3][2]==1&&qp[3][1]==0) {
        qp[3][1]=2;
        return 0;
    }
    //
    if(qp[1][1]==1&&qp[1][3]==1&&qp[1][2]==0) {
        qp[1][2]=2;
        return 0;
    }
    if(qp[2][1]==1&&qp[2][3]==1&&qp[2][2]==0) {
        qp[2][2]=2;
        return 0;
    }
    if(qp[3][1]==1&&qp[3][3]==1&&qp[3][2]==0) {
        qp[3][2]=2;
        return 0;
    }
    //
    if(qp[1][1]==1&&qp[2][2]==1&&qp[3][3]==0) {
        qp[3][3]=2;
        return 0;
    }
    if(qp[1][1]==1&&qp[2][2]==0&&qp[3][3]==1) {
        qp[2][2]=2;
        return 0;
    }
    if(qp[1][1]==0&&qp[2][2]==1&&qp[3][3]==1) {
        qp[1][1]=2;
        return 0;
    }
    //
    if(qp[1][3]==1&&qp[2][2]==1&&qp[3][1]==0) {
        qp[3][1]=2;
        return 0;
    }
    if(qp[1][3]==1&&qp[2][2]==0&&qp[3][1]==1) {
        qp[2][2]=2;
        return 0;
    }
    if(qp[1][3]==1&&qp[2][3]==1&&qp[3][1]==1) {
        qp[1][3]=2;
        return 0;
    }
    //
    for(int i=1; i<=3; i++) {
        for(int j=1; j<=3; j++) {
            if(qp[i][j]==0) {
                qp[i][j]=2;
                return 0;
            }
        }
    }
}
bool nwl() {
    if(win()||lost()) {
        return true;
    }
    if(!win()||!lost()) {
        for(int i=1; i<=3; i++) {
            for(int j=1; j<=3; j++) {
                if(qp[i][j]==0) {
                    return true;
                }
            }
        }
    }
    return false;
}
int AI_2() {
    for(int i=1; i<=3; i++) {
        for(int j=1; j<=3; j++) {
            if(qp[i][j]==0) {
                qp[i][j]=2;
                return 0;
            }
        }
    }
}
int main() {
    std::system("color E4");
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED);
    open();
    int x,y;
    char c[101];
    char h;
    cout<<"为自己起个名字吧:"<<endl;
    gets(c);
    cout<<"你好,";
    puts(c);
    cout<<"井字棋"<<endl;
    cout<<"3字连成横竖斜线胜,1先2后。左上角为0,0,右下角为3,3。"<<endl;
    cout<<"你可以输入1个坐标,棋子会下在那,如果犯规,这轮无法走棋。"<<endl;
    cout<<"输入e简单模式,d困难模式。"<<endl;
    cin>>h;
    Sleep(1000);
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN);
    if(h=='d') {
        std::system("color E4");
        do {
            SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN);
            system("cls");
            std::system("color E4");
            SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN);
            out();
            SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN);
            if(lost()) {
                    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_BLUE);
                cout<<"你输了!"<<endl;
                first();
                return 0;
            }
            cout<<"轮到你";
            cin>>x>>y;
            if(qp[x][y]==0)
                qp[x][y]=1;
            else {
                cout<<"犯规罚停一轮!"<<endl;
                Sleep(1500);
            }
            system("cls");
            std::system("color E4");
            out();
            if(win()) {
                    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_BLUE);
                cout<<"你赢了!"<<endl;
                first();
                return 0;
            }
            cout<<"轮到玩家91"<<endl;
            AI();
        } while(nwl());
        out();
            SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_BLUE);
        cout<<"和棋!"<<endl;
        first();
        return 0;
    } else if(h=='e') {
        std::system("color E4");
        do {
            SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN);
            system("cls");
            std::system("color E4");
            SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN);
            out();
            SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN);
            if(lost()) {
                    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_BLUE);
                cout<<"你输了!"<<endl;
                first();
                return 0;
            }
            cout<<"轮到你";
            cin>>x>>y;
            if(qp[x][y]==0)
                qp[x][y]=1;
            else {
                cout<<"犯规罚停一轮!"<<endl;
                Sleep(1500);
            }
            system("cls");
            std::system("color E4");
            out();
            if(win()) {
                    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_BLUE);
                cout<<"你赢了!"<<endl;
                return 0;
                first();
            }
            cout<<"轮到我是电脑人"<<endl;
            AI_2();
        } while(nwl());
        out();
            SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_BLUE);
        cout<<"和棋!"<<endl;
        first();
    } else {
            SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_BLUE);
        cout<<"输入错误!"<<endl;
    }
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值