2010-01-06 187 views
1

我正在嘗試做一個有額外功能的蛇遊戲,其中蛇可以吃不同類型的食物,一些食物會給它一段時間的特殊能力。像那樣貪吃蛇遊戲設計

用於設計差異。我正在做食物接口的食物。並且所有類型的食物都執行它。所以只使用食物的參考。我可以製作任何類型的食物。

唯一的問題是代表一個權力。 我可以代表它在船上或蛇。 蛇是最好的選擇,因爲它似乎更符合邏輯。任何人都可以告訴我我想怎麼表達它?

+2

鑑於你的問題的含糊,我不知道有什麼好答案甚至會樣子。因此,我投票結束爲「不是真正的問題」。 – 2010-01-06 17:50:11

+2

他指的是所有諾基亞手機上的'蛇遊戲'(遊戲之前就存在,但諾基亞使它真正受歡迎並且非常有名) – Toad 2010-01-06 17:52:46

+3

在這裏,我認爲DOS使它受歡迎而且衆所周知! :( – 2010-01-08 04:11:57

回答

4

你可能想看看Template PatternDecorator Pattern

基本思想是你的「蛇」將其操作導出到被調用的模塊樹中。因此,例如Snake.Move()實際上只是檢查是否存在一個移動修飾符(從您的「權力」提供),否則它將默認爲它自己的內部移動對象。根據您的實施方式,電源可能會取代,暫時覆蓋或級聯其效果。

7

你可以創建一個基準能級,每個食物都有一個基準。每種食物都可以擁有一定的力量。

對於每一種力量,您都繼承了這個基礎強力類。

當你吃了食物的時候,力量班被轉移到了蛇身上。蛇可以持有一個參考(到最後吃掉的力量),或者甚至是一系列力量(如果多個力量可以同時活動)。

2

是的,每條蛇更靈活。如果你想讓它成爲多人遊戲,那麼每條蛇都會擁有它的力量。

你似乎缺少的是Power->食物映射。但這真的取決於一個食物是否賦予許多權力,或者一個權力是否可以擁有不同的食物。

那麼有很多方法可以做到這一點。我能想到的最基本的是有一種靜態方法,當通過不同類型的食物時會產生不同的能力。 只要你的蛇吃東西,你叫SuperPower.onNomNom(FoodEaten)。 例子:

class SuperPower 
{ 
    public static SuperPower omNomNom(Food f) 
    { 
     if(f==InvisibilityFruit) /*You can use switch but it depends on language*/ 
     { 
     return InvisibilityPower() 
     } 
     else if 
     { 
     ... 
     } 

    } 

} 

class InvisibilityPower extends SuperPower{...} 
1

靈活的解決方案是創建一個類食品是這樣的:

class Food(object): 
    def __init__(self, icon, [...], power): 
     self.icon = icon 
     self.[...] = [...] 
     self.power = power 

這樣,你的獨立創建的功率/價值/圖標集。 如果你有新的力量,你不需要重新編碼任何東西。

在蛇類:

def eat_food(self, food): 
    self.score += food.value 
    self.apply_power(food.power) 

def apply_power(self, power): 
    power.apply(self)