溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

如何用C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)易三子棋游戲

發(fā)布時(shí)間:2022-01-14 14:14:22 來(lái)源:億速云 閱讀:147 作者:iii 欄目:開發(fā)技術(shù)

今天小編給大家分享一下如何用C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)易三子棋游戲的相關(guān)知識(shí)點(diǎn),內(nèi)容詳細(xì),邏輯清晰,相信大部分人都還太了解這方面的知識(shí),所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來(lái)了解一下吧。

1、頭文件

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>
#include <stdlib.h>
//標(biāo)識(shí)符定義
#define ROW 3
#define COL 3

//函數(shù)定義
//棋盤初始化
void init_board(char board[ROW][COL], int row, int col);
//打印棋盤
void display_board(char board[ROW][COL], int row, int col);
//玩家下棋
void player_game(char board[ROW][COL], int row, int col);
//電腦下棋
void comeputer_game(char board[ROW][COL], int row, int col);
//判斷輸贏
char is_win(char board[ROW][COL], int row, int col);

2、游戲函數(shù)

#include "game.h"

//棋盤初始化
void init_board(char board[ROW][COL], int row, int col) {
    int i = 0;
    int j = 0;
    for (i = 0; i < ROW; i++) {
        for (j = 0; j < COL; j++) {
            board[i][j] = ' ';
        }
    }
}

//打印棋盤
void display_board(char board[ROW][COL], int row, int col) {
    int i = 0;
    int j = 0;
    int k = 0;
    for (i = 0; i < ROW; i++) {
        for (j = 0; j < COL; j++) {
            printf(" %c ",board[i][j]);
            if (j < COL - 1) {
                printf("|");
            }
        }
        printf("\n");
        if (i < ROW - 1) {
            for (k = 0; k < COL; k++) {
                printf("---");
                if (k < COL - 1) {
                    printf("|");
                }
            }                
        }
        printf("\n");
    }
}

//玩家下棋
void player_game(char board[ROW][COL], int row, int col) {
    int x = 0;
    int y = 0;
    while (1)
    {
        printf("請(qǐng)輸入你要落子的坐標(biāo)>:");
        scanf("%d %d", &x, &y);
        if (x <= row && y <= col && x >= 1 && y >= 1) {
            if (board[x - 1][y - 1] == ' ') {
                board[x - 1][y - 1] = '*';
                break;
            }
            else {
                printf("你輸入的坐標(biāo)被占用!\n");
            }
        }
        else {
            printf("你輸入的坐標(biāo)有誤,請(qǐng)重新輸入!\n");
        }
    }    
}

//電腦下棋
void comeputer_game(char board[ROW][COL], int row, int col) {
    while (1) {
        int x = rand() % row;
        int y = rand() % col;
        if (board[x][y] == ' ') {
            board[x][y] = '#';
            break;
        }
    }    
}

//判斷輸贏
//1.玩家贏返回*
//2.電腦贏返回#
//3.雙方都不贏,棋盤沒有位置平局返回p
//4.雙方都不贏,棋盤還有位置繼續(xù)下棋返回c
char is_win(char board[ROW][COL], int row, int col) {
    int x = 0;
    int y = 0;     
    //判斷行
    for (x = 0; x < row; x++) {
        if (board[x][0] == board[x][1] && board[x][1] == board[x][2] && board[x][1] != ' ') {
            return board[x][1];
        }        
    }
    //判斷列
    for (y = 0; y < col; y++) {
        if (board[0][y] == board[1][y] && board[1][y] == board[2][y] && board[1][y] != ' ') {
            return board[1][y];
        }        
    }
    //判斷對(duì)角線
    if (board[0][0] == board[1][1] && board[1][1] == board[2][2] && board[1][1] != ' ') {
        return board[1][1];
    } 
    if (board[2][0] == board[1][1] && board[1][1] == board[1][2] && board[1][1] != ' ') {
        return board[1][1];
    }
    //判斷棋盤是否有空位
    for (x = 0; x < row; x++) {
        for (y = 0; y < col; y++) {
            if (board[x][y] == ' ') {
                return 'c';
            }
        }
    }
    return 'p';
}

3、游戲?qū)崿F(xiàn)

#include "game.h"

//打印菜單
void menu() {
    printf("***************************\n");
    printf("********* 三 子 棋 ********\n");
    printf("********* 1. play  ********\n");
    printf("********* 0. exit  ********\n");
    printf("***************************\n");
}

void game() {
    char win = 0;
    //定義棋盤存儲(chǔ)
    char board[ROW][COL];
    //棋盤初始化
    init_board(board, ROW, COL);
    //打印棋盤
    display_board(board, ROW, COL);
    while (1) {
        //玩家下棋
        player_game(board, ROW, COL);
        display_board(board, ROW, COL);
        //判斷輸贏
        win = is_win(board, ROW, COL);
        if (win != 'c') {
            break;
        }
        //電腦下棋
        comeputer_game(board, ROW, COL);
        display_board(board, ROW, COL);
        //判斷輸贏
        win = is_win(board, ROW, COL);
        if (win != 'c') {
            break;
        }
    }
    if (win == '*') {
        printf("恭喜玩家勝利!\n");
        display_board(board, ROW, COL);
        system("pause");
    }
    else if (win == '#') {
        printf("電腦勝利,繼續(xù)加油喲!\n");
        display_board(board, ROW, COL);
        system("pause");
    }
    else {
        printf("平局\n");
        display_board(board, ROW, COL);
        system("pause");
    }

}  

int main(void) {
    
    int num = 0;
    srand((unsigned)time(NULL));
    do {
        //打印菜單
        menu();
        //選擇菜單
        printf("請(qǐng)選擇菜單>:");
        scanf("%d", &num);
        switch (num)
        {
        case 0:
            break;
        case 1:
            game();
            break;
        default:
            printf("你的選擇錯(cuò)誤,請(qǐng)重新選擇!\n");
            system("pause");
            system("cls");
            break;
        }

    } while (num);
    

    system("pause");
    return 0;
}

效果圖片

如何用C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)易三子棋游戲

以上就是“如何用C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)易三子棋游戲”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會(huì)為大家更新不同的知識(shí),如果還想學(xué)習(xí)更多的知識(shí),請(qǐng)關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI