三子棋小遊戲

2021-08-31 16:36:59 字數 3987 閱讀 4582

三子棋小遊戲是我最開始學習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 ...