回覆列表
  • 1 # 滴逃逃

    瞭解貪吃蛇設計思路

    上圖中的紅色空心方框(□)表示邊框,是貪吃蛇的邊界,貪吃

    蛇不能碰到它,否則就“死掉”

    貪吃蛇的活動範圍,貪吃蛇可以自由移動,食物(蘋果)也會隨機出

    現在這個區域。

    我們不妨將貪吃蛇的活動範圍稱為

    “貪吃蛇地圖”

    加上邊框就稱為“全域性地圖”

    我們需要記錄地圖中每一個節點的資訊,包括:

    位置:也就是第幾行幾列;

    型別:這個節點出現的是貪吃蛇、食物、邊框,還是什麼都沒有

    (綠色的背景)

    索引:也就是陣列下標,稍後會說明是什麼意思。

    所以需要定義一個結構體二維陣列:

    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

  • 中秋節和大豐收的關聯?
  • aac格式的鈴聲如何拉進iTunes?