1、主函式(main.c)
功能:進行遊戲或退出遊戲
2、遊戲總函式(game.c)
功能:通過呼叫一系列函式來實現整個三子棋遊戲
3、遊戲標頭檔案(game.h)
功能:宣告遊戲總函式中的各個函式,並定義一些巨集 1、主函式
int input = 0;
do } while (input);
主函式的作用僅僅是為了選擇開始和結束遊戲的,建立乙個無限迴圈,若輸入1則開始三子棋遊戲,若輸入0則退出程式,當程式首次開啟或一局遊戲已經結束時再次彈出選單框進行進一步的選擇。
2、棋盤初始化
int i = 0;
int j = 0;
for (i = 0; i < row; i++)
}
利用最簡單的雙重迴圈將棋盤初始化為全空。
3、列印輸出棋盤
for (i = 0; i < row; i++)
} printf("\n");
if (i != row - 1)
}printf("\n");
} }
使用自定義的|與-美化棋盤的樣式,這裡需要注意可以使用雙重迴圈+判斷的方式使得列印棋盤可以適應不同長寬的情況。
4、玩家與電腦進行落子操作
while (1)
else if(i>row||j>col)
else
}
玩家操作時需要在操作時對輸入座標的判斷,用if-else語句對輸入的座標進行全面的判斷i = rand() % row;
j = rand() % col;
if (i < row&&j < col&&board[i][j] == ' ')
而電腦與玩家操作唯一不同的就是電腦不需要手動輸入,因此要由程式設計出乙個隨機數代替手動輸入。
需要注意的是:玩家輸入按照的是普通人的思維即座標從1開始,而電腦自動生成時則可以從0開始設定座標,在生成隨機數後只需要判斷該位置是否已經存在棋子,而不需要判斷是否越界。
5、判斷成功或平局
三子棋的勝利條件無非分為三種,行、列、對角線,通過遍歷以及判斷的方式就可以實現三種形式。
行
for (i = 0; i < row; i++)
}
列for (j = 0; j < col; j++)
}
對角線//主對角線
if (board[0][0] == board[1][1] && board[0][0] == board[2][2] && board[1][1] == board[2][2] && board[1][1] != ' ')
//副對角線
if (board[0][2] == board[1][1] && board[0][2] == board[2][1] && board[1][1] == board[2][1] && board[1][1] != ' ')
三子棋的平局的條件就是當棋盤上所有的位置都已經存在棋子,所以無論是玩家還是電腦落子後都需要進行對棋盤是否已經滿了的判斷
int isfull(int row, int col, char board[col])
} }return 1;
}//check_win
if (isfull(row,col,board))
return 'c';
6、遊戲邏輯流程
首先每次玩家輸入或電腦隨機生成棋子後都需要輸出列印整個棋盤讓玩家看到當前的局勢。其次每次玩家輸入或電腦隨機生成棋子後都需要進行判斷勝利或平局的操作。**如下:
//玩家贏 *
//電腦贏 #
//平局 e
//繼續走 c
while (1)
computermove(row, col, board);
printboard(row, col, board);
if ((ret = check_win(row, col, board)) != 'c')
}if (ret == '*')
else if (ret == '#')
else
main.c#define _crt_secure_no_warnings 1
#include"game.h"
int main()
} while (input);
return 0;
}
game.c//aaabbbbbbbcccccccbbbbbbbbdddddd
#define _crt_secure_no_warnings 1
#include"game.h"
#include#includevoid menu()
void initboard(int row,int col,char board[col]) }}
void printboard(int row, int col, char board[col])
} printf("\n");
if (i != row - 1)
}printf("\n");
} }}void playermove(int row, int col, char board[col])
else if(i>row||j>col)
else }}
void computermove(int row, int col, char board[col]) }}
int isfull(int row, int col, char board[col])
} }return 1;
}char check_win(int row, int col, char board[col])
} for (j = 0; j < col; j++)
} if (board[0][0] == board[1][1] && board[0][0] == board[2][2] && board[1][1] == board[2][2] && board[1][1] != ' ')
if (board[0][2] == board[1][1] && board[0][2] == board[2][1] && board[1][1] == board[2][1] && board[1][1] != ' ')
if (isfull(row,col,board))
return 'c'; }
void game()
computermove(row, col, board);
printboard(row, col, board);
if ((ret = check_win(row, col, board)) != 'c')
}if (ret == '*')
else if (ret == '#')
else
}
game.h#define _crt_secure_no_warnings 1
#include#define row 5
#define col 5
void menu();
void initboard(int row, int col, char board[col]);
void printboard(int row, int col, char board[col]);
void playermove(int row, int col, char board[col]);
void computermove(int row, int col, char board[col]);
int isfull(int row, int col, char board[col]);
char check_win(int row, int col, char board[col]);
void game();
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...