three pieces

In order to improve the programming ability, I wrote a simple game of sanbang. It takes the form of multiple files, and the writing is relatively low. The difficulty of the game is to let the computer win. Seniors are welcome to guide, please correct me if there is any mistake, thank you!
The following is the program source code:
header file module (game.h):


#ifndef __GAME_H__
#define __GAME_H__

#include<stdio.h>
#include<time.h>
#include<stdlib.h>

#define ROW 3
#define COL 3

enum OPTION
{
    EXIT,
    PLAY
};

void Init_TableBoard(char TableBoard[ROW][COL], int row, int col);
void Meau();
void game(char TableBoard[ROW][COL], int row, int col);
void Tableboard_Display(char TableBoard[ROW][COL], int row, int col);
void PlayerMove(char TableBoard[ROW][COL], int row, int col);
int Is_Win(char TableBoard[ROW][COL], int row, int col);
int Is_full(char TableBoard[ROW][COL], int row, int col);
void ComputerMove(char TableBoard[ROW][COL], int row, int col);
void Reverse_TableBoard(char TableBoard[ROW][COL], int row, int col);

#endif // !__GAME_H__

Source file module:
game.c:

#define _CRT_SECURE_NO_WARNINGS

#include"game.h"

void Init_TableBoard(char TableBoard[ROW][COL], int row, int col)
{
    int i = 0;
    int j = 0;
    for (i = 0; i < row; i++)
    {
        for (j = 0; j < col; j++)
        {
            TableBoard[i][j] = ' ';
        }
    }
}

void Display(char TableBoard[ROW][COL], int row, int col)
{
    int i = 0;
    int j = 0;
    for (i = 0; i < row; i++)
    {
        for (j = 0; j < col; j++)
        {
            printf("%c ", TableBoard[i][j]);
        }
        printf("\n");
    }
}

void Meau()
{
    printf("**************************\n");
    printf("***  1.PLAY    0.EXIT  ***\n");
    printf("**************************\n");
}

void game(char TableBoard[ROW][COL], int row, int col)
{
    srand((unsigned int)time(NULL));
    int ret1 = 0;// 接收判断谁赢函数的返回值 1-表示玩家赢 0-表示电脑赢 -1—表示尚未分出胜负
    int ret2 = 0;// 接收判断棋盘满没满函数的返回值 0-表示没满 1-表示满了(平局)
    Tableboard_Display(TableBoard, row, col);
    while (1)
    {
        PlayerMove(TableBoard, row, col);
        Tableboard_Display(TableBoard, row, col);
        ret1 = Is_Win(TableBoard, row, col);
        if (ret1 == 1)
        {
            printf("您赢了\n");
            break;
        }
        else if (ret1 == 0)
        {
            printf("电脑赢了\n");
            break;
        }
        ret2 = Is_full(TableBoard, row, col);
        if (ret2 == 1)
        {
            printf("平局\n");
            break;
        }
        ComputerMove(TableBoard, row, col);
        Tableboard_Display(TableBoard, row, col);
        ret1 = Is_Win(TableBoard, row, col);
        if (ret1 == 1)
        {
            printf("您赢了\n");
            break;
        }
        else if (ret1 == 0)
        {
            printf("电脑赢了\n");
            break;
        }
        ret2 = Is_full(TableBoard, row, col);
        if (ret2 == 1)
        {
            printf("平局\n");
            break;
        }
    }
}

void Tableboard_Display(char TableBoard[ROW][COL], int row, int col)
{
    int i = 0;
    for (i = 0; i < row; i++)
    {
        int j = 0;
        if (i < row - 1)
        {
            for (j = 0; j < col; j++)
            {
                if (j < col - 1)
                {
                    printf(" %c |", TableBoard[i][j]);
                }
                else
                {
                    printf(" %c  ", TableBoard[i][j]);
                }
            }
            printf("\n");
            for (j = 0; j < col; j++)
            {
                if (j < col - 1)
                {
                    printf("___|");
                }
                else
                {
                    printf("___ ");
                }
            }
            printf("\n");
        }
        else
        {
            for (j = 0; j < col; j++)
            {
                if (j < col - 1)
                {
                    printf(" %c |", TableBoard[i][j]);
                }
                else
                {
                    printf(" %c  ", TableBoard[i][j]);
                }
            }
            printf("\n");
            for (j = 0; j < col; j++)
            {
                if (j < col - 1)
                {
                    printf("   |");
                }
                else
                {
                    printf("    ");
                }
            }
            printf("\n");
        }
    }
}
void PlayerMove(char TableBoard[ROW][COL], int row, int col)
{
    int x = 0;
    int y = 0;
    printf("该您走\n");
    printf("请输入坐标:");
    while (1)
    {
        scanf("%d%d", &x, &y);
        if (x > 0 && x < 4 && y > 0 && y < 4 && (TableBoard[x - 1][y - 1] == ' '))
        {
            TableBoard[x - 1][y - 1] = 'X';
            break;
        }
        else
        {
            printf("坐标非法,请重新输入:");
        }
    }
}
int Is_Win(char TableBoard[ROW][COL], int row, int col)
{
    int i = 0;
    int j = 0;
    for (i = 0; i < row; i++)
    {
        if ((TableBoard[i][0] == TableBoard[i][1]) && (TableBoard[i][0] == TableBoard[i][2]) && (TableBoard[i][0] == 'X'))
            return 1;
        else if ((TableBoard[i][0] == TableBoard[i][1]) && (TableBoard[i][0] == TableBoard[i][2]) && (TableBoard[i][0] == '0'))
            return 0;
    }
    for (j = 0; j < col; j++)
    {
        if ((TableBoard[0][j] == TableBoard[1][j]) && (TableBoard[0][j] == TableBoard[2][j]) && (TableBoard[0][j] == 'X'))
            return 1;
        else if((TableBoard[0][j] == TableBoard[1][j]) && (TableBoard[0][j] == TableBoard[2][j]) && (TableBoard[0][j] == '0'))
            return 0;
    }
    if ((TableBoard[0][0] == TableBoard[1][1]) && (TableBoard[0][0] == TableBoard[2][2]) && (TableBoard[0][0] == 'X'))
        return 1;
    else if ((TableBoard[0][0] == TableBoard[1][1]) && (TableBoard[0][0] == TableBoard[2][2]) && (TableBoard[0][0] == 'X'))
        return 0;
    return -1;
}

int Is_full(char TableBoard[ROW][COL], int row, int col)
{
    int i = 0;
    int flag = 0;
    for (i = 0; i < row; i++)
    {
        int j = 0;
        for (j = 0; j < col; j++)
        {
            if (TableBoard[i][j] == ' ')
            {
                flag = 1;
                return 0;
            }
        }
    }
    return 1;
}
void ComputerMove(char TableBoard[ROW][COL], int row, int col)
{
    int x = 0;
    int y = 0;
    printf("电脑走:\n");
    while (1)
    {
        x = rand() % 3;
        y = rand() % 3;
        if (TableBoard[x][y] == ' ')
        {
            TableBoard[x][y] = '0';
            printf("坐标:(%d %d)\n", x+1, y+1);
            break;
        }
    }
}
void Reverse_TableBoard(char TableBoard[ROW][COL], int row, int col)
{
    int i = 0;
    int j = 0;
    for (i = 0; i < row; i++)
    {
        int j = 0;
        for (j = 0; j < col; j++)
        {
            TableBoard[i][j] = ' ';
        }
    }
}

Test module
test.c:

#define _CRT_SECURE_NO_WARNINGS

#include"game.h"

int main()
{
    char TableBoard[ROW][COL] = { 0 };
    int input = 0;
    Init_TableBoard(TableBoard, ROW, COL);
    do
    {
        Meau();
        printf("请选择:");
        scanf("%d", &input);
        switch (input)
        {
        case EXIT:
            break;
        case PLAY:
            game(TableBoard, ROW, COL);
            break;
        default:
            printf("选择非法,请重新选择\n");
            Reverse_TableBoard(TableBoard, ROW, COL);
        }
    } while (input);
    system("Pause");
    return 0;
}

Corrections are welcome, thank you!

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=325646401&siteId=291194637
Recommended