一天時間開發出老師說需要一星期的C語言遊戲:五子棋項目!給大家分享一下~
為了進一步了解C語言編程,熟悉優秀的編碼風格,提升編碼能力,豐富項目經驗。所以在編程初期選擇了控制台小遊戲《單機五子棋》作為項目進行編碼。
本項目定位:
控制台小程序,作為熟悉一個完整的項目流程存在。
遊戲功能:
首先實現能夠讓雙人進行對戰,最後得出勝負(結果)。然後加入人機對戰元素,也就是傳統意義上一個人玩的單機遊戲。
編碼風格:
C語言面向過程編程,變量名與函數名全部使用駝峰命名法。
代碼:
#include <stdio.h> // 标準庫
#include <conio.h> // 按鍵
#include <Windows.h> // 屏幕刷新
#include <stdlib.h> // 随機數
static const int wArr = 15;
static const int hArr = 15;
int temp = 0;
int allRound = 0;
int iMap[wArr][hArr] = {};
void initMap();
void showMap();
void getUserInput();
void userInput(int width, int height);
void whoIsWin();
void aiInput(int w, int h);
bool notherUser = true; // 區分用戶
int myChess = 0;
int whiteChess = 22;
int blackChess = 33;
int main()
{
int InputW = 0;
int InputH = 0;
initMap();
while (1)
{
showMap();
getUserInput();
system("CLS");
whoIsWin();
if (20000 == allRound)
break;
}
showMap();
if (notherUser)
{
printf("User2, Win\n");
}
else
{
printf("User1, Win\n");
}
return 0;
}
void initMap()
{
for (int i = 0; i < wArr; i)
{
for (int j = 0; j < hArr; j)
{
iMap[i][j] = NULL;
}
}
for (int i = 0; i < wArr; i)
{
iMap[i][0] = temp ;
}
temp = 0;
for (int i = 0; i < wArr; i)
{
iMap[0][i] = temp ;
}
temp = 0;
}
void showMap()
{
for (int i = 0; i < wArr; i)
{
for (int j = 0; j < hArr; j)
{
printf("%3.0d", iMap[i][j]);
}
printf("\n");
}
}
void getUserInput()
{
int w, h;
if (notherUser)
{
printf("User1:\n");
myChess = whiteChess;
// ============ 用戶輸入
scanf_s("%d %d", &w, &h);
userInput(w, h);
}
else
{
printf("User2:\n");
myChess = blackChess;
// 下面是 AI 部分
aiInput(rand()%wArr, rand()%hArr);
}
}
void userInput(int w, int h)
{
if (w >= wArr || w <= 0 || h >= hArr || h <= 0)
{
return;
}
else if (iMap[w][h] == whiteChess || iMap[w][h] == blackChess)
{
return;
}
iMap[w][h] = myChess;
notherUser = !notherUser;
}
void aiInput(int w, int h)
{
if (w >= wArr || w <= 0 || h >= hArr || h <= 0)
{
return;
}
else if (iMap[w][h] == whiteChess || iMap[w][h] == blackChess)
{
return;
}
iMap[w][h] = myChess;
notherUser = !notherUser;
}
void whoIsWin()
{
for (int i = 0; i < wArr; i)
{
for (int j = 0; j < hArr; j)
{
if(iMap[i][j] > 0)
// 豎排五個
if (iMap[i 0][j] == iMap[i 1][j]
&& iMap[i 1][j] == iMap[i 2][j]
&& iMap[i 2][j] == iMap[i 3][j]
&& iMap[i 3][j] == iMap[i 4][j]
//&& iMap[i 4][j] == iMap[i 5][j]
)
{
allRound = 20000;
}
// 右斜五個
else if (iMap[i 0][j 0] == iMap[i 1][j 1]
&& iMap[i 1][j 1] == iMap[i 2][j 2]
&& iMap[i 2][j 2] == iMap[i 3][j 3]
&& iMap[i 3][j 3] == iMap[i 4][j 4]
//&& iMap[i 4][j 4] == iMap[i 5][j 5]
)
{
allRound = 20000;
}
// 左斜五個
else if (iMap[i 0][j 0] == iMap[i - 1][j 1]
&& iMap[i - 1][j 1] == iMap[i - 2][j 2]
&& iMap[i - 2][j 2] == iMap[i - 3][j 3]
&& iMap[i - 3][j 3] == iMap[i - 4][j 4]
//&& iMap[i - 4][j 4] == iMap[i - 5][j 5]
)
{
allRound = 20000;
}
// 橫排五個
else if (iMap[i][j 0] == iMap[i][j 1]
&& iMap[i][j 1] == iMap[i][j 2]
&& iMap[i][j 2] == iMap[i][j 3]
&& iMap[i][j 3] == iMap[i][j 4]
//&& iMap[i][j 4] == iMap[i][j 5]
)
{
allRound = 20000;
}
}
}
}
本次分享就到這裡了,一起努力吧!
對于準備學習編程的小夥伴,如果你想更好的提升你的編程核心能力(内功)不妨從現在開始!
編程學習書籍分享:
編程學習視頻分享:
整理分享(多年學習的源碼、項目實戰視頻、項目筆記,基礎入門教程)
歡迎轉行和學習編程的夥伴,利用更多的資料學習成長比自己琢磨更快哦!
對于C/C 感興趣可以關注小編在後台私信我:【編程交流】一起來學習哦!可以領取一些C/C 的項目學習視頻資料哦!已經設置好了關鍵詞自動回複,自動領取就好了!
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!