相信大部分人都玩過五子棋,也知道五子棋的規則與玩法。而今天的三子棋就是簡易版的五子棋。
首先,在一張3*3的棋盤上,雙方先後落子,誰先形成三個相同且相連的棋,誰就贏得了比賽。可以是一排或者一列三個相同,也可以是兩個對角線上的三個棋子相同。如下圖所示,綠方獲勝。
從上方的簡單描述中,我們也可以大體知道,c語言實現這樣乙個單機版的三子棋是什麼樣的。接下來我們就整體說一下思路。
首先,我們需要乙個選單介面,來提示使用者進行遊戲或者退出。
主函式裡分為開始遊戲(game()函式)和退出,並且不同的情況呼叫他們各自的函式來實現功能。
在game()函式函式裡, 首先需要乙個3*3的二維陣列當作棋盤,並且需要對棋盤初始化,因為雙方沒落子之前棋盤是空的,所以我們需要將棋盤的每個位置初始化為空格字元(initboard()函式)。遊戲一旦開始,我們需要將初始化後的棋盤顯示(showboard()函式)在使用者面前。接下來讓使用者輸入自己所要落子的位置,並且判斷該位置是否合法。使用者落子之後,需要判斷當前棋盤是否已滿,或者是否有人已經贏得比賽(judge()函式)。同樣,在使用者落子之後,電腦通過生成隨機數來落子。
最後,通過迴圈來依次落子。
如上圖所示,就是今天分檔案專案的三大部分。下面就每個檔案裡邊的內容以及函式的具體實現一一說明。
1.main.c檔案
此檔案主要是來實現三子棋的總體框架,呼叫封裝好的各個介面。
#include"game.h"
int main()
} system("pause");
return 0;
}
#include"game.h"就是我們宣告了各大介面函式,以及巨集定義、標頭檔案的宣告。quit是用來使用者是否要退出遊戲的乙個標誌,使用者選擇2,則quit置為1,!quit就是0,即條件不成立退出迴圈。
2.game.h標頭檔案
此檔案宣告了各大介面函式,以及巨集定義、標頭檔案的宣告。
#ifndef _game_h_
#define _game_h_
#include#include#include#pragma warning(disable:4996)
#define col 3
#define row 3
#define player 'x' //使用者落子用x字元顯示
#define computer 'o' //電腦落子用o字元顯示
#define n '1'
#define f '2'
//選單函式
void menu();
//遊戲函式
void game();
//初始化棋盤的函式
void initboard(char board[row], int row, int col);
//列印棋盤的函式
void showboard(char board[row], int row, int col);
//電腦落子函式
void computerplay(char board[row], int row, int col);
//判斷棋盤是否滿 或者此時是否有人贏得比賽
char judge(char board[row], int row, int col);
#endif
**裡宣告的每個函式的功能我都一一標註過~~~。
2.game.c檔案
大頭來了!!
首先說一下game()函式,此函式可是整個遊戲的中心,能否快樂下棋,就看此成敗!
void game()
if (board[x - 1][y - 1] !=' ')
//使用者落子(修改棋盤介面,讓使用者看到下棋的過程)
board[x - 1][y - 1] = player;
//判斷棋盤是否下滿或者有人是否贏了
result = judge(board, row, col);
if (result != 'n')//棋盤滿了或者贏了
//電腦落子
computerplay(board, row, col);
result = judge(board, row, col);
if (result != 'n')
} while (1);
if (result == player)
else if (result == computer)
else
printf("你玩的不錯要不要再來一把!!!~~~~~\n");
}
思路我在第二部分也說了,具體到每行**的注釋已經標註~~
選單函式menu()
void menu()
執行結果:
初始化棋盤函式initboard()
也就是將九個位置初始化為空格
void initboard(char p[col], int row, int col)
}}
列印棋盤函式 showboard()
void showboard(char board[row], int row, int col)
printf("\n ---------------\n");
}}
執行結果:
電腦落子函式computerplay()
//電腦下棋
void computerplay(char board[row], int row, int col)
}}
判斷是此時棋盤是否放滿judge()函式
//判斷是此時棋盤是否放滿(n-->沒滿,繼續走,f--->滿了退出)
char judge(char board[row], int row, int col)
//判斷每列
if (board[1][i] != ' ' && board[1][i] == board[0][i] && board[0][i] == board[2][i])
}//判斷對角線
if ((board[1][1] != ' ' && board[1][1] == board[0][0] && board[0][0] == board[2][2]) || \
(board[1][1] != ' ' &&board[1][1] == board[2][0] && board[2][0] == board[2][2]))
//棋盤全部下滿 返回f ;沒滿 返回n
if (board[1][1] != ' '&& board[0][0] != ' '&& board[2][2] != ' '&& board[1][2] != ' '&& \
board[0][2] != ' '&& board[1][0] != ' '&&board[2][0] != ' '&&board[2][1] != ' '&&board[0][1] != ' ')
return 'n';
}
執行結果
C語言實現三子棋
game.h define crt secure no warnings 1 ifndef game h define game h include include include include define rows 3 define cols 3 void init board char bo...
三子棋C語言實現
要寫這個三子棋的程式我們分為三個部分首先是宣告函式的標頭檔案,我們分別宣告了五個函式,初始化棋盤,列印棋盤,玩家走,電腦走,檢查是否贏了。之後我們寫測試 然後分別來實現這五個函式 define crt secure no warnings 1 ifndef game h define game h ...
C語言實現三子棋
實現三子棋程式,只要我們能夠理清楚思路,就可以知道其實它的做法並不難,重點在於實際寫 時需要多關注細節。這裡我們可以寫完一塊就可以立馬執行程式檢查是否如我們所想的效果出現,如若不是便可立即查錯糾錯。如下。test.c include include include include game.h vo...