c語言 C語言實現井字棋遊戲

2021-08-29 08:05:48 字數 4676 閱讀 7703

遊戲介紹:井字棋(tic tac toe)是由德國人發明的三連棋遊戲,要求玩家輪流在一有九格方盤上劃加字或圓圈,誰先把三個同一記號排成橫線、直線、斜線,,即是勝者!此文章將教初學者如何利用簡單的c語句完成井字棋遊戲。

框架介紹:在此次完成遊戲的過程中我們將遊戲的檔案分成3個部分。1. game.h 部分為我們存放遊戲的標頭檔案,應該將此部分放入編譯器的標頭檔案資料夾中。2. test.c 作為第二部分存放我們的遊戲主邏輯部分,此部分存入原始檔部分,將引用我們的「game.h」檔案部分。3. game.c則作為我們實現遊戲的原始檔部分,將所有標頭檔案中的宣告的逐個實現。

遊戲邏輯介紹:想實現井字棋遊戲首先我們要想常規遊戲一樣有乙個選單,假設選擇1開始0退出,進入遊戲後我們得擁有乙個3x3的遊戲棋盤,類似於乙個井字,很容易理解,所以我們首先應該定義乙個board陣列以便存放之後的字元,所以(1).我們應該定義乙個3x3的棋盤。接著我們得將這個棋盤列印出來,但是我們在列印時棋盤中沒有存放東西,所以棋盤中先用空格填充。接著我們開始列印棋盤的分割線,所以(2).列印棋盤的分割線。此處分割線如何列印會在遊戲中具體介紹。(3).棋盤擁有之後我們實際上就要開始實現人機之間的互動,是實現人間分別下棋的乙個過程。將我們可以將下棋的過程實現在棋盤上後,緊接著我們要判斷遊戲的結果。所以(4).實現人機對戰後判斷遊戲的結果。實現以上邏輯,遊戲執行的基本思想及完成。

遊戲實現部分:首先實現test.c部分: 首先我們編寫乙個簡單的遊戲邏輯,如下圖**所示

int

main()

}while

(input)

;return0;

}

——————————————————————————

以下部分放置於主函式之上即可

完成簡單邏輯後我們應完成選單的列印以及game()函式的部分:

void

menu()

**void

game()

//**函式部分將在game.c部分進行進一步講解**

;char ret;

initboard

(board,row,col)

;displayboard

(board,row,col)

;while(1

)**if

(ret==

'x')

else

if(ret==

'0')

else

if(ret==

'q')

displayboard

(board,row,col)

;}

——————————————————————————————

(2).第二部分則為game.h的標頭檔案部分,完整的標頭檔案部分如下

——————————————————————————————

#include

//**列印函式的標頭檔案**

#include

#include

//**電腦生成隨機數的time函式標頭檔案**

#define row 3

//**此處用define定義3行3列的棋盤**

#define col 3

void

initboard

(char board[row]

[col]

,int row,

int col)

;//**定義棋盤的函式宣告**

void

displayboard

(char board[row]

[col]

,int row,

int col)

;//**列印棋盤的函式的宣告**

void

computermove

(char board[row]

[col]

,int row,

int col)

;//**電腦移動的函式宣告**

void

playermove

(char board[row]

[col]

,int row,

int col)

;//**玩家移動的函式宣告**

char

iswin

(char board[row]

[col]

,int row,

int col)

;//**判斷電腦或者玩家有沒有獲得遊戲勝利的函式宣告**

intisfull

(char board[row]

[col]

,int row,

int col)

;//**判斷是否平局的函式宣告**

——————————————————————————————————————————

以上我們就實現了標頭檔案和遊戲大體邏輯部分,接下來我們則要實現最重要的遊戲部分,標頭檔案中的自定義函式宣告我們都將在game.c中一一實現。

——————————————————————————————————————————————

game.c:

首先來看定義的第乙個函式,initboard函式,此函式將完成我們九個格仔的初始化,我們將格仔全部初始化為空格:

void

initboard

(char board[row]

[col]

,int row,

int col)

//**空型函式,board[row][col]接受指標,row,col為接受的形式引數**

}實際上我們還可以使用更方便的memset函式:

——————————————————————————————

接著列印我們的棋盤的分割線

——————————————————————————————

void

displayboard

(char board[row]

[col]

,int row,

int col)

////}

/此處列印方式不能滿足改變row col數值後的棋盤所以我們出現第二種列印方式

printf

("\n");

if(iprintf

("\n");

}}}

————————————————————————————————————

緊接著我們就要開始完**機對戰的邏輯

————————————————————————————————————

電腦移動

void

computermove

(char board[row]

[col]

,int row,

int col)

}}

玩家移動

——————————————————————————————

void

playermove

(char board[row]

[col]

,int row,

int col)

else

}else

}}

——————————————————————————————

到這裡我們就完成了人機對戰的基本操作,接下來我們得判斷遊戲的輸贏。

————————————————————————————————

char

iswin

(char board[row]

[col]

,int row,

int col)

for(i=

0; i(board[0]

[0]==board[1]

[1]&&board[1]

[1]==board[2]

[2]&&board[2]

[2]!=

' ')

//**對角線相連**

if(board[0]

[2]==board[1]

[1]&&board[1]

[1]==board[2]

[0]&&board[2]

[0]!=

' ')if(

isfull

(board,row,col)

)//**這裡判斷是否出現平局**

return

' ';

}int

isfull

(char board[row]

[col]

,int row,

int col)

}return1;

}

到這裡,我們的井字棋遊戲也就結束了,但遊戲存在很多不完美的東西,比如在進行遊戲時電腦並不會優先生成3個相連的數,他只能隨機生成在9個格仔裡,所以我們只保證了遊戲的邏輯但是並沒有遊戲的可玩性,而且我們的遊戲也只能靠玩家輸入座標來完成,還沒有達到乙個遊戲的最終的要求。

ps:**貼上過去直接可以進行遊戲

C語言實現井子棋(多子棋)遊戲

標頭檔案 game.h 主函式檔案 主入口 和函式實現檔案 game.c 前言一 主函式檔案 主入口 二 標頭檔案 game.h 三,標頭檔案函式實現檔案 game.c 當然電腦是隨機的沒有相應演算法實現 電腦計算下棋判斷下 贏,所以這裡電腦是隨機下的都是隨機值 include include ga...

C語言井字棋

include include include include 主要邏輯 使用者資料 棋盤 儲存使用者資料 正好對應3 3的乙個棋盤的九個資料點 每個裡面乙個x,y對應棋盤中的乙個填棋子的位置 struct point char map 14 14 struct point data 4 4 代表九...

C 實現井字棋遊戲

初步實現雙玩家輸入,操作遊戲 下一步將實現人機博弈 include lwww.cppcns.comt iostream using namespace std void player1 void 玩家1輸入 操作 函式 void player2 void 玩家2輸入 操作 函式 void game ...