C語言 三子棋練習

2021-10-24 09:49:40 字數 3922 閱讀 4158

首先,在編寫之前,要建立標頭檔案和相應的.c檔案

其中,game.**件用於寫入所有要用的標頭檔案,實現三子棋遊戲的所有函式的宣告和巨集常量的定義。

#include

#include

#include

#define row 3

#define col 3

void

initboard

(char board[row]

[col]

,int row,

int col)

;//棋盤的初始化

void

print_board

(char board[row]

[col]

,int row,

int col)

;//列印棋盤

void

playermove

(char board[row]

[col]

,int row,

int col)

;//玩家走棋

void

comeputermove

(char board[row]

[col]

,int row,

int col)

;//電腦走棋

char

judge

(char board[row]

[col]

,int row,

int col)

;//判斷輸贏

intfull

(char board[row]

[col]);

//是否平局

三子棋.c是乙個主要用於執行並呼叫game.h裡面函式的檔案。三子棋.c的main函式:

int

main()

}return0;

}

選單的列印(可以隨意)

void

menu()

遊戲的實現game()

void

game()

;initboard

(board, row, col)

;//陣列初始化為空格

print_board

(board, row, col)

;//列印棋盤

char ret;

while(1

)print_board

(board, row, col)

;//列印棋盤

comeputermove

(board, row, col)

;//電腦走if(

(ret =

judge

(board, row, col))!=

' ')

//判斷輸贏

print_board

(board, row, col)

;//列印棋盤}if

(ret ==

'*')

else

if(ret ==

'#')

else

if(ret ==

'p')

print_board

(board, row, col)

;printf

("遊戲結束\n");

}

思路:先進行棋盤的初始化,並列印。在進行遊戲環節的時候,寫入迴圈體中,用函式來實現:玩家走–>判斷輸贏–>列印棋盤–>電腦走–>判斷輸贏–>列印棋盤。在判斷輸贏的過程中,如果返回值不等於『 』,說明一定有以下三種情況:1.玩家贏 2.電腦贏 3.平局。此時應該break掉迴圈,進一步判斷具體情況。如果返回值等於『 』,說明這三種情況都不滿足,那麼遊戲繼續。

game函式中真正作用的那些函式在game.c檔案中實現

(一)初始化棋盤

void

initboard

(char board[row]

[col]

,int row,

int col)

//初始化

}}

用迴圈遍歷二維陣列進行空格初始化

(二)列印棋盤

void

print_board

(char board[row]

[col]

,int row,

int col)

//列印棋盤

}printf

("\n");

if(i < row -1)

}}printf

("\n");

}}

思路:列印的過程中,把乙個棋子( * / # )和乙個 | 看成乙個整體,然後利用條件語句每行要少列印乙個 | 。同時,把『 - - - 』和 | 看成乙個整體,然後同理利用條件語句。

(三)玩家走棋

void

playermove

(char board[row]

[col]

,int row,

int col)

//玩家走棋

else

}else

}}

(四)電腦走棋

void

comeputermove

(char board[row]

[col]

,int row,

int col)

//電腦走棋

}}

利用生成的隨機值形成電腦走棋的座標。注:在主函式中要寫上srand((unsigned int )time( null))

(五)判斷輸贏 玩家贏返回『 * 』,電腦贏返回』 # 』

char

judge

(char board[row]

[col]

,int row,

int col)

//判斷輸贏 玩家贏返回* 電腦贏返回#

}for

(j =

0; j < col; j++)}

if(board[0]

[2]== board[1]

[1]&& board[1]

[1]== board[2]

[0]&& board[0]

[2]!=

' ')if(

full

(board)

)//如果平局 返回p

return

' ';

//三種情況均不滿足

}

思路:判斷輸贏有三種情況。

1.每行是否為同乙個棋子

2.每列是否為同乙個棋子

3.對角線的判斷

如果滿足以上三種情況的任一情況,返回相應的符號,來判斷是誰贏;如果平局,返回p;如果均不是,返回『 』

(六)是否平局

int

full

(char board[row]

[col])}

}return1;

//平局

}

思路:看棋盤是否都滿了,如果都滿了還沒有分出勝負,就是平局,平局返回1;如果還有空,就返回0。

總結:三子棋應用了c語言的的二維陣列的建立及初始化,函式的呼叫,一些基本的條件迴圈語句的使用等知識點。可以很好的強化對c語言的認識。

其中,我寫的判斷輸贏的方法還顯得有一些囉嗦和不靈活,希望在日後的學習中可以改進一下,變得更好。

練習 三子棋

首先列印選單,並初始化棋盤 1.用二維陣列,把陣列的沒乙個元素置為 2.列印棋盤 3.玩家落子 scanf 實現 4.檢查輸入的位置是否已經有子,如果有則需要重新輸入 1 3之間 5.判斷輸贏 包括棋盤是否已滿的情況 6.電腦落子 用rand 隨機數實現 7.檢查隨機數所指向的位置是否已經有子,如果...

C語言 三子棋

使用工具 vs2017 分為三部分 game.h 函式宣告 game.c 實現函式功能 test.c main函式 棋盤為3 3的矩陣 規則 1.每回合玩家與電腦只能放置一枚棋子 2.已有棋子的位置不能再放置棋子 3.若有一方的三枚棋子可連城一條直線,則勝利 4.若棋盤棋子已經布滿,但是雙方沒有一方...

三子棋(c語言)

今天做了乙個三子棋小遊戲,寫了好久卻只完成了一部分,先把這部分分享給大家吧!望大家給點建議和指導,最後判斷輸贏部分到現在還沒構思出來,嘿嘿!game.h define crt secure no warnings 1 ifndef game h define game h include inclu...