三子棋小遊戲是我最開始學習c語言時寫的乙個小專案,前兩天有一位同學問我關於三子棋小遊戲的這個程式,跟他講著講著覺得可以整理成一篇部落格,用來幫助一些剛接觸c語言的道友們。
三子棋小遊戲是我們學習c語言期間,乙個很好的專案,適合於初學c語言的同學加深對函式,指標,陣列,迴圈,判斷等等c語言基礎的理解。
前言:【知識拓展一】
game.h
【知識拓展二】:
game.c
test.c
首先是.h標頭檔案,這個檔案裡包含了在這個專案裡所需要包含的庫檔案,如stdio.h等等;還有巨集的定義以及各種函式的宣告,注意:標頭檔案中只有函式宣告而沒有定義哦。具體是何原因此處不贅述,我後續會再寫一篇部落格加以說明的。
關於標頭檔案中只有宣告而沒有定義的部落格,裡面還講了點c++中的內聯函式:
#ifndef __game_h__
#define __game_h__
#include#include#include#include#define rows 3 //利用巨集定義棋盤的行數是3
#define cols 3 //利用巨集定義棋盤的列數是3
int chess_full(int rows, int cols, char board[rows][cols]);//棋盤判滿函式
void init(int rows, int cols, char board[rows][cols]);//棋盤初試化函式
void disboard(int rows, int cols, char board[rows][cols]);//列印棋盤函式
void playerplay(int rows, int cols, char board[rows][cols]);//人下棋函式
void pcplay(int rows, int cols, char board[rows][cols]);//電腦下棋函式
int judge(int rows, int cols, char board[rows][cols]);//評判勝負函式
void game(int rows, int cols, char board[rows][cols]);//遊戲函式
void menu();//列印選單函式
#endif //__game_h__
第
一、二和十七行**時為了防止標頭檔案重複包含的,同乙個原始檔,如果沒有包含__game_h__,預處理器會保留#define跟
#endif之間的內容,如果已經包含了__game_h__,預處理器則會把#define和#endif之間的內容刪除。
#ifndef __game_h__//如果沒有定義__game_h__,則執行下一行**
#define __game_h__//定義__game_h__
//.......
#endif //__game_h__ #endif用來結束乙個#if....#else...的編譯塊,此處的備註是增強程式的可讀性
#ifndef、#define、#endif 這些都是預處理指令,常見的還有如下指令:接下來就是各個函式的實現了,具體的函式說明我都會在注釋裡說明的,盡量通俗易懂,表達能力有限,各位道友見怪。#空指令,無任何效果
#include包含乙個原始檔**檔案,此處涉及到#include"",#include<>記住這兩者之間的區別哦。
#define定義乙個巨集
#undef取消乙個已經定義的巨集
#if如果給定條件為真,則編譯以下**
#ifdef如果巨集已經定義,則編譯以下**
#ifndef如果巨集沒有定義,則編譯以下**
#elif如果前面給的#if條件不為真,當前條件為真,則編譯以下**
#endif結束乙個#if....#else.....條件編譯塊
#error停止編譯並顯示錯誤資訊
我通過查閱資料,發現了很多我們平時並不怎麼使用的指令,我也沒有深入了解,此處值得一提的是#define這個預處理指令,這裡是我們經常使用,而且容易出錯的,後續我也會寫一篇部落格專門講#define的,這裡也算是我立的乙個flag吧,哈哈哈。
2018/11/22跟新:
#include"game.h"
int chess_full(int rows, int cols, char board[rows][cols])//棋盤判滿函式
} }return 0;//棋盤滿了返回0
}void disboard(int rows, int cols, char board[rows][cols])//列印棋盤
}void init(int rows, int cols, char board[rows][cols])//棋盤初始化
} disboard(rows, cols, board);
}void playerplay(int rows, int cols, char board[rows][cols])//人下棋
int line = 1;
int column = 1;
s:do
while (board[line - 1][column - 1] != ' ')
break;
} board[line - 1][column - 1] = 'x';//玩家下的棋標記為x,也可以在標頭檔案中定義
} while (board[line - 1][column - 1] == ' ');
}void pcplay(int rows, int cols, char board[rows][cols])
printf("電腦下棋中\n");
int line = 0;
int column = 0;
//int count = 0;
while (1) }
disboard(rows, cols, board);
}int judge(int rows, int cols, char board[rows][cols])
if (board[1][1] == 'y')
}if ((board[2][0] == board[1][1]) && (board[1][1] == board[0][2]))
if (board[1][1] == 'y')
}for (i = 0; i < 3; i++)
if (board[i][1] == 'y')
}} for (i = 0; i < 3; i++)
if (board[1][i] == 'y')
}} if ((chess_full(rows, cols, board) == 0))//到這裡執行一次判滿函式,如果滿了就是平局了
return 0;//到了此處就是沒有人贏,棋盤也沒滿,遊戲繼續
}void game(int rows, int cols, char board[rows][cols])
pcplay(rows, cols, board);
ret = judge(rows, cols, board);
if (ret == 1)
}}
#define _crt_secure_no_warnings 1
#include"game.h"
void menu()//遊戲選單
int main()
;*/ scanf_s("%d", &input);
setbuf(stdin, null);//清空輸入緩衝區
switch (input)//switch選擇語句
system("pause");
return 0;
}
好了,看到這裡,如果各位道友認真閱讀了本篇真經,相信對於三子棋小遊戲的實現原理都比較清晰了,我實現的三子棋小遊戲是人機版本,有興趣的道友可以實現一波人人的版本,後續也可以實現網路對戰版本。 小遊戲 三子棋
c語言 實現最簡單的三子棋 無人工智慧,介面簡單,手動輸入座標x x 如下 環境 vs2015 game.h pragma once ifndef game h define game h include include include include define row 3 define col...
三子棋小遊戲
簡單版的三子棋遊戲並不難,就只是運用二維陣列和呼叫各個函式。現在來分析遊戲的思路,首先在螢幕上列印乙個選擇遊戲的選單,這個簡單,就只需要呼叫乙個函式輸出就可以了,玩家選擇開始遊戲就進入遊戲函式,首先要初始化二維陣列,可以用memset 來進行初始化,然後在螢幕上列印出三子棋的棋盤,這個也簡單,知識簡...
三子棋小遊戲
game.h define crt secure no warnings ifndef game h define game h include include include include define rows 3 行數 define cols 3 列數void initboard char ...