1. 程式人生 > >C語言編寫的五子棋遊戲 設計思路

C語言編寫的五子棋遊戲 設計思路

現在已經大2了 ,學校的實訓課要我們編寫一個五子棋遊戲 ,雖然過程艱辛。但還是很有成就感的,一下是我的感悟

用C語言編寫的五子棋遊戲
這個五子棋遊戲是站長剛學C語言兩個月時所寫!!

C語言製作五子棋


五子棋遊戲是一個深受人們喜愛的遊戲,通常是人機對弈,本程式設計為人與人對弈,一方執黑棋,一方執白棋,輪流走棋,每方都試圖在遊戲結束前讓自己的棋子五子相連。按鍵盤上的方向鍵可以移動游標,回車鍵可以擺放棋子。

一、 設計目的
這個程式是對程式設計基本功的一個訓練,將分支、迴圈、陣列、函式綜合應用,而不僅限於編制獨立的小程式,通過遊戲過程增加程式設計的興趣,提高程式設計水平。編制該程式我對以下的知識點進行的鞏固和掌握:1.陣列元素為結構體的陣列應用。2.全域性變數應用。3.按鍵的處理。4.陣列元素與蛇、食物的對應關係。5.圖形方式等等。雖然該程式是一個普通而又簡單的程式,但是對於一C語言初級階段的學生來說,是一個很好的鍛鍊甚至可以說是一個很好的提高。

二、 設計思路
棋盤設計為19×19格,初始狀態游標在棋盤的中央,白棋先走,輪流落子,當一方連成五子或下滿棋盤時,遊戲結束(連成五子的一方獲勝,下滿棋盤為和棋)。當遊戲一方勝利後顯示勝利資訊,提示資訊利用漢字點陣輸出。
從程式表面看,這是一個二維平面圖,所以資料用二維陣列來表示,陣列兩個下標可以表示棋盤上的位置,陣列元素的值代表棋格上的狀態,共有三種情況,分別是0代表空格,1代表白棋,2代表黑棋。這樣程式的主要工作是接收棋手按鍵操作,棋手1用Up、Down、Left、Right控制游標移動,回車鍵表示落子。棋手2用W、S、A、D控制游標移動,空格鍵表示落子。一旦接收到回車鍵或空格鍵,說明棋手落子,先判斷是否是有效位置,也就是說已經有棋子的位置不能重疊落子。落子成功後,馬上判斷以該位置為中心的八個方向:上、下、左、右、左上、左下、右上、右下是否有相同顏色的棋子連成五子,如果連成五子,則遊戲結束,輸出相應的資訊。如果想退出遊戲,可以按Esc鍵。

三、程式設計

1.定義全域性變數int gamespeed=5000;

int i,j,key;

struct Sor

{

int x;

int y;/*x,y表示當前游標的位置*/

int yes[N][N];/* 0表示無棋子,1表示白色棋子,2表示黑色棋子*/

int kao;/* 1表示白棋準備落子,2表示黑棋落子*/

int ok;/*1表示白棋勝出,2表示黑棋勝出*/

}sor;
複製程式碼

2.Main()主函式
按照語法規則,首先定義使用到的常數、全域性變數、函式原型說明。棋盤狀態用陣列yes[20][20],初值為0,表示空格。函式的實體比較簡單,呼叫圖形驅動、畫棋盤、人人對弈等自定義函式,一旦遊戲結束後,關閉圖形驅動,程式結束。

3.drawqp()畫棋盤函式
背景顏色設為黑色,從座標(100,100)開始每隔20個單位用綠色畫一條水平直線,一條垂直線,構成棋盤,用迴圈語句實現。畫線函式line()的引數為線的起點和終點座標,注意要計算正確。函式setfillstyle()可以設定填充模式和填充顏色,fillellipse(int x,int xradius,int yradius)以x和y為圓心,xradius和yradius為水平和垂直軸畫一填充橢圓,當xradius和yradius相等時,則畫出的是圓,用它表示棋子。

4.win()判斷是否勝出函式
本函式根據每次落子的位置,分別向上、下、左、右、左上、左下、右上、右下八個方向判斷是否有相同顏色的棋子連成五子,如果成立,遊戲就結束,並顯示提示資訊(如:紅方獲勝),否則繼續落子。

5.Gameplay()雙人對戰函式
這是遊戲進行的函式,主要是接收棋手的按鍵訊息,其處理過程如下:
(1) 按Esc鍵程式可以隨時結束。
(2) 按上下左右游標鍵,則改變棋子移動的座標值。
(3) 按回車鍵後判斷:
1) 如落子的位置已經有棋則無效,繼續按鍵。
2) 如落子位置是空格,可以將棋子落入格內,呼叫win()函式。
3) 如果棋子變化後,棋盤已下滿了棋子,則遊戲結束。顯示平局資訊。
(4) 重複上述步驟,直到遊戲結束。

6.Xandy()顯示游標縱橫座標函式
該函式的作用是在每次移動游標後,在螢幕左下角顯示出游標的縱橫座標。

7.圖形功能函式
以下函式原形都在graphics.h中。
(1)registerbgidriver():
(2)initgraph(int *driver, int *mode, char *path):用於初始化圖形系統,並裝入相應的圖形驅動器。該函式把由driver所指向的圖形驅動器程式碼裝入記憶體。如果圖形驅動器未裝入記憶體,圖形函式將不能操作。圖形函式所用的屏顯模式由mode所指向的整數值確定。最後,圖形驅動器的路徑是由path所指向的字串給出。如果沒有指定路徑,就在當前工作路徑上尋找。
(3)rectangle(int left,int top,int right,int bottom):函式rectangle()用當前畫出由座標left,top及right,bottom所定義的矩形。
(4)setcolor(int color):把當前畫線顏色設定為color所指定的顏色。每個圖形顯示卡的有效顏色由setpalette()提供。
(5)closegraph():該函式使圖形狀態失效,並且釋放用於儲存圖形驅動器和字型的系統記憶體。當你的程式既用到圖形輸出又用到非圖形輸出時,應該用此函式。該函式還把系統屏顯模式返回到呼叫initgragh()前的狀態。
通過編制該程式我對以下的知識點進行的鞏固和掌握:
1.陣列元素為結構體的陣列應用。
2.全域性變數應用。3.按鍵的處理。4.圖形方式等等。雖然該程式是一個普通而又簡單的程式,但是對於一C語言初級階段的學生來說,是一個很好的鍛鍊甚至可以說是一個很好的提高。由於個人能力的限制該程式還有許多的缺陷,若要進一步的完善還需要對C語言更深一步的學習。

程式執行部分截圖: