今天帶大家用C語言制作一個三子棋小游戲~
打開VS,這里我們建立源檔案test.c(用于測驗功能) game.c(用于保存游戲主體函式)以及一個game.h頭檔案,
建立好了檔案,接下來就要一步步確立游戲的流程,并構造游戲整體的框架,
一個游戲,總得要個選單引導玩家進行操作吧,那么我們在進入游戲之后,列印一個選單,并且引導玩家進行選擇,這里我們構造一個print_menu函式進行實作,
我們使用do while陳述句進行回圈,讓玩家可以多次游玩,while()控制條件放入玩家輸入的變數input,讓玩家輸入0時可以結束回圈,退出游戲,


測驗后發現功能正常,接下來就是實作游戲主體部分,
首先,下棋需要列印一個游戲棋盤進行展示,我們先設定好一個二維陣列
,以裝入“棋子”,將棋盤的行與列進行宏定義,以便日后進行修改,
再用Init_board(char arr[ROW][COL], int row, int col)函式將棋盤初始化,這里將行與列作為引數傳入是為了在ROW,COL未被定義時能自行輸入行與列,不至于使得函式無法使用,
因為初始化后“棋子”的位置不顯示字符,我們將陣列內容全部初始化為空格,
接下來,就是列印棋盤,我們預設棋盤列印后效果如圖:????????????????????????????
那么我們需要將一行拆分為字符行?????????????????????
與分割行??????????????
,并且回圈列印,
我們創建一個print_board實作棋盤列印,具體內容如下,


既然棋盤都列印好了,那么接下來就能進入到游戲對戰環節了,對戰雙方分別為玩家與簡單級別的電腦AI(霧),
這里我們先構造一個player_move函式,實作玩家下棋的步驟,???????
這里我們要注意,當玩家輸入1 1時,實際指向的是arr[0][0],所以我們需要在函式里進行一點小小的修改,將范圍從i>=0改為i>=1,以此類推進行修改,避免指向錯誤的元素,
接下來 測驗一下玩家下棋

看起來沒什么問題,那么我們繼續實作電腦下棋,這里我們構造computer_move函式,再借助srand和rand函式,讓電腦得以在隨機位置下棋,


再來測測能不能在上棋盤和電腦下棋呢

看起來沒什么問題,這樣,我們就能愉快的在棋盤上和電腦下棋了,但是,是不是還少了點什么?
沒錯,這是個需要判斷輸贏的游戲,所以我們還需要構造一個函式來判斷游戲的勝負,
每下一步,我們便判斷一次勝負,那么情況有以下幾種
1:玩家贏
2:電腦贏
3:沒有決出勝負,繼續下棋
4:棋滿,平局
對于1 2情況 我們進行 行與列 以及對角線的判斷,我們構造一個win函式來進行判斷,判斷行與列時,為了適應3行以上的情況,對行與列回圈范圍設定為0~ROW以及0~COL,當某一行或者某一列被‘O’或'X'填滿時,回傳符號O或者X,判斷對角線時,我們偷一下懶,僅判斷3行3列的情況,對于第3種,即棋盤未滿,我們在win函式中回傳字符0,不會干擾到回圈,游戲可以繼續進行,?????????????對于第4種,即平局的情況,我們在game函式內采用計數器的方式,利用變數i每下一顆棋子之后便自增1,當i=行*列時,若沒有產生勝者,便必定是平局,
game函式內部回圈體

win函式總體實作如下

這樣,我們的三子棋游戲就做好啦,然后我們可以試著和簡單難度的電腦下兩把~
最后,作者加上了一個玩家對戰功能,這樣就不用和沒腦袋的電腦對戰了,具體步驟很簡單,我們將主函式內的switch內部加上一個case 2:
修改一下選單
在game函式內加入形參,使玩家在選單輸入時程式可以記錄輸入內容,當輸入2時,進入玩家對戰
回圈體內容從人機對戰那里拿,
再將computer_move制作成player2_move,對代碼稍作修改,便可以實作玩家對戰啦~ 這樣就可以和好基友快樂的玩三子棋了 好耶!
如果能看到這里,非常感謝你的閱讀!(不過應該沒有人能看到這里吧 笑)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/290751.html
標籤:其他
上一篇:用c語言基礎知識寫小游戲之三子棋
