首先,在編寫之前,要建立標頭檔案和相應的.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...