c++怀旧五子棋win10版

//win10版本
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<time.h>
#include<conio.h>
#include<windows.h>
#include<ctime>
using namespace std;
struct coordinate{
    int X,Y;
}Coor1[626],Coor2[626];
char Getin=' ';
int Map[25][25],Sum1,Sum2;
int Map1[25][25]; 
void No(){
    HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
    CONSOLE_CURSOR_INFO CursorInfo;
    GetConsoleCursorInfo(handle, &CursorInfo);//获取控制台光标信息
    CursorInfo.bVisible = false; //隐藏控制台光标
    SetConsoleCursorInfo(handle, &CursorInfo);//设置控制台光标状态
}
void _Coordinate_(int x,int y){
    HANDLE winHandle;//句柄
    COORD pos = {x,y};
    winHandle = GetStdHandle(STD_OUTPUT_HANDLE);
    //设置光标位置 
    SetConsoleCursorPosition(winHandle,pos); 
}
int Hrong(int x,int y,int n){
    if(Map[x][y]==n)    return 5;
}
void Nturn(){
    int x1[10],y1[10];
    for(int i=Sum1-1;i>=0;i--){
        int x=Coor2[i].X,y=Coor2[i].Y,Emc=0;
        for(int j=0;j<10;j++){x1[j]=x;y1[j]=y;}
        while(Map[x1[0]][y1[0]]==2){    x1[0]++;y1[0]++;Emc++;}
        if(Emc==2&&Map[x-1][y-1]==0&&Map[x1[0]][y1[0]]==0){Map1[x1[0]][y1[0]]+=5+3*Hrong(x1[0]+1,y1[0]+1,2);}
        if(Emc==3&&Map[x1[0]][y1[0]]==0){Map1[x1[0]][y1[0]]+=50+90*Hrong(x1[0]+1,y1[0]+1,2);}
        if(Emc==4&&Map[x1[0]][y1[0]]==0){Map1[x1[0]][y1[0]]+=500;}
        Emc=0;
        while(Map[x1[1]][y1[1]]==2){    x1[1]--;y1[1]++;Emc++;}
        if(Emc==2&&Map[x+1][y-1]==0&&Map[x1[1]][y1[1]]==0){Map1[x1[1]][y1[1]]+=5+3*Hrong(x1[1]-1,y1[1]+1,2);}
        if(Emc==3&&Map[x1[1]][y1[1]]==0){Map1[x1[1]][y1[1]]+=50+90*Hrong(x1[1]-1,y1[1]+1,2);}
        if(Emc==4&&Map[x1[1]][y1[1]]==0){Map1[x1[1]][y1[1]]+=500;}
        Emc=0;
        while(Map[x1[2]][y1[2]]==2){    x1[2]++;y1[2]--;Emc++;}
        if(Emc==2&&Map[x-1][y+1]==0&&Map[x1[2]][y1[2]]==0){Map1[x1[2]][y1[2]]+=5+3*Hrong(x1[2]+1,y1[2]-1,2);}
        if(Emc==3&&Map[x1[2]][y1[2]]==0){Map1[x1[2]][y1[2]]+=50+90*Hrong(x1[2]+1,y1[2]-1,2);}
        if(Emc==4&&Map[x1[2]][y1[2]]==0){Map1[x1[2]][y1[2]]+=500;}
        Emc=0; 
        while(Map[x1[3]][y1[3]]==2){    x1[3]--;y1[3]--;Emc++;}
        if(Emc==2&&Map[x+1][y+1]==0&&Map[x1[3]][y1[3]]==0){Map1[x1[3]][y1[3]]+=5+3*Hrong(x1[3]-1,y1[3]-1,2);}
        if(Emc==3&&Map[x1[3]][y1[3]]==0){Map1[x1[3]][y1[3]]+=50+90*Hrong(x1[3]-1,y1[3]-1,2);}
        if(Emc==4&&Map[x1[3]][y1[3]]==0){Map1[x1[3]][y1[3]]+=500;}
        Emc=0;
        while(Map[x1[4]][y1[4]]==2){    x1[4]++;Emc++;}
        if(Emc==2&&Map[x-1][y]==0&&Map[x1[4]][y1[4]]==0){Map1[x1[4]][y1[4]]+=5+3*Hrong(x1[4]+1,y1[4],2);}
        if(Emc==3&&Map[x1[4]][y1[4]]==0){Map1[x1[4]][y1[4]]+=50+90*Hrong(x1[4]+1,y1[4],2);}
        if(Emc==4&&Map[x1[4]][y1[4]]==0){Map1[x1[4]][y1[4]]+=500;}
        Emc=0;
        while(Map[x1[5]][y1[5]]==2){    x1[5]--;Emc++;}
        if(Emc==2&&Map[x+1][y]==0&&Map[x1[5]][y1[5]]==0){Map1[x1[5]][y1[5]]+=5+3*Hrong(x1[5]-1,y1[5],2);}
        if(Emc==3&&Map[x1[5]][y1[5]]==0){Map1[x1[5]][y1[5]]+=50+90*Hrong(x1[5]-1,y1[5],2);}
        if(Emc==4&&Map[x1[5]][y1[5]]==0){Map1[x1[5]][y1[5]]+=500;}
        Emc=0;
        while(Map[x1[6]][y1[6]]==2){    y1[6]--;Emc++;}
        if(Emc==2&&Map[x][y+1]==0&&Map[x1[6]][y1[6]]==0){Map1[x1[6]][y1[6]]+=5+3*Hrong(x1[6],y1[6]-1,2);}
        if(Emc==3&&Map[x1[6]][y1[6]]==0){Map1[x1[6]][y1[6]]+=50+90*Hrong(x1[6],y1[6]-1,2);}
        if(Emc==4&&Map[x1[6]][y1[6]]==0){Map1[x1[6]][y1[6]]+=500;}
        Emc=0;
        while(Map[x1[7]][y1[7]]==2){    y1[7]++;Emc++;}
        if(Emc==2&&Map[x][y-1]==0&&Map[x1[7]][y1[7]]==0){Map1[x1[7]][y1[7]]+=5+3*Hrong(x1[7],y1[7]+1,2);}
        if(Emc==3&&Map[x1[7]][y1[7]]==0){Map1[x1[7]][y1[7]]+=50+90*Hrong(x1[7],y1[7]+1,2);}
        if(Emc==4&&Map[x1[7]][y1[7]]==0){Map1[x1[7]][y1[7]]+=500;}
    }
}
void Uturn(){
    int x1[10],y1[10];
    for(int i=Sum1-1;i>=0;i--){
        int x=Coor1[i].X,y=Coor1[i].Y,Emc=0;
        for(int j=0;j<10;j++){x1[j]=x;y1[j]=y;}
        while(Map[x1[0]][y1[0]]==1){    x1[0]++;y1[0]++;Emc++;}
        if(Emc==2&&Map[x-1][y-1]==0&&Map[x1[0]][y1[0]]==0){Map1[x1[0]][y1[0]]+=5+4*Hrong(x1[0]+1,y1[0]+1,1);}
        if(Emc==3&&Map[x-1][y-1]==0&&Map[x1[0]][y1[0]]==0){Map1[x1[0]][y1[0]]+=45+2*Hrong(x1[0]+1,y1[0]+1,1);}
        if(Emc==4&&Map[x-1][y-1]==2&&Map[x1[0]][y1[0]]==0){Map1[x1[0]][y1[0]]+=55;}
        Emc=0;
        while(Map[x1[1]][y1[1]]==1){    x1[1]--;y1[1]++;Emc++;}
        if(Emc==2&&Map[x+1][y-1]==0&&Map[x1[1]][y1[1]]==0){Map1[x1[1]][y1[1]]+=5+4*Hrong(x1[1]-1,y1[1]+1,1);}
        if(Emc==3&&Map[x+1][y-1]==0&&Map[x1[1]][y1[1]]==0){Map1[x1[1]][y1[1]]+=45+2*Hrong(x1[1]-1,y1[1]+1,1);}
        if(Emc==4&&Map[x+1][y-1]==2&&Map[x1[1]][y1[1]]==0){Map1[x1[1]][y1[1]]+=55;}
        Emc=0;
        while(Map[x1[2]][y1[2]]==1){    x1[2]++;y1[2]--;Emc++;}
        if(Emc==2&&Map[x-1][y+1]==0&&Map[x1[2]][y1[2]]==0){Map1[x1[2]][y1[2]]+=5+4*Hrong(x1[2]+1,y1[2]-1,1);}
        if(Emc==3&&Map[x-1][y+1]==0&&Map[x1[2]][y1[2]]==0){Map1[x1[2]][y1[2]]+=45+2*Hrong(x1[2]+1,y1[2]-1,1);}
        if(Emc==4&&Map[x-1][y+1]==2&&Map[x1[2]][y1[2]]==0){Map1[x1[2]][y1[2]]+=55;}
        Emc=0; 
        while(Map[x1[3]][y1[3]]==1){    x1[3]--;y1[3]--;Emc++;}
        if(Emc==2&&Map[x+1][y+1]==0&&Map[x1[3]][y1[3]]==0){Map1[x1[3]][y1[3]]+=5+4*Hrong(x1[3]-1,y1[3]-1,1);}
        if(Emc==3&&Map[x+1][y+1]==0&&Map[x1[3]][y1[3]]==0){Map1[x1[3]][y1[3]]+=45+2*Hrong(x1[3]-1,y1[3]-1,1);}
        if(Emc==4&&Map[x+1][y+1]==2&&Map[x1[3]][y1[3]]==0){Map1[x1[3]][y1[3]]+=55;}
        Emc=0;
        while(Map[x1[4]][y1[4]]==1){    x1[4]++;Emc++;}
        if(Emc==2&&Map[x-1][y]==0&&Map[x1[4]][y1[4]]==0){Map1[x1[4]][y1[4]]+=5+4*Hrong(x1[4]+1,y1[4],1);}
        if(Emc==3&&Map[x-1][y]==0&&Map[x1[4]][y1[4]]==0){Map1[x1[4]][y1[4]]+=45+2*Hrong(x1[4]+1,y1[4],1);}
        if(Emc==4&&Map[x-1][y]==2&&Map[x1[4]][y1[4]]==0){Map1[x1[4]][y1[4]]+=55;}
        Emc=0;
        while(Map[x1[5]][y1[5]]==1){    x1[5]--;Emc++;}
        if(Emc==2&&Map[x+1][y]==0&&Map[x1[5]][y1[5]]==0){Map1[x1[5]][y1[5]]+=5+4*Hrong(x1[5]-1,y1[5],1);}
        if(Emc==3&&Map[x+1][y]==0&&Map[x1[5]][y1[5]]==0){Map1[x1[5]][y1[5]]+=45+2*Hrong(x1[5]-1,y1[5],1);}
        if(Emc==4&&Map[x+1][y]==2&&Map[x1[5]][y1[5]]==0){Map1[x1[5]][y1[5]]+=55;}
        Emc=0;
        while(Map[x1[6]][y1[6]]==1){    y1[6]--;Emc++;}
        if(Emc==2&&Map[x][y+1]==0&&Map[x1[6]][y1[6]]==0){Map1[x1[6]][y1[6]]+=5+4*Hrong(x1[6],y1[6]-1,1);}
        if(Emc==3&&Map[x][y+1]==0&&Map[x1[6]][y1[6]]==0){Map1[x1[6]][y1[6]]+=45+2*Hrong(x1[6],y1[6]-1,1);}
        if(Emc==4&&Map[x][y+1]==2&&Map[x1[6]][y1[6]]==0){Map1[x1[6]][y1[6]]+=55;}
        Emc=0;
        while(Map[x1[7]][y1[7]]==1){    y1[7]++;Emc++;}
        if(Emc==2&&Map[x][y-1]==0&&Map[x1[7]][y1[7]]==0){Map1[x1[7]][y1[7]]+=5+4*Hrong(x1[7],y1[7]+1,1);}
        if(Emc==3&&Map[x][y-1]==0&&Map[x1[7]][y1[7]]==0){Map1[x1[7]][y1[7]]+=45+2*Hrong(x1[7],y1[7]+1,1);}
        if(Emc==4&&Map[x][y-1]==2&&Map[x1[7]][y1[7]]==0){Map1[x1[7]][y1[7]]+=55;}
    }
} 
void ESET(){
    for(int i=2;i<23;i++)
        for(int j=2;j<23;j++){
            if(Map[i][j]==0&&Map[i+1][j]!=0&&Map[i-1][j]==Map[i+1][j]&&(Map[i+2][j]==0||Map[i+2][j]==Map[i+1][j])&&(Map[i-2][j]==0||Map[i-2][j]==Map[i-1][j]))
                Map1[i][j]+=5;
            if(Map[i][j]==0&&Map[i][j+1]!=0&&Map[i][j-1]==Map[i][j+1]&&(Map[i][j+2]==0||Map[i][j+2]==Map[i][j+1])&&(Map[i][j-2]==0||Map[i][j-2]==Map[i][j-1]))
                Map1[i][j]+=5;
            if(Map[i][j]==0&&Map[i+1][j+1]!=0&&Map[i-1][j-1]==Map[i+1][j+1]&&(Map[i+2][j+2]==0||Map[i+2][j+2]==Map[i+1][j+1])&&(Map[i-2][j-2]==0||Map[i-2][j-2]==Map[i-1][j-1]))
                Map1[i][j]+=5;
            if(Map[i][j]==0&&Map[i-1][j+1]!=0&&Map[i+1][j-1]==Map[i-1][j+1]&&(Map[i-2][j+2]==0||Map[i-2][j+2]==Map[i-1][j+1])&&(Map[i+2][j-2]==0||Map[i+2][j-2]==Map[i+1][j-1]))
                Map1[i][j]+=5;
        }
} 
void AI(){
    if(Sum1==0){
        Map[12][12]=2;
        Coor2[Sum2].X=12;
        Coor2[Sum2++].Y=12;
        return;
    }
    for(int i=0;i<25;i++)
        for(int j=0;j<25;j++)
            Map1[i][j]=0;
    int x1[10],y1[10],Ax,Ay,Max=0;
    ESET();
    Uturn();
    Nturn();
    for(int i=Sum1-1;i>=0;i--){
        int x=Coor1[i].X,y=Coor1[i].Y,Emc[10]={0};
        for(int j=0;j<10;j++){x1[j]=x;y1[j]=y;}
        while(Map[x1[0]][y1[0]]==1){    x1[0]++;y1[0]++;Emc[0]++;}
        while(Map[x1[1]][y1[1]]==1){    x1[1]--;y1[1]++;Emc[1]++;}
        while(Map[x1[2]][y1[2]]==1){    x1[2]++;y1[2]--;Emc[2]++;}
        while(Map[x1[3]][y1[3]]==1){    x1[3]--;y1[3]--;Emc[3]++;}
        while(Map[x1[4]][y1[4]]==1){    x1[4]++;Emc[4]++;}
        while(Map[x1[5]][y1[5]]==1){    x1[5]--;Emc[5]++;}
        while(Map[x1[6]][y1[6]]==1){    y1[6]--;Emc[6]++;}
        while(Map[x1[7]][y1[7]]==1){    y1[7]++;Emc[7]++;}
        for(int j=0;j<8;j++)
            if(Map[x1[j]][y1[j]]==0)    Map1[x1[j]][y1[j]]+=Emc[j]; 
    }
    for(int i=Sum2-1;i>=0;i--){
        int x=Coor2[i].X,y=Coor2[i].Y,Emc[10]={0};
        for(int j=0;j<10;j++){x1[j]=x;y1[j]=y;}
        while(Map[x1[0]][y1[0]]==2){    x1[0]++;y1[0]++;Emc[0]++;}
        while(Map[x1[1]][y1[1]]==2){    x1[1]--;y1[1]++;Emc[1]++;}
        while(Map[x1[2]][y1[2]]==2){    x1[2]++;y1[2]--;Emc[2]++;}
        while(Map[x1[3]][y1[3]]==2){    x1[3]--;y1[3]--;Emc[3]++;}
        while(Map[x1[4]][y1[4]]==2){    x1[4]++;Emc[4]++;}
        while(Map[x1[5]][y1[5]]==2){    x1[5]--;Emc[5]++;}
        while(Map[x1[6]][y1[6]]==2){    y1[6]--;Emc[6]++;}
        while(Map[x1[7]][y1[7]]==2){    y1[7]++;Emc[7]++;}
        for(int j=0;j<8;j++)
            if(Map[x1[j]][y1[j]]==0)    Map1[x1[j]][y1[j]]+=Emc[j];
    }
    for(int i=0;i<25;i++)
        for(int j=0;j<25;j++)
            if(Map1[i][j]>Max){
                Max=Map1[i][j];
                Ax=i;
                Ay=j;
            }
    Map[Ax][Ay]=2;
    Coor2[Sum2].X=Ax;
    Coor2[Sum2++].Y=Ay;
    return;
}
void Win(){
    int x1[10],y1[10],Max1=0,Max2=0;
    for(int i=0,e=0;i<Sum1;i++){
        int x=Coor1[i].X,y=Coor1[i].Y;
        for(int j=0;j<10;j++){x1[j]=x;y1[j]=y;}
        while(Map[x1[0]][y1[0]]==1){    x1[0]++;y1[0]++;e++;}
        Max1=max(e,Max1);
        e=0;
        while(Map[x1[1]][y1[1]]==1){    x1[1]--;y1[1]++;e++;}
        Max1=max(e,Max1);
        e=0;
        while(Map[x1[2]][y1[2]]==1){    x1[2]++;y1[2]--;e++;}
        Max1=max(e,Max1);
        e=0;
        while(Map[x1[3]][y1[3]]==1){    x1[3]--;y1[3]--;e++;}
        Max1=max(e,Max1);
        e=0;
        while(Map[x1[4]][y1[4]]==1){    x1[4]++;e++;}
        Max1=max(e,Max1);
        e=0;
        while(Map[x1[5]][y1[5]]==1){    x1[5]--;e++;}
        Max1=max(e,Max1);
        e=0;
        while(Map[x1[6]][y1[6]]==1){    y1[6]--;e++;}
        Max1=max(e,Max1);
        e=0;
        while(Map[x1[7]][y1[7]]==1){    y1[7]++;e++;}
        Max1=max(e,Max1);
        e=0;
        if(Max1>=5){
            cout<<"电脑就是给智障,你赢了!!!"; 
            getchar();
            exit(0);
        }
    }
    for(int i=0,e=0;i<Sum2;i++){
        int x=Coor2[i].X,y=Coor2[i].Y;
        for(int j=0;j<10;j++){x1[j]=x;y1[j]=y;}
        while(Map[x1[0]][y1[0]]==2){    x1[0]++;y1[0]++;e++;}
        Max2=max(e,Max2);
        e=0;
        while(Map[x1[1]][y1[1]]==2){    x1[1]--;y1[1]++;e++;}
        Max2=max(e,Max2);
        e=0;
        while(Map[x1[2]][y1[2]]==2){    x1[2]++;y1[2]--;e++;}
        Max2=max(e,Max2);
        e=0;
        while(Map[x1[3]][y1[3]]==2){    x1[3]--;y1[3]--;e++;}
        Max2=max(e,Max2);
        e=0;
        while(Map[x1[4]][y1[4]]==2){    x1[4]++;e++;}
        Max2=max(e,Max2);
        e=0;
        while(Map[x1[5]][y1[5]]==2){    x1[5]--;e++;}
        Max2=max(e,Max2);
        e=0;
        while(Map[x1[6]][y1[6]]==2){    y1[6]--;e++;}
        Max2=max(e,Max2);
        e=0;
        while(Map[x1[7]][y1[7]]==2){    y1[7]++;e++;}
        Max2=max(e,Max2);
        e=0;
        if(Max2>=5){
            cout<<"你就是给智障,电脑赢了!!!";
            getchar();
            exit(0); 
        }
    }
}
void start(bool a){
    char in=0;
    int X=12,Y=12;
    bool Flag=1;
    system("mode con cols=50 lines=26");
    if(a){
        while(in!='\n'){
            _Coordinate_(0,0);
            for(int i=0;i<25;i++){
                for(int j=0;j<25;j++){
                    if(i==X&&j==Y){cout<<"╳ ";continue;}
                    if(Map[i][j]==0){cout<<"╋ ";continue;}
                }
                cout<<"\n";
            }
            in=getch();
            if(in=='w') X--;
            if(in=='s') X++;
            if(in=='a') Y--;
            if(in=='d') Y++;
            if(in==' '){Map[X][Y]=1;Coor1[Sum1].X=X;Coor1[Sum1++].Y=Y;break;}
        }
    }while(1){
        _Coordinate_(0,0);
        if(Flag)    AI();
        for(int i=0;i<25;i++){
            for(int j=0;j<25;j++){
                if(i==X&&j==Y){cout<<"╳ ";continue;}
                if(Map[i][j]==2){cout<<"○";continue;}
                if(Map[i][j]==1){cout<<"●";continue;}
                if(Map[i][j]==0){cout<<"╋ ";continue;}
            }
            cout<<"\n";
        }if(Flag)   Win();
        in=getch();
        Flag=0; 
        if(in=='w'){X--;Flag=0;}
        if(in=='s'){X++;Flag=0;} 
        if(in=='a'){Y--;Flag=0;} 
        if(in=='d'){Y++;Flag=0;} 
        if(in==' '){
            if(Map[X][Y])   Flag=0;
            else{
                Map[X][Y]=1;
                Flag=1;
                Coor1[Sum1].X=X;
                Coor1[Sum1++].Y=Y;
            }
        }
    }
}
void manu1(){
    _Coordinate_(0,0);
    cout<<"■■■■■■■■■■\n";
    cout<<"■   1.先手       ■\n";
    cout<<"■   2.后手       ■\n"; 
    cout<<"■■■■■■■■■■";
    while(1){
        char in=getch();
        if(in=='1') start(1);
        if(in=='2') start(0);
    }
}
void manu(){
    system("cls");
    cout<<"■■■■■■■■■■\n";
    cout<<"■   abs五子棋    ■\n";
    cout<<"■   1.开局       ■\n";
    cout<<"■■■■■■■■■■";
    while(1){
        char in=getch();
        if(in=='1') manu1();
    }
}
int main(){
    system("mode con cols=20 lines=4");
    No();
    manu();
    return 0;
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在C语言中,我们可以使用Win32 API来创建一个五子棋的人机对战游戏。首先,我们需要创建一个窗口来显示游戏界面。可以使用Win32 API中的CreateWindow函数来创建一个窗口,并设置窗口的标题、大小和位置等属性。 接下来,我们可以使用GDI来绘制五子棋盘和棋子。通过调用GDI函数,我们可以在窗口上绘制矩形来表示棋盘,并使用椭圆来表示棋子。我们可以使用标志位或者二维数组来保存棋盘的状态,以便在绘制棋子时能够知道当前棋盘上每个位置的状态。 为了实现人机对战,我们需要设计一个 AI 算法来让计算机能够下棋。简单的算法可以是随机选择一个空闲的位置来下棋,稍复杂一些的算法可以是评估每个空闲位置的得分,选择得分最高的位置来下棋。 当玩家下棋后,我们需要检查是否出现五子连珠的情况。可以通过遍历所有可能的连珠位置来判断当前局面是否出现胜利或平局的情况。如果出现了胜利或平局的情况,我们需要弹出相应的提示信息。 除了上述基本功能,我们还可以为游戏添加一些扩展。例如,可以实现悔棋功能,让玩家可以撤销最近的一步棋。还可以实现保存和加载游戏进度的功能,让玩家可以暂停和继续游戏。 总之,在C语言中使用Win32 API来实现五子棋人机对战是一个有挑战性但也很有趣的项目。通过合理设计窗口和绘图,以及实现人机对战逻辑,我们可以创建一个可玩性较高的五子棋游戏。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值