如何入手做貪吃蛇?

2021-08-13 23:19:52 字數 1867 閱讀 7055

對於新手而言,**似乎是令人難以忍受的事情。但實際上,隨著難題乙個個解決,不論是誰,都會由衷地感到激動。

先從乙個經典的貪吃蛇遊戲開始。我們做的是貪吃蛇的極為簡化的版本,使用命令列的、按一次走一次的那種。

首先,我們要用自頂向下、逐步求精的思想來逐步構建框架。構建框架的最好的方式,當然是通過標頭檔案了。

我們要思考的是,這個貪吃蛇裡面需要完成哪些動作?

最開始,遊戲需要初始化,因此我們在標頭檔案裡面寫上:

void initialize();
然後,我們考慮到蛇是需要運動的,因此:

void movesnake();
但是這個函式似乎需要一點引數,因為要確定蛇的方向。因此我們改動一下這個函式的原型:

void movesnaketowards(enum direction);
這裡需要指出的是,「enum direction」是乙個整體,它是乙個資料型別。我們要在這個標頭檔案的頂部新增它的定義:

enum direction

;

然後,我們考慮到貪吃蛇裡除了蛇之外還有食物,因此我們需要乙個函式:

void putfood();
這個函式是否需要什麼引數(比如說指定x, y)呢?我們考慮到食物放置的位置是隨機的,因此不需要什麼引數,只要隨機取點,判斷那個點是否是空的就可以了。

我們考慮到蛇頭可能會碰到別的東西,可能是牆,也可能是食物,因此,如果蛇頭進入了非空的地方我們需要判斷一下:

void checkscore();
這個函式的引數似乎不夠,因為判斷乙個具體的點才有意義。因此改為:

void checkscore(int, int);
如果判斷發現玩家被淘汰了,我們需要:

void endgame();
這樣看起來**的框架就做出來了。但是我們往深層次考慮,蛇身移動的時候應該怎麼處理?我們需要乙個佇列:

struct

queue

;

再定義一下幾個函式原型:

void queue_push(struct

queue*, int);

void queue_pop(struct

queue*);

void queue_clear(struct

queue*);

int queue_front(struct

queue*);

int queue_back(struct

queue*);

void queue_getnextindex(struct

queue*, int*);

這樣,**的框架基本就構造完了。然後我們在main函式中加上這些**:

int main()

while (operation == ' ' || operation == '\n' || operation == '\t');

switch (operation)

}return

0;}

這樣自頂向下的工作就完成得差不多了。接下來就需要逐步求精,把函式的定義補全。考慮到很多讀者看到這裡已經昏昏欲睡,作者的寫部落格的熱情也不是很高。這裡就不詳細講了。不過需要注意的是,「自頂向下,逐步求精」和「物件導向」的方法並不是互斥的。例如,上面有關queue的函式,實際上是用了「物件導向」的方法。在程式設計的過程中,經常會同時使用多種方法,讀者應當靈活選用。

vb做的貪吃蛇

dim q as integer dim w as integer dim sq as integer dim sw as integer dim cq as integer dim cw as integer dim ss as long dim c as integer dim a as int...

vb做的貪吃蛇

dim q as integer dim w as integer dim sq as integer dim sw as integer dim cq as integer dim cw as integer dim ss as long dim c as integer dim a as int...

c語言做貪吃蛇遊戲

閒話不多說,直接上 include stdio.h include windows.h include stdbool.h 座標系 y x 按鍵 移動 8 4 5 6 9 暫停 define x 20 define y 70 define wait time 700 移動一次需要的時間 enum 對...