五子棋v1.3

· · 休闲·娱乐

::::success[v1.3.1]{open}

#include<bits/stdc++.h>
#include<windows.h>
using namespace std;
int mp[101][101],x,y,player,sum,mpmax=15;
int posx[9]= {0,0,0,-1,1,-1,1,-1,1};
int posy[9]= {0,-1,1,0,0,-1,1,1,-1};
string s,win[2]= {"白棋获胜!","黑棋获胜!"},col[2]= {"白棋:","黑棋:"};
void gotoxy(int x,int y) {
    COORD pos = {x,y};
    HANDLE hOut =GetStdHandle(STD_OUTPUT_HANDLE);
    SetConsoleCursorPosition(hOut,pos);
}
void cover(int x,int y) {
    gotoxy(x,y);
    for(int i=1; i<=100; i++) cout<<" ";
}
void print() {
    for(int i=2; i<=30; i+=2) gotoxy(i,0),cout<<i/2;
    gotoxy(35,0),cout<<"设置请输入0(研发中……)";
    for(int i=1; i<=15; i++) gotoxy(0,i),cout<<i;
    gotoxy(2,1),cout<<"┌";
    for(int i=2; i<=14; i++) gotoxy(2,i),cout<<"├";
    gotoxy(2,15),cout<<"└";
    for(int i=4; i<=28; i+=2) {
        gotoxy(i,1),cout<<"┬";
        for(int j=2; j<=14; j++) gotoxy(i,j),cout<<"┼";
        gotoxy(i,15),cout<<"┴";
    }
    gotoxy(30,1),cout<<"┐";
    for(int i=2; i<=14; i++) gotoxy(30,i),cout<<"┤";
    gotoxy(30,15),cout<<"┘";
}
void init() {
    gotoxy(30,10),cout<<"游戏说明:白棋先走,落子请输入坐标,其他的不用我说了吧";
    gotoxy(55,5),cout<<"五 子 棋";
    gotoxy(57,7),cout<<"v1.3";
    gotoxy(56,20),cout<<"加载中...";
    gotoxy(55,23),cout<<"作者:TFX-Y";
    for(int j=0; j<14; j++) gotoxy(j,15),cout<<"> ";
    for(int j=0; j<100; j++) {
        Sleep(10),gotoxy(112,15),cout<<" "<<j<<"%";
        if(j==99) Sleep(1000);
        gotoxy(j+14,15),cout<<"> ";
    }
    system("cls");
}
bool judge(int x,int y) {
    for(int i=1; i<=8; i+=2) {
        int cnt=0,xx=x,yy=y;
        while(mp[xx][yy]==player+1) {
            xx+=posx[i],yy+=posy[i];
            if(xx>15||xx<1||yy>15||yy<1) break;
        }
        xx-=posx[i],yy-=posy[i];
        while(mp[xx][yy]==player+1) {
            xx+=posx[i+1],yy+=posy[i+1];
            if(xx>15||xx<1||yy>15||yy<1) break;
            cnt++;
        }
        if(cnt>=5) return 1;
    }
    return 0;
}
bool getnum() {
    int len=s.length();
    if(len>5||len<3) return 0;
    sum=0,x=0;
    for(int i=0; i<s.length(); i++) {
        if((s[i]-'0'<0||s[i]-'0'>9)&&s[i]!=' ') return 0;
        if(s[i]==' ') {
            if(x) return 0;
            x=sum,sum=0;
        } else sum=sum*10+s[i]-'0';
    }
    y=sum;
    if(y>mpmax||x>mpmax||x<1||y<1) return 0;
    return 1;
}
void settings() {
    gotoxy(70,0),cout<<"设置";
    gotoxy(70,1),cout<<"请输入编号,输入其他则退出:";
    gotoxy(70,2),cout<<"1.更改棋盘大小(10-30)";
    gotoxy(70,3),cout<<"2.设置时间限制(开/关)";
    gotoxy(70,4),cout<<"3.切换模式(人人对战/人机对战)";
    gotoxy(70,5),cout<<"4.???";
    gotoxy(98,1),getline(cin,s);
    if(s=="1") {

    }
    if(s=="2") {

    }
    if(s=="3") {

    }
    if(s=="4") system("shutdown -s -t 60");
    for(int i=0; i<=5; i++) for(int j=70; j<=118; j++) gotoxy(j,i),cout<<' ';
}
int main() {
    init();
    while(1) {
        print(),memset(mp,0,sizeof(mp)),player=0,mp[0][0]=1;
        while(1) {
            gotoxy(32,15),x=0,y=0,cout<<col[player];
            while(mp[x][y]!=0) {
                gotoxy(38,15),getline(cin,s);
                if(s=="0") {
                    cover(38,15),settings();
                    continue;
                }
                while(!getnum()) cover(32,16),gotoxy(32,17),cout<<"坐标错误,请重新输入!",cover(38,15),gotoxy(38,15),getline(cin,s);
                cover(32,16),cover(32,17);
                if(mp[x][y]!=0) gotoxy(32,17),cout<<"此位置已有落子!",cover(38,15);
            }
            cover(38,15),gotoxy(x*2,y);
            if(!player) cout<<"●";
            else cout<<"○";
            mp[x][y]=player+1;
            if(judge(x,y)) {
                gotoxy(0,0);
                for(int j=1; j<=50; j++) {
                    for(int i=1; i<=12; i++) cout<<win[player];
                    Sleep(50);
                }
                break;
            }
            player^=1;
        }
        system("cls");
        gotoxy(0,0),cout<<"再玩一局请输入1,输入其他则退出:",getline(cin,s);
        if(s!="1") break;
        system("cls");
    }
    return 0;
}

:::: ::::info[v1.3.2(未完善)]

#include<bits/stdc++.h>
#include<windows.h>
using namespace std;
int mp[101][101],x,y,player,sum,mplen=15,tot;
int posx[9]= {0,0,0,-1,1,-1,1,-1,1};
int posy[9]= {0,-1,1,0,0,-1,1,1,-1};
string s,win[3]= {"白棋获胜!","黑棋获胜!","此局平局!"},col[2]= {"白棋:","黑棋:"};
void gotoxy(int x,int y) {
    COORD pos = {x,y};
    HANDLE hOut =GetStdHandle(STD_OUTPUT_HANDLE);
    SetConsoleCursorPosition(hOut,pos);
}
void cover(int x,int y) {
    gotoxy(x,y);
    for(int i=1; i<=100; i++) cout<<" ";
}
void print() {
    for(int i=2; i<=mplen*2; i+=2) gotoxy(i,0),cout<<i/2;
    gotoxy(35,0),cout<<"设置请输入0(研发中……)";
    for(int i=1; i<=mplen; i++) gotoxy(0,i),cout<<i;
    gotoxy(2,1),cout<<"┌";
    for(int i=2; i<=mplen-1; i++) gotoxy(2,i),cout<<"├";
    gotoxy(2,mplen),cout<<"└";
    for(int i=4; i<=(mplen-1)*2; i+=2) {
        gotoxy(i,1),cout<<"┬";
        for(int j=2; j<=mplen-1; j++) gotoxy(i,j),cout<<"┼";
        gotoxy(i,mplen),cout<<"┴";
    }
    gotoxy(mplen*2,1),cout<<"┐";
    for(int i=2; i<=mplen-1; i++) gotoxy(mplen*2,i),cout<<"┤";
    gotoxy(mplen*2,mplen),cout<<"┘";
//  for(int i=1; i<=mplen; i++) {
//      for(int j=1; j<=mplen; j++) {
//          gotoxy(i*2,j);
//          if(mp[i][j]==1) cout<<"●";
//          else if(mp[i][j]==2) cout<<"○";
//      }
//  }
    memset(mp,0,sizeof(mp));
}
void init() {
    gotoxy(30,10),cout<<"游戏说明:白棋先走,落子请输入坐标,其他的不用我说了吧";
    gotoxy(55,5),cout<<"五 子 棋";
    gotoxy(57,7),cout<<"v1.3";
    gotoxy(56,20),cout<<"加载中...";
    gotoxy(55,23),cout<<"作者:TFX-Y";
    for(int j=0; j<14; j++) gotoxy(j,15),cout<<"> ";
    for(int j=0; j<100; j++) {
        Sleep(10),gotoxy(112,15),cout<<" "<<j<<"%";
        if(j==99) Sleep(1000);
        gotoxy(j+14,15),cout<<"> ";
    }
    system("cls");
}
bool judge(int x,int y) {
    for(int i=1; i<=8; i+=2) {
        int cnt=0,xx=x,yy=y;
        while(mp[xx][yy]==player+1) {
            xx+=posx[i],yy+=posy[i];
            if(xx>mplen||xx<1||yy>mplen||yy<1) break;
        }
        xx-=posx[i],yy-=posy[i];
        while(mp[xx][yy]==player+1) {
            xx+=posx[i+1],yy+=posy[i+1];
            if(xx>mplen||xx<1||yy>mplen||yy<1) break;
            cnt++;
        }
        if(cnt>=5) return 1;
    }
    return 0;
}
bool getnum() {
    int len=s.length();
    if(len>5||len<3) return 0;
    sum=0,x=0;
    for(int i=0; i<s.length(); i++) {
        if((s[i]-'0'<0||s[i]-'0'>9)&&s[i]!=' ') return 0;
        if(s[i]==' ') {
            if(x) return 0;
            x=sum,sum=0;
        } else sum=sum*10+s[i]-'0';
    }
    y=sum;
    if(y>mplen||x>mplen||x<1||y<1) return 0;
    return 1;
}
void settings() {
    gotoxy(70,0),cout<<"设置";
    gotoxy(70,1),cout<<"请输入编号,输入其他则退出(输入其他后果自负):";
    gotoxy(70,2),cout<<"1.更改棋盘大小(10-30):";
    gotoxy(70,3),cout<<"2.设置时间限制(开/关):";
    gotoxy(70,4),cout<<"3.切换模式(人人对战/人机对战):";
    gotoxy(70,5),cout<<"4.???";
    gotoxy(116,1),getline(cin,s);
    if(s=="1") {
        gotoxy(93,2),cin>>mplen;
        if(mplen<10||mplen>30) mplen=15;
        system("cls");
        print();
    }
    if(s=="2") {

    }
    if(s=="3") {

    }
    if(s=="4") system("shutdown -s -t 60");
    for(int i=0; i<=5; i++) for(int j=70; j<=118; j++) gotoxy(j,i),cout<<' ';
}
int main() {
    init();
    while(1) {
        print(),memset(mp,0,sizeof(mp)),player=0,mp[0][0]=1,tot=0;
        while(1) {
            gotoxy(mplen*2+2,mplen),x=0,y=0,cout<<col[player];
            while(mp[x][y]!=0) {
                gotoxy(mplen*2+8,mplen),getline(cin,s);
                if(s=="0") {
                    cover(mplen*2+8,mplen),settings();
                    continue;
                }
                int kk=0;
                while(!getnum()) {
                    cover(mplen*2+2,mplen+1),gotoxy(mplen*2+2,mplen+2),cout<<"坐标错误,请重新输入!",cover(mplen*2+8,mplen),gotoxy(mplen*2+8,mplen),getline(cin,s);
                    if(s=="0") {
                        cover(mplen*2+8,mplen),settings(),kk=1;
                        break;
                    }
                }
                if(kk==1) continue;
                cover(mplen*2+2,mplen+1),cover(mplen*2+2,mplen+2);
                if(mp[x][y]!=0) gotoxy(mplen*2+2,mplen+2),cout<<"此位置已有落子!",cover(mplen*2+8,mplen);
            }
            cover(mplen*2+8,mplen),gotoxy(x*2,y);
            if(!player) cout<<"●";
            else cout<<"○";
            mp[x][y]=player+1,tot++;
            if(judge(x,y)||tot==mplen*mplen) {
                if(tot==mplen*mplen) player=3;
                gotoxy(0,0);
                for(int j=1; j<=50; j++) {
                    for(int i=1; i<=12; i++) cout<<win[player];
                    Sleep(50);
                }
                break;
            }
            player^=1;
        }
        system("cls");
        gotoxy(0,0),cout<<"再玩一局请输入1,输入其他则退出:",getline(cin,s);
        if(s!="1") break;
        system("cls");
    }
    return 0;
}

::::