我們游戲總體的思路如下:
目錄
1.游戲總體的邏輯 以及 開始操作:game.c
2.撰寫游戲中所需要用到的函式:work.c
初始化棋盤
列印并制作棋盤
開始下棋
玩家下棋:
電腦下棋:
如何判斷輸贏
在這里我們這樣判斷不同的情況
判斷行:
判斷列:
判斷對角線:
3.我們自己定義的頭檔案game.h
總覽三子棋代碼
game.c:
work.c:
game.h:
1.游戲總體的邏輯 以及 開始操作:game.c
撰寫一個選擇界面:
menu()
{
printf("************************\n");
printf("*********1. play********\n");//注意我們這里用 1 表示開始玩 而 非零 在vs表示為真
printf("*********0. exit********\n");//0表示為假 這樣也方便了我們后續操作的書寫
printf("************************\n");
}
因為要玩游戲嘛 這個游戲我們肯定無論如何都要運行一次 所以我們采用do-while回圈 這樣游戲就肯定會讓你判斷一次是否開始游戲了! 大家來看:
int main()
{
int input;
srand((unsigned int)time(NULL));//這里要用到隨機值這個知識點后面會給大家講到
do
{
menu(); //把menu()放在回圈里面也是為了當游戲已經判斷出輸贏
printf("請選擇:>"); //當work
scanf("%d", &input);
switch (input)
{
case 0:
{
printf("您已退出游戲!");
break;
}
case 1:
{
work();
break;
}
default:
{
printf("輸入錯誤請重新輸入!\n");
printf("------------------------\n");//這里之所以打出一條線來 是為了美觀 大家看
break; //下圖
}
}
} while (input);
return 0;
}
這里 input 的用法很關鍵 也很特別 大家看 while 回圈 和 switch選擇陳述句所用到的判斷條件都是
input 當你選擇 0 時 因為break 跳出的是 switch選擇陳述句 出來后進行 while 的判斷 0 為假 程式自然就結束了
當你選擇的是 1 時 work()作業完回傳來 break 跳出 來到 while 的判斷 為真 繼續回圈
再次顯示menu() 的界面 給玩家選擇是否再玩一局!
怎么樣? 這樣的設計是不是很巧妙
這樣時不是看上去美觀些許

到這里游戲開始操作的程式就是這些了 讓我們繼續!
2.撰寫游戲中所需要用到的函式:work.c
初始化棋盤
棋盤的初始化我們可以使用memset函式
memset函式:
memset()函式原型是extern void *memset(void *buffer, int c, int count) buffer:為指標或是陣列,
c:是賦給buffer的值,
count:是buffer的長度.(摘自 落葉隨風)
memset(board, ' ', sizeof(board));//初始化棋盤
這里我們初始化棋盤 是為了后續棋盤的列印 如果不初始化棋盤就會是這樣的

因為棋盤的二維陣列是一個區域變數 里面的值都是隨機的 所以列印出來才會出現這樣的現象!
列印并制作棋盤
在制作棋盤前 我們首先得了解 棋盤長什么樣子


大家可以這樣 看看 其中黃色和藍色各是一種 種類 大家也注意到藍色最后一排是沒有的
其中黃色 由這些成分組成 %c | 每列印一個 空格+%c 就要列印一個 | 但是最后一列沒有
藍色部分 由這些成分組成 --- | 每列印三個 - 就要列印一個 | 同樣最后一列沒有
在制作棋盤之前我們要在我們定義的 game.h 里宣告這個函式:
#define ROW 3
#define COL 3//因為程式中要多次應用到行和列的數字 所以我們把它define
void display_borad(char board[ROW][COL], int row, int col);//列印并制作棋盤
//因為只是拿這個函式用于列印并制作棋盤并不需要它回傳什么 所以我們定義為 void 型別
//傳入我們初始化好的二位陣列 行 列
game.c 里面是這樣呼叫函式的
display_borad(board, ROW, COL);//列印并制作棋盤
好的現在已經開始寫我們的代碼:
void display_borad(char board[ROW][COL], int row, int col)
{
int i;
int j;
for (i = 0; i < row; i++)
{
for (j = 0; j < col; j++) //列印黃色的部分 不會列印最后一列的 | 所以當我們的j回圈到
{ //最后列就讓他不列印所以 用 if 陳述句來判斷是否列印
printf(" %c ", board[i][j]);
if (j < col - 1)printf("|");
}
printf("\n"); //黃色部分結束后要進行換行
if (i < row - 1) //這里的if 陳述句 是用來判斷整個藍色部分打不列印 而我們最后
{ //一行是不列印的所以我們同樣也用 if陳述句 來進行判斷
for (j = 0; j < col; j++)
{
printf("---"); //這里是列印藍色的部分 而當我們列印到最后也與之前同理 用
if (j < col - 1)printf("|");//用if 陳述句來進行判斷 是否列印
}
printf("\n");//同樣這里也是需要換行的
}
}
}
//大家可以對照著理解一下
%c | %c | %c
----|----|---- //這里面的-字體好像沒有我的vs的大 所以寫了4個 哈哈哈哈哈
%c | %c | %c
----|----|----
%c | %c | %c
好的這樣我們的棋盤就制作并很好的列印出來了
開始下棋
因為我們下棋是和電腦下棋 而下棋肯定是你走一步 我走一步 所以呢 這肯定是一個回圈的程序 而回圈結束的標志就是其中一方贏了 然后break出來 并列印結果 這就是我們總體的一個思路 讓我們來看看怎么實作它吧
玩家下棋:
當然在開始前我們還是需要在我們定義的 game.h 里面先宣告一下這個函式的
void player_move(char board[ROW][COL], int row, int col);//玩家下棋
接下來是我們程式的運行:
//玩家走
void player_move(char board[ROW][COL], int row, int col) //我們設定為玩家的棋子是符號 '*'
{
int x, y;
printf("請選擇您的棋子位置:>");
//判斷棋子有效性
while (1) //這里設定回圈的目的是為了當我們輸入的坐標無效時 讓玩家回圈回來重新輸入
{
scanf("%d %d", &x, &y);
if (x >= 1 && x <= ROW && y >= 1 && y <= COL) //ROW=3 COL=3
{
if (board[x - 1][y - 1] == ' ') //因為玩家可能并不知知道我們的棋盤(二維陣列)的
{ //下標是從 0 開始的 所以玩家輸入的資料范圍可能是
board[x - 1][y - 1] = '*'; //1~3 所以玩家輸入進去的數字 是比我們的下標的資料
break; //范圍大 1 的 所以我們這里要減 1
}
else
{
printf("您輸入的位置已經被占用 請重新輸入!\n"); //這里是為了保證我們輸入的坐標
} //里面是空的 所以我們用 if 判斷
}
else
{
printf("您輸入的位置無效 請重新輸入!\n"); //判斷棋子的有效性
}
}
}
因為當我們的玩家下完棋后 我們肯定要給他看一看他下的那一步 棋盤現在是什么樣子的
同樣電腦下完棋我們也要顯示棋盤是什么樣子
先給大家看看這個是什么樣子的吧 后面會仔細的說清楚 嘿嘿
//開始下棋
while (1)
{
char ret;
player_move(board, ROW, COL);
display_borad(board, ROW, COL);
ret=is_win(board, ROW, COL);
if (ret != 'C') //判斷輸贏
{ //*-玩家贏
if (ret == '*') //#-電腦贏
{ //Q-平局
printf("恭喜你贏了!\n"); //C-游戲繼續
printf("----------------\n");
break;
}
else if (ret == '#')
{
printf("很遺憾!電腦贏了\n");
printf("----------------\n");
break;
}
else
{
printf("此局為平局!\n");
printf("----------------\n");
break;
}
}
com_move(board, ROW, COL);
display_borad(board, ROW, COL);
ret=is_win(board, ROW, COL);
if (ret != 'C')
{
if (ret == '*')
{
printf("恭喜你贏了!\n");
break;
}
else if (ret == '#')
{
printf("很遺憾!電腦贏了\n");
break;
}
else
{
printf("此局為平局!\n");
printf("----------------\n");
break;
}
}
}
}
電腦下棋:
在這里電腦下棋 我們給他設定成隨機的數字 所以要用到 srand函式 和 rand函式
這里就給大家講講這個隨機的數字怎么生成的
rand函式 是用來生成一個亂數 頭檔案是<stdio.h> 回傳型別是整型
回傳 0~Rand_Max(32767)中的一個數
srand函式相當于是給rand函式生成一個起始點 就是讓rang函式不再是從0開始到Rand_max 如果你給rand函式設定的起始點是固定的那么好幾次生成的亂數
srand(1);
int x = rand();
for (int i = 0; i < 5; i++)//這里五次輸出 都是 41
{ //如果說你在使用rand函式之前沒有使用srand函式 那么結果和srand(1)
printf("%d\n", x); //是一樣的
}
所以我們要給srand函式里傳入 一個變化的值 這個時候就要用到 time函式
time函式:
time函式這樣定義的 這個函式的回傳的型別是 time_t (就好比是int char)這個型別是一個無符號整型 但是不同平臺這個型別的定義是不同的 我用的是 vs 而在vs里面是一個有符號的長整型

所以這里用的時候記得 給time函式進行強制轉換 (如果你用的也是vs的話)
因為srand函式要求的是 我們給它傳入的數要是一個無符號的數
其中time_t它回傳從1970年1月1日零時零分零秒到目前為止所經過的時間
最后有一點 在我們使用這個函式之前 我們還要應用
srand函式:
這個函式他是這樣的 void srand(unsigned seed)
他要求傳入一個無符號的數
因為我們要讓這個亂數是變化的 而rand函式 srand函式 time函式通常結合在一起使用
最終拿出來就是這樣的 srand((unsign int)time(NULL) ) NULL的意思就是表示空的意思
你可以寫 0
因為我們的主函式是一定會執行的所以我們就把 srand函式放到主函式里面去
對了 在使用它們之前出了 引頭檔案<time.h>還有一個<stdlib.h>哦!
好的 說完這個我們就可以開始撰寫 電腦下棋的部分了
同樣我們還是要在我們定義的game.h里面先宣告
void com_move(char board[ROW][COL], int row, int col);//電腦下棋
讓我們看看work.c該怎么寫:
void com_move(char board[ROW][COL], int row, int col)
{
printf("電腦下:>\n");
while (1)
{
int x = rand() % row; //這里我們設定的是3×3的棋盤 這里它模3 那么得到的結果就是在0~2之間
int y = rand() % col; //如果定義的是4×4 也是一樣的道理
if (board[x][y] == ' ') //電腦也是需要判斷選出的坐標是否被占用的 但是呢 不需要提示
{ //畢竟我們也不能提示我們的電腦看啊
board[x][y] = '#';
break;
}
}
}
到這里我們的下棋部分就寫完了 接下來是我們的判斷輸贏部分
如何判斷輸贏
同樣我們還是要在我們的game.h里面宣告一下
char is_win(char board[ROW][COL], int row, int col);//判斷輸贏
//這里我們之所以定義回傳型別是字符型 是讓我們在判斷輸贏的根據不同的情況回傳不同的字符
//然后進一步判斷是哪一方獲得了勝利
大家玩過三子棋的都知道 我們的三子棋判斷輸贏需要判斷 行 、列 和 對角線
在這里我們這樣判斷不同的情況
//*-玩家贏
//#-電腦 要注意什么情況回傳哪個字符 這里我用的是這樣的方法
//Q-平局 請大家往下看!
//C-游戲繼續
判斷行:
int i, j;
for (i = 0; i < row; i++)
{
int flag = 0;
for (j = 0; j < col - 1; j++)//因為每次判斷都和同一行的下一個 所以比較的時候 次數要比
{ //列數小 1
if (board[i][j] == board[i][j + 1]&&board[i][j]!=' ')
{ //應為每次下棋不管 是電腦還是玩家 我們都要檢查是否有
flag++; //人勝利 所以檢查的時候有些位置還是空的 這些肯定三個
} //相等的話是不可取的 所以空的地方即使相等不能算進去
}
if (flag == ROW - 1) //這里我們定義的flag如果等于了比較的次數 就說明兩次的比較
{ //都是相等的 這一行的三個就是相等的
if (board[i][j] == '*')
return '*'; //回圈結束后坐標是放在這一行中間的位置 所以我們直接看
else //這個的字符是什么 就可以判斷出是誰贏了
return '#';
}
}
判斷列:
其實行和列里面比較的思路是一樣的 只不過
比較行 是行變化 拿同行中每一列進行比較
比較列 是列變化 拿同列中每一行進行比較
for (j = 0; j < col; j++)
{
int flag = 0;
for (i = 0; i < row - 1; i++) //這些地方的道理是和比較行的道理是相同的
{
if (board[i][j]==board[i+1][j]&&board[i][j]!=' ')
{
flag++;
}
}
if (flag == ROW - 1)
{
if (board[i][j] == '*') //這里最后回圈后的到的就是一列中間那個位置
return '*';
else
return '#';
}
}
判斷對角線:
大家都知道一個四邊形有兩條對角線 而兩條對角線的起點和終點都是不同的 所以內 他們的回圈程序肯定是不同的首先我們看第一條:
第一條:
int flag = 0; //因為之前的flag是定義在回圈里面 所以在回圈外面是不能夠用的 所以要重
for (i = 0, j = 0; i < row - 1 && j < col - 1; i++, j++)//新定義
{
if (board[i][j] == board[i + 1][j + 1] && board[i][j] != ' ')
{
flag++; //因為對角線的坐標 無論是橫坐標還是豎坐標都是變換的 所以我把他們的回圈
} //設定在了一起 另一條對角線也是一樣的道理 只是起始點和終點不同罷了
}
if (flag == ROW - 1)
{
if (board[i][j] == '*')
return '*';
else
return '#';
}
第二條:
flag = 0;
for (i = 0, j = col - 1; i < row - 1 && j>0; i++, j--)
{
if (board[i][j] == board[i + 1][j - 1] && board[i][j] != ' ')
{
flag++;
}
} //無論是第一潭訓是最后一條我們都要注意 終點的設定不是對角線
if (flag == ROW - 1) //的最后一個 而是最后一個的前一個 我們每次都是拿一個坐標去和
{ //它的下一個坐標進行比較 如果我們拿最后一個的話 訪問就會越界
if (board[i][j] == '*') //也就出錯了
return '*';
else
return '#';
}

到這里棋盤里的比較就沒有了
之前的比較程序中 我們一直回傳的都是某一方獲得勝利的 而 游戲繼續 其實很好寫出來 就是需要注意 它放置的位置
大家都知道 如果一個程式 return 了 那么他后面的所有程式就不會在運行了
所以我們的游戲繼續的程式一定要放在最后才行 先給大家看一下我寫的游戲繼續的代碼
大家就知道是為什么了
for (i = 0; i < row; i++)
{
for (j = 0; j < col; j++)
{
if (board[i][j] == ' ')
return 'C';
}
}
我是 遍歷(大致意思是很多組資料我一個一個去試 最后找到正確的一個)整個二維陣列來找是否有空字符 如果有 那么就回傳字符C 后面的程式就不會執行了
所以!我們游戲繼續的程式的位置很重要 如果放在前面任意一個位置的話我們有些地方還沒比較內 它找到空字符就回傳了 這樣肯定是不行的 所以 我把這個放在了最后!
大家都知道如果三子棋是平局的話那么整個棋盤肯定是被填滿的 是不會有空字符的所以大家 看這個判斷輸贏函式的最后:
for (i = 0; i < row; i++)
{
for (j = 0; j < col; j++)
{
if (board[i][j] == ' ')//游戲繼續程式 回傳字符C
return 'C';
}
}
return 'Q'; //所有return都沒執行那么游戲為平局!
我在最后的位置加上 return 'Q' 這樣的話如果前面 游戲繼續沒有執行 return 的話就說明這個陣列里面已經沒有空字符了陣列里面已經填滿我們下的棋子了 畢竟我們遍歷的是整個陣列
這樣我們判斷輸贏的函式就寫完了 給大家看看整體是什么樣子吧
//判斷輸贏
char is_win(char board[ROW][COL], int row, int col)
{
int i, j;
for (i = 0; i < row; i++) //判斷每一行
{
int flag = 0;
for (j = 0; j < col - 1; j++)
{
if (board[i][j] == board[i][j + 1]&&board[i][j]!=' ')
{
flag++;
}
}
if (flag == ROW - 1)
{
if (board[i][j] == '*')
return '*';
else
return '#';
}
}
for (j = 0; j < col; j++) //判斷每一列
{
int flag = 0;
for (i = 0; i < row - 1; i++)
{
if (board[i][j]==board[i+1][j]&&board[i][j]!=' ')
{
flag++;
}
}
if (flag == ROW - 1)
{
if (board[i][j] == '*')
return '*';
else
return '#';
}
}
int flag = 0;
for (i = 0, j = 0; i < row - 1 && j < col - 1; i++, j++) //判斷第一條對角線
{
if (board[i][j] == board[i + 1][j + 1] && board[i][j] != ' ')
{
flag++;
}
}
if (flag == ROW - 1)
{
if (board[i][j] == '*')
return '*';
else
return '#';
}
flag = 0;
for (i = 0, j = col - 1; i < row - 1 && j>0; i++, j--)//判斷第二條對角線
{
if (board[i][j] == board[i + 1][j - 1] && board[i][j] != ' ')
{
flag++;
}
}
if (flag == ROW - 1)
{
if (board[i][j] == '*')
return '*';
else
return '#';
}
for (i = 0; i < row; i++) //游戲是否要繼續
{
for (j = 0; j < col; j++)
{
if (board[i][j] == ' ')
return 'C';
}
}
return 'Q'; //游戲最終為平局
}
到這里我們所有的三子棋的所需要的函式都寫完了 我們來總結一下:
- 列印并制作棋盤
- 玩家下棋
- 電腦下棋
- 判斷輸贏
因為我們每次使用我們都宣告了他們也看看 我們現在的game.h是什么樣的吧:
3.我們自己定義的頭檔案game.h
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define ROW 3
#define COL 3
void display_borad(char board[ROW][COL], int row, int col);//列印并制作棋盤
void player_move(char board[ROW][COL], int row, int col);//玩家下棋
void com_move(char board[ROW][COL], int row, int col);//電腦下棋
char is_win(char board[ROW][COL], int row, int col);//判斷輸贏
我們把所有需要引得頭檔案 宣告得函式 都放在這里面 我們得另外兩個程式 就只需要引我們自己的這個頭檔案 就相當于是把所用需要的東西都引了一遍 這樣是不是方便很多 并且有助于我們寫代碼時保持頭腦清晰
最后的最后我們來看之前給大家看過的這個:
while (1)
{
char ret; //我們那這個來接受我們判斷輸贏函式回傳的字符
player_move(board, ROW, COL);
display_borad(board, ROW, COL);
ret=is_win(board, ROW, COL);
if (ret != 'C') //判斷輸贏
{ //*-玩家贏
if (ret == '*') //#-電腦贏
{ //Q-平局
printf("恭喜你贏了!\n"); //C-游戲繼續
printf("----------------\n");
break;
} //我們設定C是游戲繼續只要函式回傳的不是
else if (ret == '#') //C那就說明一定有一種結果
{ //是C我們就不進行操作讓下棋這個回圈繼續直
printf("很遺憾!電腦贏了\n"); //直到得到我們的結果
printf("----------------\n");
break;
}
else
{
printf("此局為平局!\n");
printf("----------------\n");
break;
}
}
com_move(board, ROW, COL);
display_borad(board, ROW, COL);
ret=is_win(board, ROW, COL);
if (ret != 'C')
{
if (ret == '*')
{
printf("恭喜你贏了!\n");
break;
}
else if (ret == '#')
{
printf("很遺憾!電腦贏了\n");
break;
}
else
{
printf("此局為平局!\n");
printf("----------------\n");
break;
}
}
}
}
到這里內 我們整個游戲的搭建就算是完工了 Oh Yeah!
后面是我們三子棋代碼的全部 對了這個三子棋版本可以設定棋盤大小的哦
設定的同時就不再是三子棋 就變成四子 五子 六子了 嘻嘻嘻!
總覽三子棋代碼
game.c:
#define _CRT_SECURE_NO_WARNINGS 1
#include "game.h"
menu()
{
printf("************************\n");
printf("*********1. play********\n");
printf("*********0. exit********\n");
printf("************************\n");
}
void work()
{
printf("----------------\n");
printf("您已經進入游戲!\n");
char board[ROW][COL];
memset(board, ' ', sizeof(board));//初始化棋盤
display_borad(board, ROW, COL);//列印并制作棋盤
//開始下棋
while (1)
{
char ret;
player_move(board, ROW, COL);
display_borad(board, ROW, COL);
ret=is_win(board, ROW, COL);
if (ret != 'C') //判斷輸贏
{ //*-玩家贏
if (ret == '*') //#-電腦贏
{ //Q-平局
printf("恭喜你贏了!\n"); //C-游戲繼續
printf("----------------\n");
break;
}
else if (ret == '#')
{
printf("很遺憾!電腦贏了\n");
printf("----------------\n");
break;
}
else
{
printf("此局為平局!\n");
printf("----------------\n");
break;
}
}
com_move(board, ROW, COL);
display_borad(board, ROW, COL);
ret=is_win(board, ROW, COL);
if (ret != 'C')
{
if (ret == '*')
{
printf("恭喜你贏了!\n");
break;
}
else if (ret == '#')
{
printf("很遺憾!電腦贏了\n");
break;
}
else
{
printf("此局為平局!\n");
printf("----------------\n");
break;
}
}
}
}
int main()
{
int input;
srand((unsigned int)time(NULL));
do
{
menu();
printf("請選擇:>");
scanf("%d", &input);
switch (input)
{
case 0:
{
printf("您已退出游戲!");
break;
}
case 1:
{
work();
break;
}
default:
{
printf("輸入錯誤請重新輸入!\n");
printf("------------------------\n");
break;
}
}
} while (input);
return 0;
}
work.c:
#define _CRT_SECURE_NO_WARNINGS 1
#include "game.h"
//列印并制作棋盤
void display_borad(char board[ROW][COL], int row, int col)
{
int i;
int j;
for (i = 0; i < row; i++)
{
for (j = 0; j < col; j++)
{
printf(" %c ", board[i][j]);
if (j < col - 1)printf("|");
}
printf("\n");
if (i < row - 1)
{
for (j = 0; j < col; j++)
{
printf("---");
if (j < col - 1)printf("|");
}
printf("\n");
}
}
}
//玩家走
void player_move(char board[ROW][COL], int row, int col)
{
int x, y;
printf("請選擇您的棋子位置:>");
//判斷棋子有效性
while (1)
{
scanf("%d %d", &x, &y);
if (x >= 1 && x <= ROW && y >= 1 && y <= COL)
{
if (board[x - 1][y - 1] == ' ')
{
board[x - 1][y - 1] = '*';
break;
}
else
{
printf("您輸入的位置已經被占用 請重新輸入!\n");
}
}
else
{
printf("您輸入的位置無效 請重新輸入!\n");
}
}
}
//電腦走
void com_move(char board[ROW][COL], int row, int col)
{
printf("電腦下:>\n");
while (1)
{
int x = rand() % row;
int y = rand() % col;
if (board[x][y] == ' ')
{
board[x][y] = '#';
break;
}
}
}
//判斷輸贏
char is_win(char board[ROW][COL], int row, int col)
{
int i, j;
for (i = 0; i < row; i++)//判斷每一行
{
int flag = 0;
for (j = 0; j < col - 1; j++)
{
if (board[i][j] == board[i][j + 1]&&board[i][j]!=' ')
{
flag++;
}
}
if (flag == ROW - 1)
{
if (board[i][j] == '*')
return '*';
else
return '#';
}
}
for (j = 0; j < col; j++) //判斷每一列
{
int flag = 0;
for (i = 0; i < row - 1; i++)
{
if (board[i][j]==board[i+1][j]&&board[i][j]!=' ')
{
flag++;
}
}
if (flag == ROW - 1)
{
if (board[i][j] == '*')
return '*';
else
return '#';
}
}
int flag = 0;
for (i = 0, j = 0; i < row - 1 && j < col - 1; i++, j++)//判斷第一條對角線
{
if (board[i][j] == board[i + 1][j + 1] && board[i][j] != ' ')
{
flag++;
}
}
if (flag == ROW - 1)
{
if (board[i][j] == '*')
return '*';
else
return '#';
}
flag = 0;
for (i = 0, j = col - 1; i < row - 1 && j>0; i++, j--)//判斷第二條對角線
{
if (board[i][j] == board[i + 1][j - 1] && board[i][j] != ' ')
{
flag++;
}
}
if (flag == ROW - 1)
{
if (board[i][j] == '*')
return '*';
else
return '#';
}
for (i = 0; i < row; i++)//游戲是否要繼續
{
for (j = 0; j < col; j++)
{
if (board[i][j] == ' ')
return 'C';
}
}
return 'Q';//游戲最終為平局
}
game.h:
#pragma once
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define ROW 3
#define COL 3
void display_borad(char board[ROW][COL], int row, int col);//列印并制作棋盤
void player_move(char board[ROW][COL], int row, int col);//玩家下棋
void com_move(char board[ROW][COL], int row, int col);//電腦下棋
char is_win(char board[ROW][COL], int row, int col);//判斷輸贏
好的 到這里我們這篇三子棋 博客 就寫完了 有寫得不好的地方還請各位大牛們指正!
新的一年祝大家新年快樂 萬事如意 都能進到自己心儀的大廠 哈哈哈哈哈哈哈
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/401487.html
標籤:其他
