實現乙個三子棋的專案
先來走走流程,看有些什麼流程:
1、首先列印乙個開始遊戲的選單,如下
這個很好實現,不同的選項用switch case語句實現
2、然後進入遊戲,需要列印乙個棋盤
此處棋盤列印是用二維陣列的方式實現,先需要乙個3*3的二維陣列,將所有元素都先置為空格然後在特定的位置上列印橫線和豎線就可以,第一行列印出來 | | ,然後第二行列印—|---|—,第三行列印 | | ,第四行列印—|---|—,第五行列印 | | ,有相同列印的部分,所以可以用for迴圈實現
//列印棋盤
void showboard(char board[row], int row, int col)
} printf("\n");
if (i < row - 1)
}printf("\n");
} }}
3、棋盤列印出來,玩家就可以開始移動了,首先玩家需要輸入座標,在自己想要的位置上放置棋子,然後玩家輸入之後,需要判斷當前位置是否被占用,如果占用,需要重新輸入,沒有占用的話,就放置棋子
//玩家移動
void playermove(char board[row], int row, int col)
else
}else}}
4、玩家放置棋子之後,需要判斷當前棋盤是否有人獲勝,如果有人獲勝,則返回獲勝者;沒有人獲勝的話,則繼續下面的遊戲,且在判斷獲勝時,需要判斷平局的問題,如果棋盤放滿棋子,則是平局,如果沒有平局,也沒有人獲勝,即只是正常下了一步棋,則繼續進行遊戲
//棋盤是否放滿
static int isfull(char board[row], int row, int col)
} }return 1;//棋盤滿了則返回1
}//判斷是否有人贏
char iswin(char board[row], int row, int col)
//列滿足
if (board[0][i] == board[1][i] && board[1][i] == board[2][i]
&& board[0][i] != ' ')
//對角線滿足
if (board[0][0] == board[1][1] && board[1][1] == board[2][2]
&& board[0][0] != ' ')
if (board[0][2] == board[1][1] && board[1][1] == board[2][0]
&& board[0][2] != ' ')
if (isfull(board, row, row))//每下一步棋判斷一次棋盤是否滿了,滿了則是平局
}return ' ';//誰也沒有贏,繼續執行
}
5、判斷完成後,玩家正常下了一步棋之後,電腦開始下棋,電腦隨機產生[0-3)的數字,即產生座標,也同樣需要判斷當前產生的座標是否是空格;然後放置棋子後,判斷放滿和獲勝
//電腦移動
void computermove(char board[row], int row, int col)
}}
6、正常下棋,只到有一方勝出或者是平局出現
具體**:
需要三個檔案,乙個標頭檔案,兩個原始檔
標頭檔案中聲名函式和一些巨集定義
game.h
#ifndef __game__h_
#define __game__h_
#include#include#include#define col 3
#define row 3
//初始化棋盤
void initboard(char board[row], int row, int col, char set);
//列印棋盤
void showboard(char board[row], int row, int col);
//玩家移動
void playermove(char board[row], int row, int col);
//是否贏得了勝利
char iswin(char board[row], int row, int col);
//電腦移動
void computermove(char board[row], int row, int col);
#endif
乙個原始檔中是函式的具體**
game.c
#define _crt_secure_no_warnings 1
#include"game.h"
//初始化棋盤
void initboard(char board[row], int row, int col, char set) }}
//列印棋盤
void showboard(char board[row], int row, int col)
} printf("\n");
if (i < row - 1)
}printf("\n");
} }}//玩家移動
void playermove(char board[row], int row, int col)
else
}else
}}//棋盤是否放滿
static int isfull(char board[row], int row, int col)
} }return 1;//棋盤滿了則返回1
}//判斷是否有人贏
char iswin(char board[row], int row, int col)
//列滿足
if (board[0][i] == board[1][i] && board[1][i] == board[2][i]
&& board[0][i] != ' ')
//對角線滿足
if (board[0][0] == board[1][1] && board[1][1] == board[2][2]
&& board[0][0] != ' ')
if (board[0][2] == board[1][1] && board[1][1] == board[2][0]
&& board[0][2] != ' ')
if (isfull(board, row, row))//每下一步棋判斷一次棋盤是否滿了,滿了則是平局
}return ' ';//誰也沒有贏,繼續執行
}//電腦移動
void computermove(char board[row], int row, int col)
}}
另乙個原始檔中是遊戲流程
three_game.c
#define _crt_secure_no_warnings 1
#include#include "game.h"
void menu()
void game()
; //定義二維棋盤陣列為0
initboard(board, row, row,' ');//初始化棋盤函式,將棋盤全部設定為空格' '
showboard(board, row, row);//列印棋盤
while (1)
showboard(board, row, col);
computermove(board, row, row);
ret = iswin(board, row, row);
if (ret != ' ')
showboard(board, row, row);
} //判斷ret
if (ret == 'x')
if (ret == ' o')
if (ret == 'q') }
int main()
} while (input);
return 0;
}
C語言入門小專案 三子棋
c語言入門小專案 三子棋 其中要注意的細節有以下幾點 玩家落子時注意 玩家輸入座標的合法性及座標是否已經被占用。電腦落子 我這裡以隨機落子為例,若落子座標未被占用則落子成功。結局 先判斷輸贏,再判斷平局,若沒輸贏且無平局,則遊戲繼續。來簡單粗暴地看看 include include game.h v...
三子棋遊戲
首先介紹一下三子棋遊戲規則 這是乙個玩家和電腦對戰的三子棋遊戲 棋盤如上圖所示,三個棋子連在一起則勝利 下面就是用c語言實現的方法 建立棋盤 利用二維陣列來實現乙個棋盤,棋盤剛開始是沒有任何棋子的,將二維陣列所有元素初始化為空格即可 玩家下棋 玩家輸入棋盤中的對應座標來下棋,下棋時需要考慮輸入座標合...
三子棋遊戲
閒來無事,竟意外發現了三子棋遊戲,順便實現了這個過程,我們一起來看下。三子棋的實現需要的是五個函式,我用了initboard 初始化棋盤函式 display 列印棋盤函式 player 玩家 computer 電腦 check full 判斷棋盤是否已滿,從而判斷輸贏 game.h define c...