C語言實現三子棋遊戲

2021-07-23 16:31:02 字數 4101 閱讀 2796

三子棋是乙個簡單的人機對戰遊戲在3*3的棋盤上,只要有一方下的子連成一條直線則顯示遊戲獲勝,遊戲結束。例如:

想要用c語言編寫三子棋其實不難,主要把程式設計的思想順利清楚就很容易實現了。編寫三子棋遊戲我們可以先建立乙個 game.h檔案作為標頭檔案,用來宣告函式和定義一些常亮,在定義乙個game.c檔案來實現具體的函式功能,最後定義乙個text.c檔案主要編寫實現這也遊戲的邏輯。

現在我們簡單梳理一下要實現遊戲的邏輯,首先玩家要玩遊戲我們可以設定選單函式供玩家選擇是否玩遊戲。

void menu()

只有當玩家選擇了play,表示玩家要玩遊戲了,這就需要開始在棋盤下棋了,所以我們還要做的工作就是初始化棋盤。
void init_board (char board[rows][cols], int rows, int cols)//初始化棋盤

}}

棋盤初始化好後,玩家和電腦就要下棋了,每次下完棋都要判斷是否已經決出勝負,如果有一方勝利就停止本盤遊戲。

void play_game(char board [rows][cols])

printf_board(board,rows, cols);

printf("***** 電腦下棋 ******\n");

computer_move(board);//電腦下棋

if (check_win(board) == 'c')

sleep(1000);

printf_board(board, rows, cols);

} printf("*************************\n");

if (check_win(board) == 'p')

else

printf_board(board, rows, cols);

printf("\n");

memset(board,' ', rows*cols*sizeof(char));

}

三子棋主要的邏輯就是這些,然後就是具體的函式實現。但是有幾點要注意的問題很容易忽略:

1.在玩家下棋時對輸入的座標要進行判斷,不能超過棋盤的範圍,也不能輸入的座標已經被下過棋了,這也是不行的,需要重新輸入座標;

2.在選單函式顯示後使用者進行選擇時用到了列舉型別,初始化了玩家選擇1就是玩遊戲,選擇0就是退出。

enum ch

;

3. 在初始化棋盤時對棋盤的行列進行了巨集定義,方便以後對程式的擴充套件,方便對行列重新定義。

#define rows 3//行

#define cols 3//列

4.我在電腦下棋前加了乙個sleep(); 該函式主要為了在玩家下完棋后,延時輸出電腦下棋的情況,使程式看起來更加有互動性. 注意別忘了他的頭函式:

#include

下面是具體的**實現:

1.text.c

#define _crt_secure_no_warnings 1

#include"game.h"

void play_game(char board [rows][cols])

printf_board(board,rows, cols);

printf("***** 電腦下棋 ******\n");

computer_move(board);//電腦下棋

if (check_win(board) == 'c')

sleep(1000);

printf_board(board, rows, cols);

} printf("*************************\n");

if (check_win(board) == 'p')

else

printf_board(board, rows, cols);

printf("\n");

memset(board,' ', rows*cols*sizeof(char));

}void menu()

void game()

; init_board(board, rows, cols);

//printf_board(board, rows, cols);

srand((unsigned)time(null));

menu();

printf("請選擇:");

scanf("%d", &input);

while (input)

menu();

printf("請選擇:");

scanf("%d", &input); }

}int main()

2.game.c

#define _crt_secure_no_warnings 1

#include "game.h"

void init_board (char board[rows][cols], int rows, int cols)//初始化棋盤 }}

void printf_board(char board[rows][cols], int rows, int cols)

}void player_move(char board[rows][cols])//玩家玩

else

} else }

}void computer_move(char board[rows][cols])//電腦玩 }}

char check_win(char board[rows][cols])

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

if (((board[0][0] == board[1][1])&&(board[1][1] == board[2][2])) && (board[2][2] == 'x'))

if (((board[0][2] == board[1][1]) && (board[1][1] == board[2][0])) && (board[1][1] == 'x'))

//判斷電腦獲勝

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

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

if (((board[0][0] == board[1][1]) && (board[1][1] == board[2][2])) && (board[2][2] == '0'))

if (((board[0][2] == board[1][1]) && (board[1][1] == board[2][0])) && (board[1][1] == '0'))

}

3.game.h
#define _crt_secure_no_warnings 1

#include#include#include#include#include#ifndef __game_h__

#define __game_h__

#define rows 3//行

#define cols 3//列

三子棋遊戲(c語言實現)

一說到寫個三子棋遊戲,首先我們得想到有個棋盤初始化和棋盤列印函式。接下來,玩遊戲階段,人玩遊戲,電腦玩遊戲,各寫乙個函式,每次下完棋都得判斷有沒有人贏了遊戲,若有人贏了,遊戲退出,否則繼續遊戲。在這過程中,還有可能棋盤滿 了,所以寫個判斷棋盤是否滿的的函式,棋盤滿了,程式結束,沒人贏,此時就平局。當...

C語言實現三子棋遊戲

先看一下最終效果 void chess board char arr row col int row,int col 初始化棋盤 void mimeograph char arr row col int row,int col 列印棋盤 void player char arr row col in...

C語言 實現三子棋遊戲

更大程度地感受到每乙個bug除錯成功之後的喜悅。眾所周知,寫 並不難,往往難點就在於找bug。當然,在遇到bug時我們也不慌不怕。在完成 量較多的程式時,我們必須掌握一定的除錯技巧,比如監視 逐過程 逐語句 斷點 了解除錯技巧 這裡 那麼,完成三子棋遊戲的重難點仍舊在於二維陣列,其次便是函式的呼叫及...