2012-05-26 2 views
3

Я создаю игру для своего школьного проекта, поэтому я не здесь для какого-либо кода, просто глобальная идея о том, как делать то, что я пытаюсь сделать ...Поиск способа обработки цветов и мощности на настольной игре

у меня есть кусочки и каждый кусочек как собственный цвет и тип, как это:
часть 1 - Желтый - Простой
часть 2 - желтый - Взрывное
....
шт 10 - Синий - ChangeColor

В начале игры будет поле со случайными фрагментами из этого списка (список c если у нас есть 3 или более подряд игра, чтобы удалить их и подсчитать очки, но если один из 3 (или более) имеет какой-либо «эффект мощности», чем части arround должен отреагировать на эту мощность (трудно объяснить с моим низким английским уровнем, но я думаю, что вы его получили: S ..)

На данный момент в моей игре были только простые фрагменты, и для этого я использовал и перечислял вот так:

public enum CorPeca 
{  
    AMARELO, 
    AZUL, 
    VERMELHO; 
} 

на классе борту я делал это:

this.arrayPecas = new ArrayList<Peca>(); 

    for (CorPeca corPeca : CorPeca.values()) 
     this.arrayPecas.add(new Peca(corPeca)); 

и на классе пьес я был d йти это

public Peca(CorPeca tipoPeca) 
{ 
    this.definirPeca(tipoPeca); 
} 

public CorPeca getCorPeca() { return this.corPeca; } 
public char getCharPeca() { return this.charPeca; } 

public void definirPeca(CorPeca tipoPeca) 
{ 
    switch (tipoPeca) 
    { 
     case AMARELO: 
      this.charPeca = 'a'; 
      this.corPeca = CorPeca.AMARELO; 
      break; 
     case AZUL: 
      this.charPeca = 'u'; 
      this.corPeca = CorPeca.AZUL; 
      break; 
     case VERMELHO: 
      this.charPeca = 'e'; 
      this.corPeca = CorPeca.VERMELHO; 
      break;     
    } 
} 

Но я думал хороший метод легко добавить эти «Power Пьесы», но более того, будучи в состоянии добавить больше цветов и больше «Полномочия» в будущем ...

Я думал о создании подклассов и использовании расширения, но вся идея просто не заполняет мой разум, поскольку мы не можем расширять несколько классов ...

Так может кто-нибудь дать мне глобальную идею о том, как я может архивировать это?

ответ

3

Классический ООП способ сделать это было бы определить абстрактный базовый класс, который представляет все части и содержит общие функциональные возможности (например, список полномочий):

public abstract class Piece { 
    // put in fields that every piece has, e.g. x and y co-ordinate here 

    // array of powers 
    protected ArrayList<Power> powers=new ArrayList<Power>(); 

    // method to add new powers to the piece 
    public void addPower(Power power) { 
     powers.add(power); 
    } 

    // power method - optionally overriden by specififc pieces 
    public void applyPowers() { 
     for (Power power:powers) { 
      power.methodToActivatePower(); 
     } 
    } 

    // abstract char method 
    public abstract char getChar(); 

} 

Обратите внимание, что abstract означает, что вы можете 't непосредственно создавать экземпляр этого класса - вы можете создавать экземпляры конкретных подклассов.

Затем расширить этот класс для реализации каждой определенной части:

public class YellowPiece extends Piece { 

    // override applyPowers for yellow piece (if needed) 
    @Override 
    public void applyPowers() { 
     // code for yellow piece power handling goes here 
    } 

    // override char - required 
    @Override 
    public char getChar() { 
     return 'y'; 
    } 

} 

Вы все еще можете создать ArrayList<Piece> и заселить его с чем-то вроде:

ArrayList<Piece> pieces = new ArrayList<Piece>(); 
pieces.add (new YellowPiece()); 
pieces.add (new GreenPiece()); 
// etc.... 

Тогда, если вы хотите применить силу конкретная деталь, просто выполните:

pieces.get(pieceNumber).applyPower(); 

Вы, очевидно, будете d, чтобы настроить этот код, чтобы он работал в вашей игре, но, надеюсь, он дает вам общую идею. Обратите внимание, что существует множество других способов достижения одних и тех же целей - я только что описал «классический» способ ООП.

P.S.Извиняюсь за весь код, находящийся на английском, но ваш английский намного лучше, чем мой португальский :-)

+0

Вы забыли указать, что 'YellowPiece расширяет Piece'. Вы также должны добавить примечания '@ Override' в качестве хорошей практики. –

+0

Большое вам спасибо за помощь! Действительно ^^ (PS: Это португальский, не испанский, это распространенная ошибка без проблем xD). Только один вопрос, ваше кодирование говорит, что у каждого цвета есть определенная мощность нет? Как я могу определить тогда разную силу? – aliasbody

+0

@aliasbody - а-а-а-а-э-э-э-э-э-э-э-э-э-э-э-э-э-э-э-э-э-э-э-э-э-э-э-э-э-э-э-э-э-э-а-а, возможно, я неправильно понял суть сил .... если часть может иметь несколько полномочий, Тогда Power сама может быть абстрактным классом, который имеет несколько подклассов для разных типов питания. то вы можете сделать что-то вроде 'piece.addPower (new ExplosionPower()) и т. д., надеюсь, это имеет смысл? сделаю некоторые быстрые изменения для ответа – mikera

Смежные вопросы