瞭解貪吃蛇設計思路
上圖中的紅色空心方框(□)表示邊框,是貪吃蛇的邊界,貪吃
蛇不能碰到它,否則就“死掉”
貪吃蛇的活動範圍,貪吃蛇可以自由移動,食物(蘋果)也會隨機出
現在這個區域。
我們不妨將貪吃蛇的活動範圍稱為
“貪吃蛇地圖”
,
而
加上邊框就稱為“全域性地圖”
。
我們需要記錄地圖中每一個節點的資訊,包括:
位置:也就是第幾行幾列;
型別:這個節點出現的是貪吃蛇、食物、邊框,還是什麼都沒有
(綠色的背景)
索引:也就是陣列下標,稍後會說明是什麼意思。
所以需要定義一個結構體二維陣列:
struct{
char type;
int index;
}globalMap[MAXWIDTH][MAXHEIGHT];
用一維下標和二維下標表示位置;用
type
表示型別,不同的類
型用不同的數字代表;用
index
表示索引。
直觀上講,應該將
定義為
int
型別,不過
佔用四個字
節,而節點型別的取值範圍非常有限,一個位元組就足夠了,所以為了
節省記憶體才定義為
char
型別。
同時,再建立一個足夠大的一維陣列,讓貪吃蛇在陣列內活動:
int x;
int y;
} snakeMap[ (MAXWIDTH-2)*(MAXHEIGHT-2) ]
x
、
y
表示行和列,
也就是
globalMap
陣列的兩個下標。
陣列中的索引
就是
snakeMap
陣列的下標。
表示了所有節點的資訊,而
只表示了貪吃
蛇的活動區域。
透過
可以定位
中的元素,
反過
來透過
也可以找到
中的元素。請看下圖:
圖
1
:
和
的初始對應關係
貪吃蛇向左移動時,
headerIndex
指向
404
tailIndex
406
為什麼設計的這麼晦澀和複雜呢?因為這樣設計有以下幾個好
處:
建
瞭解貪吃蛇設計思路
上圖中的紅色空心方框(□)表示邊框,是貪吃蛇的邊界,貪吃
蛇不能碰到它,否則就“死掉”
貪吃蛇的活動範圍,貪吃蛇可以自由移動,食物(蘋果)也會隨機出
現在這個區域。
我們不妨將貪吃蛇的活動範圍稱為
“貪吃蛇地圖”
,
而
加上邊框就稱為“全域性地圖”
。
我們需要記錄地圖中每一個節點的資訊,包括:
位置:也就是第幾行幾列;
型別:這個節點出現的是貪吃蛇、食物、邊框,還是什麼都沒有
(綠色的背景)
。
索引:也就是陣列下標,稍後會說明是什麼意思。
所以需要定義一個結構體二維陣列:
struct{
char type;
int index;
}globalMap[MAXWIDTH][MAXHEIGHT];
用一維下標和二維下標表示位置;用
type
表示型別,不同的類
型用不同的數字代表;用
index
表示索引。
直觀上講,應該將
type
定義為
int
型別,不過
int
佔用四個字
節,而節點型別的取值範圍非常有限,一個位元組就足夠了,所以為了
節省記憶體才定義為
char
型別。
同時,再建立一個足夠大的一維陣列,讓貪吃蛇在陣列內活動:
struct{
int x;
int y;
} snakeMap[ (MAXWIDTH-2)*(MAXHEIGHT-2) ]
x
、
y
表示行和列,
也就是
globalMap
陣列的兩個下標。
globalMap
陣列中的索引
index
就是
snakeMap
陣列的下標。
globalMap
表示了所有節點的資訊,而
snakeMap
只表示了貪吃
蛇的活動區域。
透過
snakeMap
可以定位
globalMap
中的元素,
反過
來透過
globalMap
也可以找到
snakeMap
中的元素。請看下圖:
圖
1
:
globalMap
和
snakeMap
的初始對應關係
貪吃蛇向左移動時,
headerIndex
指向
404
,
tailIndex
指向
406
。
為什麼設計的這麼晦澀和複雜呢?因為這樣設計有以下幾個好
處:
建
globalMap
和
snakeMap