美文网首页C语言程序员
C语言实现三子棋

C语言实现三子棋

作者: 修夏之夏i | 来源:发表于2018-04-07 09:30 被阅读0次

    game.h

    #ifndef __GAME_H__
    #define __GAME_H__
    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    
    #define ROWS 3
    #define COLS 3
    
    
    void init_board(char board[ROWS][COLS], int row, int col);
    void display_board(char board[ROWS][COLS], int row, int col);
    void player_move(char board[ROWS][COLS], int row, int col);
    void computer_move(char board[ROWS][COLS], int row, int col);
    char check_win(char board[ROWS][COLS], int row, int col);
    
    #endif //__GAME_H__
    

    game.c

    #define _CRT_SECURE_NO_WARNINGS 1
    #include"game.h"
    void init_board(char board[ROWS][COLS], int row, int col)
    {
        memset(board, ' ', row*col);
    }
    void display_board(char board[ROWS][COLS], int row, int col)
    {
        int i = 0;
        for (i = 0; i<row; i++)
        {
            printf(" %c | %c | %c \n", board[i][0], board[i][1], board[i][2]);
            if (i != 2)
                printf("---|---|---\n");
        }
    }
    void player_move(char board[ROWS][COLS], int row, int col)
    {
        int x = 0;
        int y = 0;
        while (1)
        {
            printf("请输入坐标:");
            scanf("%d%d", &x, &y);
            x--;
            y--;
            if (((x >= 0) && (x <= 2)) && ((y >= 0) && (y <= 2)))
            {
                if (board[x][y] == ' ')
                {
                    board[x][y] = 'X';
                    break;
    
                }
                else
                {
                    printf("输入有误 !");
                }
            }
            else
            {
                printf("输入有误 !");
            }
        }
    }
    void computer_move(char board[ROWS][COLS], int row, int col)
    {
        printf("电脑下:\n");
        while (1)
        {
            int x = rand() % 3;
            int y = rand() % 3;
            if (board[x][y] == ' ')
            {
                board[x][y] = 'O';
                break;
            }
        }
    }
    static int is_full(char board[ROWS][COLS], int row, int col)
    {
        int i = 0;
        int j = 0;
        for (i = 0; i<row; i++)
        {
            for (j = 0; j<col; j++)
            {
                if (board[i][j] == ' ')
                    return 0;
            }
        }
        return 1;
    }
    char check_win(char board[ROWS][COLS], int row, int col)
    {
        int i = 0;
        for (i = 0; i<row; i++)
        {
            if ((board[i][0] == board[i][1])
                && (board[i][1] == board[i][2])
                && (board[i][1] != ' '))
                return board[i][1];
        }
        for (i = 0; i<col; i++)
        {
            if ((board[0][i] == board[1][i])
                && (board[1][i] == board[2][i])
                && (board[1][i] != ' '))
                return board[1][i];
        }
        if ((board[0][0] == board[1][1])
            && (board[1][1] == board[2][2])
            && (board[1][1] != ' '))
            return board[1][1];
        if ((board[0][2] == board[1][1])
            && (board[1][1] == board[2][0])
            && (board[1][1] != ' '))
            return board[1][1];
        if (is_full(board, row, col))
        {
            return 'q';
        }
        return ' ';
    }
    

    test.c

    #define _CRT_SECURE_NO_WARNINGS 1
    #include<stdio.h>
    #include<time.h>
    #include<stdlib.h>
    #include"game.h"
    void game()
    {
        int ret = 0;
        char board[ROWS][COLS] = { 0 };
        init_board(board, ROWS, COLS);
        display_board(board, ROWS, COLS);
        srand((unsigned int)time(NULL));
        while (1)
        {
            player_move(board, ROWS, COLS);
            if ((ret = check_win(board, ROWS, COLS)) != ' ')
                break;
            display_board(board, ROWS, COLS);
            computer_move(board, ROWS, COLS);
            if ((ret = check_win(board, ROWS, COLS)) != ' ')
                break;
            display_board(board, ROWS, COLS);
        }
        ret = check_win(board, ROWS, COLS);
        if (ret == 'X')
        {
            printf("恭喜你!你赢了!\n");
        }
        else if (ret == 'O')
        {
            printf("不好意思!你输了!\n");
        }
        else if (ret == 'q')
        {
            printf("平局!\n");
        }
        display_board(board, ROWS, COLS);
    
    
    }
    void menu()
    {
        printf("*******************************\n");
        printf("****** 1. play   0. exit ******\n");
        printf("*******************************\n");
    
    }
    int main()
    {
        int input = 0;
    
        do
        {
            menu();
            scanf("%d", &input);
            switch (input)
            {
            case 1:
                game();
                break;
            case 0:
                break;
            default:
                printf("选择错误!!");
                break;
    
            }
    
        } while (input);
        return 0;
    }
    

    相关文章

      网友评论

        本文标题:C语言实现三子棋

        本文链接:https://www.haomeiwen.com/subject/dfwehftx.html