c语言简单实现井字棋

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/weixin_45529401/article/details/102683882

纯新人,简单实现了一下井字棋,过程还是挺曲折的。如果有更好的方法,请多指教。

#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
void start();//地图绘制
void player1();//玩家1控制
void player2();//玩家2控制
int gamecontroler();
int map[5][5] =
{
    { 10,1,11,1,12 },
    { 2,3,2,3,2 },
    { 16,1,17,1,18 },
    { 2,3,2,3,2 },
    { 19,1,20,1,21 },
};
int x, y;
int game=0;
char input;
int round=1;
int main()
{
    while (1)
    {
        system("cls");
        start();
        if (game > 0)
        {
            break;
        }
        
        while (1)
        {
            if (round == 1)
            {
                player1();
                round = 2;
                break;
            }
            if (round == 2)
            {
                player2();
                round = 1;
                break;
            }  //控制异步输入
        }
        game=gamecontroler();
    }
    if (game == 1)
        printf("使用O的玩家胜利了\n");
    if (game == 2)
        printf("使用X的玩家胜利了\n");
        
        if (game == 3)
            printf("平局了,淦!\n");
        return 0;
    
}
void start()
{
    int i, j;
    for (i = 0; i < 5; i++)
    {
        for (j = 0; j < 5; j++)
        {
            switch (map[i][j])
            {
            
            case 1:
                printf("|");
                break;
            case 2:
                printf("-");
                break;
            case 3:
                printf("+");
                break;
            case 4:
                printf("O");
                break;
            case 5:
                printf("X");
                break;
            default:
                printf(" ");
                break;
            }
        }
        printf("\n");
    }
    printf("\n以从左到右,从下到上的顺序将格子编号为1-9(即与小键盘位置对应),输入对应编号以在所在格放置棋子,O先走\n");
}
void player1()

    int con = 1; //控制输入是否正确
    while(con)
    {
        input = getch();
        switch (input)
        {
        case '7':
            if (map[0][0] >= 10)
            {
                map[0][0] = 4; break;
            }
            else
            {
                printf("该位置已经有棋子了"); con++; input = 0; break;
            }
        case '8':if (map[0][2] >= 10)
        {
            map[0][2] = 4; break;
        }
                 else
                 {
                     printf("该位置已经有棋子了"); con++; input = 0; break;
                 }
        case '9':if (map[0][4] >= 10)
        {
            map[0][4] = 4; break;
        }
                 else
                 {
                     printf("该位置已经有棋子了"); con++; input = 0; break;
                 }
        case '4':if (map[2][0] >= 10)
        {
            map[2][0] = 4; break;
        }
                 else
                 {
                     printf("该位置已经有棋子了"); con++; input = 0; break;
                 }
        case '5':if (map[2][2] >= 10)
        {
            map[2][2] = 4; break;
        }
                 else
                 {
                     printf("该位置已经有棋子了"); con++; input = 0; break;
                 }
        case '6':if (map[2][4] >= 10)
        {
            map[2][4] = 4; break;
        }
                 else
                 {
                     printf("该位置已经有棋子了"); con++; input = 0; break;
                 }
        case '1':if (map[4][0] >= 10)
        {
            map[4][0] = 4; break;
        }
                 else
                 {
                     printf("该位置已经有棋子了"); con++; input = 0; break;
                 }
        case '2':if (map[4][2] >= 10)
        {
            map[4][2] = 4; break;
        }
                 else
                 {
                     printf("该位置已经有棋子了"); con++; input = 0; break;
                 }
        case '3':if (map[4][4] >= 10)
        {
            map[4][4] = 4; break;
        }
                 else
                 {
                     printf("该位置已经有棋子了"); con++; input = 0; break;
                 }
        default:printf("请按规则输入\n"); 
            break;
            }
        con--;
        }
    
}
void player2()
{
    int con = 1; //控制输入是否正确
    while (con)
    {
        input = getch();
        switch (input)
        {
        case '7':
            if (map[0][0] >= 10)
            {
                map[0][0] = 5; break;
            }
            else
            {
                printf("该位置已经有棋子了"); con++; input = 0; break;
            }
        case '8':if (map[0][2] >= 10)
        {
            map[0][2] = 5; break;
        }
                 else
                 {
                     printf("该位置已经有棋子了"); con++; input = 0; break;
                 }
        case '9':if (map[0][4] >= 10)
        {
            map[0][4] = 5; break;
        }
                 else
                 {
                     printf("该位置已经有棋子了"); con++; input = 0; break;
                 }
        case '4':if (map[2][0] >= 10)
        {
            map[2][0] = 5; break;
        }
                 else
                 {
                     printf("该位置已经有棋子了"); con++; input = 0; break;
                 }
        case '5':if (map[2][2] >= 10)
        {
            map[2][2] = 5; break;
        }
                 else
                 {
                     printf("该位置已经有棋子了"); con++; input = 0; break;
                 }
        case '6':if (map[2][4] >= 10)
        {
            map[2][4] = 5; break;
        }
                 else
                 {
                     printf("该位置已经有棋子了"); con++; input = 0; break;
                 }
        case '1':if (map[4][0] >= 10)
        {
            map[4][0] = 5; break;
        }
                 else
                 {
                     printf("该位置已经有棋子了"); con++; input = 0; break;
                 }
        case '2':if (map[4][2] >= 10)
        {
            map[4][2] = 5; break;
        }
                 else
                 {
                     printf("该位置已经有棋子了"); con++; input = 0; break;
                 }
        case '3':if (map[4][4] >= 10)
        {
            map[4][4] = 5; break;
        }
                 else
                 {
                     printf("该位置已经有棋子了"); con++; input = 0; break;
                 }
        default:printf("请按规则输入\n");
            break;
        }
        con--;
    }

}

int gamecontroler()
{
    int i, j;
    switch (input)
    {
    case '1':i = 4, j = 0; break;
    case '2':i = 4, j = 2; break;
    case '3':i = 4, j = 4; break;
    case '4':i = 2, j = 0; break;
    case '5':i = 2, j = 2; break;
    case '6':i = 2, j = 4; break;
    case '7':i = 0, j = 0; break;
    case '8':i = 0, j = 2; break;
    case '9':i = 0, j = 4; break;
    }

    if ((map[0][0] == map[0][2] && map[0][2] == map[0][4]) || (map[2][0] == map[2][2] && map[2][2] == map[2][4]) || (map[4][0] == map[4][2] && map[4][2] == map[4][4]) ||
        (map[0][0] == map[2][0] && map[2][0] == map[4][0]) || (map[0][2] == map[2][2] && map[2][2] == map[4][2]) || (map[0][4] == map[2][4] && map[2][4] == map[4][4]) ||
        (map[0][0] == map[2][2] && map[2][2] == map[4][4]) || (map[0][4] == map[2][2] && map[2][2] == map[4][0]))
    {

        if (map[i][j] == 4)
        {
            return 1;
        }
        if (map[i][j] == 5)
        {
            return 2;
        }
        
    }
    else if ((map[2][2] < 10) && (map[0][2] < 10) && (map[4][2] < 10) && (map[2][0] < 10) && (map[2][4] < 10) && (map[4][4] < 10) && (map[4][0] < 10) && (map[0][0] < 10) && (map[0][4] < 10))

    {
        return 3;

    }
        else return 0;

    
}

猜你喜欢

转载自blog.csdn.net/weixin_45529401/article/details/102683882