本站提倡有节制游戏,合理安排游戏时间,注意劳逸结合。

【yate源码】【java源码变网页】【微猫源码vip】c语言五子棋源码_c语言程序设计五子棋源代码

2024-12-29 20:10:55 来源:焦点 分类:焦点

1.c?语言棋源码c语言程源代?????????Դ??
2.五子棋C语言代码
3.求助高手,求一个C语言五子棋的序设yate源码代码 带流程图的!
4.C语言五子棋胜利判断式

c语言五子棋源码_c语言程序设计五子棋源代码

c?计棋java源码变网页?????????Դ??

       #include <stdio.h>

       #include <stdlib.h>

       #include <conio.h>

       #include <time.h>

       #include <windows.h>

       #define TEXTS 7

       #define CURSOR

       #define CHESSBOARD

       #define WHITECHESS

       #define SELECTEDWHITE

       #define BLACKCHESS

       #define SELECTEDBLACK

       #define qx1_num

       #define qx2_num

       typedef struct node

       {

        int step;

        int color;

       } NODE;

       typedef struct point

       {

        int x;

        int y;

       }_POINT;

       typedef struct qixing

       {

        char qx[8];

        int value;

       }QIXING;

       HANDLE hOutput=GetStdHandle(STD_OUTPUT_HANDLE);

       _POINT cursor;

       int direction[8][2]={ { 0,-1},{ 0,1},{ -1,0},{ 1,0},{ -1,-1},{ 1,1},{ -1,1},{ 1,-1}};

       QIXING qx1[qx1_num]={ { "x",},{ "1x",},{ "x",},{ "0x",},{ "x",},{ "x",},

       { "0x",},{ "x",},{ "0x",},{ "0x",},{ "x",},

       { "x1",},{ "1x",},{ "x",},{ "x",},{ "1x",},

       { "x",},{ "0x",},{ "x",},{ "0x",},{ "0x",},

       { "0x",},{ "x",},{ "x2",},{ "1x",},{ "0x",},{ "0x",5}};

       QIXING qx2[qx2_num]={ { "x",},{ "1x",},{ "x",},{ "0x",},{ "x",},{ "x",},

       { "0x",},{ "x",},{ "0x",},{ "0x",},{ "x",},

       { "x1",},{ "1x",},{ "x",},{ "1x",},{ "x",},

       { "0x",},{ "x",},{ "0x",},{ "0x",},

       { "0x",},{ "x",},{ "x2",},{ "1x",},{ "0x",},{ "0x",}};

       //------------------------------------------------------------------------------------------------------

       void textcolor(int color)

       {

        SetConsoleTextAttribute(hOutput, color);

       }

       void gotoxy(int x, int y)

       {

        COORD coordScreen={ 0,0};

        coordScreen.X=x;

        coordScreen.Y=y;

        SetConsoleCursorPosition(hOutput,coordScreen);

       }

       void printnode(NODE chessboard[][], int x, int y)

       {

        textcolor(CHESSBOARD);

        if(chessboard[x][y].step==0)

        {

        if(x==cursor.x&&y==cursor.y)

        textcolor(CURSOR);

        switch(x)

        {

        case 0:

        if(y==0)printf("┏");

        else if(y==)printf("┓");

        else printf("┳");

        break;

        case 3:

        if(y==0)printf("┣");

        else if(y==3||y==)printf("╬");

        else if(y==)printf("┫");

        else printf("╋");

        break;

        case 7:

        if(y==0)printf("┣");

        else if(y==7)printf("╬");

        else if(y==)printf("┫");

        else printf("╋");

        break;

        case :

        if(y==0)printf("┣");

        else if(y==3||y==)printf("╬");

        else if(y==)printf("┫");

        else printf("╋");

        break;

        case :

        if(y==0)printf("┗");

        else if(y==)printf("┛");

        else printf("┻");

        break;

        default:

        if(y==0)printf("┣");

        else if(y==)printf("┫");

        else printf("╋");

        }

        }

        else if(chessboard[x][y].color==0)

        {

        if(x==cursor.x&&y==cursor.y)

        textcolor(SELECTEDWHITE);

        else textcolor(WHITECHESS);

        printf("●");

        }

        else

        {

        if(x==cursor.x&&y==cursor.y)

        textcolor(SELECTEDBLACK);

        else textcolor(BLACKCHESS);

        printf("●");

        }

       }

       void printchessboard(NODE chessboard[][])

       {

        int i,j;

        char letter[]={ " A B C D E F G H I J K L M N O\n"};

        for(i=0;i<;i++)

        {

        textcolor(TEXTS);

        printf("%2d",-i);

        for(j=0;j<;j++)

        printnode(chessboard,i,j);

        textcolor(TEXTS);

        printf("\n");

        }

        textcolor(TEXTS);

        printf("%s",letter);

        printf("移动:方向键 下棋:ENTER 悔棋:U 退出:F");

       }

       void renew(NODE chessboard[][],int x,int y)

       {

        COORD coordScreen;

        CONSOLE_SCREEN_BUFFER_INFO csbi;

        if(x<0||x>||y<0||y>)

        return;

        if(!GetConsoleScreenBufferInfo(hOutput,&csbi))

        return;

        coordScreen=csbi.dwCursorPosition;

        gotoxy((y-1)*2+4,x+1);

        printnode(chessboard,x,y);

        SetConsoleCursorPosition(hOutput,coordScreen);

       }

       void showmenu()

       {

        textcolor(TEXTS);

        system("cls");

        printf("1.人机对战\n2.双人对战\n3.退出\n\n请选择[1~3]:");

       }

       void showsubmenu()

       {

        textcolor(TEXTS);

        system("cls");

        printf("1.你先手\n2.电脑先手\n3.返回上级菜单\n\n请选择[1~3]:");

       }

       int getchoose(int min, int max)

       {

        int choose;

        do

        {

        choose=getch()-;

        }while(choose<min||choose>max);

        printf("%d",choose);

        return choose;

       }

       //-------------------------------------------------------------------------------------------------

       bool quit;

       bool regret;

       bool getmove(NODE chessboard[][])

       {

        char c;

        for(;;)

        {

        c=getch();

        if(c==-)

        switch(getch())

        {

        case :

        cursor.x--;

        if(cursor.x<0)cursor.x=0;

        renew(chessboard,cursor.x+1,cursor.y);

        renew(chessboard,cursor.x,cursor.y);

        break;

        case :

        cursor.x++;

        if(cursor.x>)

        cursor.x=;

        renew(chessboard,cursor.x-1,cursor.y);

        renew(chessboard,cursor.x,cursor.y);

        break;

        case :

        cursor.y--;

        if(cursor.y<0)cursor.y=0;

        renew(chessboard,cursor.x,cursor.y+1);

        renew(chessboard,cursor.x,cursor.y);

        break;

        case :

        cursor.y++;

        if(cursor.y>)cursor.y=;

        renew(chessboard,cursor.x,cursor.y-1);

        renew(chessboard,cursor.x,cursor.y);

        break;

        case :

        quit=true;

        return true;

        }

        else if(c==&&chessboard[cursor.x][cursor.y].step==0)

        return true;

        else if(c=='U'||c=='u')

        {

        regret=true;

        return true;

        }

        }

       }

       void beback(NODE chessboard[][], int step)

       {

        int i,j,tempx,tempy;

        if(step==1)return;

        if(step>2)

        {

        for(i=0;i<;i++)

        for(j=0;j<;j++)

        {

        if(chessboard[i][j].step==step-1)

        {

        chessboard[i][j].step=0;

        renew(chessboard,i,j);

        }

        else if(chessboard[i][j].step==step-2)

        {

        chessboard[i][j].step=0;

        tempx=cursor.x;

        tempy=cursor.y;

        cursor.x=i;

        cursor.y=j;

        renew(chessboard,i,j);

        renew(chessboard,tempx,tempy);

        }

        }

        }

        else if(step==2)

        {

        for(i=0;i<;i++)

        for(j=0;j<;j++)

        if(chessboard[i][j].step==step-1)

        {

        chessboard[i][j].step=0;

        renew(chessboard,i,j);

        }

        tempx=cursor.x;

        tempy=cursor.y;

        cursor.x=7;

        cursor.y=7;

        renew(chessboard,i,j);

        renew(chessboard,tempx,tempy);

        }

       }

       //-----------------------------------------------------------------------------------------

       bool inside(int x,int y)

       {

        if(x<0||x>||y<0||y>)return false;

        return true;

       }

       int line(NODE chessboard[][],int dirt,int x,int y,int color)

       {

        int i;

        for(i=0;chessboard[x+direction[dirt][0]][y+direction[dirt][1]].step>0&&

        chessboard[x+direction[dirt][0]][y+direction[dirt][1]].color==color;i++)

        {

        x=x+direction[dirt][0];

        y=y+direction[dirt][1];

        if(!inside(x,y))return i;

        }

        return i;

       }

       bool win(NODE chessboard[][],int x,int y,int color)

       {

        if(line(chessboard,0,x,y,color)+line(chessboard,1,x,y,color)>3)

        return true;

        if(line(chessboard,2,x,y,color)+line(chessboard,3,x,y,color)>3)

        return true;

        if(line(chessboard,4,x,y,color)+line(chessboard,5,x,y,color)>3)

        return true;

        if(line(chessboard,6,x,y,color)+line(chessboard,7,x,y,color)>3)

        return true;

        return false;

       }

       //----------------------------------------------------------------------------------------------

       int attacktrend,defenttrend;

       bool macth1(NODE chessboard[][],int x,int y,int dirt,int kind,int color)

       {

        int k;

        char c;

        char *p;

        p=strchr(qx1[kind].qx,'x');

        for(k=0;k<=p-qx1[kind].qx;k++)

        {

        x-=direction[dirt][0];

        y-=direction[dirt][1];

        }

        for(k=0;(unsigned)k<strlen(qx1[kind].qx);k++)

        {

        x+=direction[dirt][0];

        y+=direction[dirt][1];

        if(!inside(x,y))return(false);

        if(chessboard[x][y].step>0&&chessboard[x][y].color==color)c='2';

        else if(chessboard[x][y].step>0)c='1';

        else c='0';

        if(c=='0'&&qx1[kind].qx[k]=='x')continue;

        if(c!=qx1[kind].qx[k])return(false);

        }

        return true;

       }

       int value_qx1(NODE chessboard[][],int x,int y,int dirt, int color)

       {

        int i;

        for(i=0;i<qx1_num;i++)

        if(macth1(chessboard,x,y,dirt,i,color))

        return qx1[i].value;

        return 0;

       }

       bool macth2(NODE chessboard[][],int x,int y,int dirt, int kind,int color)

       {

        int k;

        char c;

        char *p;

        p=strchr(qx2[kind].qx,'x');

        for(k=0;k<=p-qx2[kind].qx;k++)

        {

        x-=direction[dirt][0];

        y-=direction[dirt][1];

        }

        for(k=0;(unsigned)k<strlen(qx2[kind].qx);k++)

        {

        x+=direction[dirt][0];

        y+=direction[dirt][1];

        if(!inside(x,y))return false;

        if(chessboard[x][y].step>0&&chessboard[x][y].color==color)c='2';

        else if(chessboard[x][y].step>0)c='1';

        else c='0';

        if(c=='0'&&qx2[kind].qx[k]=='x')continue;

        if(c!=qx2[kind].qx[k])return(false);

        }

        return true;

       }

       int value_qx2(NODE chessboard[][],int x,int y,int dirt, int color)

       {

        int i;

        for(i=0;i<qx2_num;i++)

        if(macth2(chessboard,x,y,dirt,i,color))

        return qx2[i].value;

        return 0;

       }

       void AI(NODE chessboard[][], int *x,int *y,int color)

       {

        int max=0;

        int maxi,maxj;

        int i,j,k;

        int probability=1;

        int value[][]={ 0};

        int valueattack[][]={ { 0}};

        int valuedefent[][]={ { 0}};

        for(i=0;i<;i++)

        for(j=0;j<;j++)

        {

        if(chessboard[i][j].step>0)continue;

        for(k=0;k<8;k++)

        valuedefent[i][j]+=value_qx1(chessboard,i,j,k,color);

        if(maxi<valuedefent[i][j])

        maxi=valuedefent[i][j];

        }

        for(i=0;i<;i++)

        for(j=0;j<;j++)

        {

        if(chessboard[i][j].step>0)continue;

        for(k=0;k<8;k++)

        valueattack[i][j]+=value_qx2(chessboard,i,j,k,color);

        if(maxj<valuedefent[i][j])

        maxj=valuedefent[i][j];

        }

        if(rand()%(maxi+maxj+1)>maxi)

        {

        attacktrend=1;

        defenttrend=1;

        }

        else

        {

        attacktrend=1;

        defenttrend=2;

        }

        for(i=0;i<;i++)

        for(j=0;j<;j++)

        {

        value[i][j]=valuedefent[i][j]*defenttrend+valueattack[i][j]*attacktrend;

        if(max<value[i][j])

        {

        max=value[i][j];

        maxi=i;

        maxj=j;

        probability=1;

        }

        else if(max==value[i][j])

        {

        if(rand()%(probability+1)<probability)

        probability++;

        else

        {

        probability=1;

        max=value[i][j];

        maxi=i;

        maxj=j;

        }

        }

        }

        *x=maxi;

        *y=maxj;

       }

       //-------------------------------------------------------------------------------------------------

       bool vshuman;

       void Vs(bool human)

       {

        int i,j;

        int color=1;

        int lastx,lasty;

        int computer;

        NODE chessboard[][]={ { 0,0}};

        if(!human)

        {

        showsubmenu();

        switch(getchoose(1,3))

        {

        case 1:

        computer=0;

        attacktrend=1;

        defenttrend=1;

        break;

        case 2:

        computer=1;

        attacktrend=1;

        defenttrend=2;

        break;

        case 3:return;

        }

        }

        for(i=0;i<;i++)

        for(j=0;j<;j++)

        chessboard[i][j].step=0;

        cursor.x=7;

        cursor.y=7;

        quit=false;

        system("cls");

        printf("\n");

        printchessboard(chessboard);

        for(i=1;i<=;)

        {

        gotoxy(0,0);

        textcolor(TEXTS);

        printf(" 第%d手, ",i);

        if(color==1)printf("黑棋下");

        else printf("白棋下");

        regret=false;

        if(i>1)

        {

        if(color!=computer||human)getmove(chessboard);

        else

        {

        lastx=cursor.x;

        lasty=cursor.y;

        AI(chessboard,&cursor.x,&cursor.y,color);

        renew(chessboard,lastx,lasty);

        }

        }

        if(quit)return;

        if(regret)

        {

        beback(chessboard,i);

        if(i>2)i-=2;

        else if(i==2)

        {

        i=1; color=(color+1)%2;

        }

        }

        else

        {

        chessboard[cursor.x][cursor.y].step=i++;

        chessboard[cursor.x][cursor.y].color=color;

        renew(chessboard,cursor.x,cursor.y);

        color=(color+1)%2;

        }

        if(win(chessboard,cursor.x,cursor.y,(color+1)%2)&&!regret)

        {

        textcolor(TEXTS);

        gotoxy(0,0);

        printf(" ");

        gotoxy(0,0);

        if(color==1)printf(" 白棋赢了!");

        else printf(" 黑棋赢了!");

        getch();

        return;

        }

        }

        gotoxy(0,0);

        printf(" ");

        gotoxy(0,0);

        printf(" 平局!");

       }

       int main()

       {

        srand((unsigned)time(NULL));

        for(;;)

        {

        showmenu();

        switch(getchoose(1,3))

        {

        case 1:Vs(false);break;

        case 2:Vs(true);break;

        case 3:printf("\n");return 0;

        }

        }

        return 0;

       }

五子棋C语言代码

       五子棋C语言代码如下:

       #include <stdio.h>

       #include <bios.h>

       #include <ctype.h>

       #include <conio.h>

       #include <dos.h>

       #define CROSSRU 0xbf /*右上角点*/

       #define CROSSLU 0xda /*左上角点*/

       #define CROSSLD 0xc0 /*左下角点*/

       #define CROSSRD 0xd9 /*右下角点*/

       #define CROSSL 0xc3 /*左边*/

       #define CROSSR 0xb4 /*右边*/

       #define CROSSU 0xc2 /*上边*/

       #define CROSSD 0xc1 /*下边*/

       #define CROSS 0xc5 /*十字交叉点*/

       /*定义棋盘左上角点在屏幕上的位置*/

       #define MAPXOFT 5

       #define MAPYOFT 2

       /*定义1号玩家的操作键键码*/

       #define PLAY1UP 0x/*上移--'W'*/

       #define PLAY1DOWN 0x1f/*下移--'S'*/

       #define PLAY1LEFT 0x1e/*左移--'A'*/

       #define PLAY1RIGHT 0x/*右移--'D'*/

       #define PLAY1DO 0x/*落子--空格键*/

       /*定义2号玩家的操作键键码*/

       #define PLAY2UP 0x/*上移--方向键up*/

       #define PLAY2DOWN 0x/*下移--方向键down*/

       #define PLAY2LEFT 0x4b/*左移--方向键left*/

       #define PLAY2RIGHT 0x4d/*右移--方向键right*/

       #define PLAY2DO 0x1c0d/*落子--回车键Enter*/

       /*若想在游戏中途退出, 可按 Esc 键*/

       #define ESCAPE 0xb

       /*定义棋盘上交叉点的状态, 即该点有无棋子 */

       /*若有棋子, 还应能指出是哪个玩家的棋子 */

       #define CHESSNULL 0 /*没有棋子*/

       #define CHESS1 'O'/*一号玩家的棋子*/

       #define CHESS2 'X'/*二号玩家的棋子*/

       /*定义按键类别*/

       #define KEYEXv 0/*退出键*/

       #define KEYFALLCHESS 1/*落子键*/

       #define KEYMOVECURSOR 2/*光标移动键*/

       #define KEYINVALID 3/*无效键*/

       /*定义符号常量: 真, 假 --- 真为1, 假为0 */

       #define TRUE 1

       #define FALSE 0

       /

相关推荐
一周热点