2010-01-06 8 views
1

J'essaie de faire un jeu de serpent avec des fonctionnalités supplémentaires où le serpent peut manger différents types de nourriture certains des aliments lui donneront des pouvoirs spéciaux pendant un certain temps.Snake Game Design

Pour la conception de diff. la nourriture je fais une interface de nourriture. Et tous les types de nourriture l'implémentent. Alors qu'en utilisant seulement ref de la nourriture. Je peux créer n'importe quel type de nourriture.

Le seul problème est de représenter une puissance. Je peux le représenter soit à bord, soit dans le serpent. Snake est la meilleure option car elle semble plus logique. Quelqu'un peut-il me dire comment suis-je supposé le représenter ??

+2

Compte tenu de l'imprécision de votre question, aucune idée de ce qu'est une bonne réponse serait même ressembler. Par conséquent, je vote pour clore comme "pas une vraie question". –

+2

il fait allusion au «jeu de serpent» comme présent sur tous les téléphones Nokia (le jeu existait avant, mais Nokia le rendait vraiment populaire et bien connu) – Toad

+3

Et là je pensais que DOS le rendait populaire et bien connu! :( –

Répondre

4

Vous pouvez jeter un oeil à la Template Pattern ou Decorator Pattern. L'idée de base serait que votre "serpent" aurait ses opérations exportées dans un arbre de module qui sont appelés. Ainsi par exemple, Snake.Move() vérifierait simplement s'il y avait un modificateur de déplacement (tel que fourni par votre "pouvoirs") sinon il aurait par défaut son propre objet de mouvement interne. Selon la façon dont vous l'implémentez, la puissance peut remplacer, remplacer temporairement ou cascader ses effets.

7

Vous pouvez créer une classe de puissance de base dont chaque aliment contient une référence. Chaque aliment de cette façon peut avoir un certain pouvoir.

Pour chaque puissance, vous héritez de cette powerclass de base.

Au moment où vous mangez la nourriture, la classe de puissance est transférée au serpent. Le serpent pourrait contenir une référence (à la dernière puissance mangée), ou même une liste de puissances (si plusieurs puissances peuvent être actives en même temps).

2

Oui, par serpent est plus flexible. Si vous deviez en faire un jeu multijoueur, chaque serpent aurait son pouvoir.

Ce qui semble manquer, c'est Power-> Food mapping. Mais cela dépend vraiment de savoir si un aliment donne plusieurs pouvoirs ou si un pouvoir peut avoir des aliments différents.

Eh bien, il existe plusieurs façons de faire cela. Le plus fondamental que je puisse penser est d'avoir une méthode statique qui produira des puissances différentes une fois passé le type différent d'aliment. Chaque fois que votre serpent mange quelque chose que vous appelez SuperPower.onNomNom(FoodEaten). Exemple:

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

Une solution flexible est de créer une alimentation de classe comme ceci:

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

De cette façon, votre créer votre jeu de puissance/valeurs/icônes indépendamment. Si vous avez une nouvelle puissance, vous n'aurez rien à recoder.

En classe Serpent: J'ai

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

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