# Helferklasse für Richtungsangaben



## Shia (11. Aug 2011)

Hallo zusammen!

Ich bin gerade dabei ein Spiel von C++ in Java (als Android-App) zu portieren. 
Dabei gibt es Spielfelder, die verschiedene Pfeile in 8 Himmelsrichtungen haben (also mal nur nach Osten zeigend, oder mal nach Osten, Westen und Südosten zeigend..). Ich muss aber herausfinden, ob Himmelsrichtung X auf dem Spielfeld vermerkt ist.
Meine Kollegen haben das Problem in C++ mit einem String "gelöst" (wie irgendwie jedes Problem..), nur frisst das auf sonem kleinen Handy zu viele Ressourcen.
Eigentlich hätte ich es gern als Bytewert gehabt, den man dann in einen Integer umwandelt. Mit logischen Operationen findet man dann auch heraus, ob diese Richtung dabei ist. Aber damit mach ich mir das Leben wohl nur unnötig schwer?
Oder eine ArrayList mit den Himmelsrichtungen, die verfügbar sind? Wäre das ressourcensparend genug?

Wäre auch für alle anderen Ideen offen =)

liebe Grüße
Shia


----------



## RySa (11. Aug 2011)

So mal schnell aus ...... geschossen :

Enums mit den Himmelsrichtungen die verfügbar sind ? Wäre das eine Lösung ?


----------



## bERt0r (11. Aug 2011)

Ich würd sagen einfach ein 8er boolean array.


----------



## SamHotte (11. Aug 2011)

Ein "byte" müsste auch langen - bit gesetzt = true, bit nicht gesetzt = false ... dürfte kleiner sein als ein boolean[8], oder?


----------



## maki (11. Aug 2011)

Enum, ganz klar imho.


----------



## Marco13 (11. Aug 2011)

Eigentlich ein enum. Aber auf Android gelten AFAIK andere Regeln (bei denen man manchmal schon ziemlich :autsch: ???:L :autsch: drinschaut). Da gibt es Talks von Koryphäen, die beinhart sagen: Joa, fields sollten am besten 'public' sein, und ... Speicherallokationen? Sollte man am besten GAR keine machen... Ein einzelnes byte könnte in diesem Fall die angebrachsteste Lösung sein. 8. In Worten: ACHT. Das drängt sich doch auf .... :reflect:


----------



## maki (11. Aug 2011)

Das ist dem TS zu aufwändig:


> Aber damit mach ich mir das Leben wohl nur unnötig schwer?


Was ich irgendwo auch nachvollziehen kann.

Klar, für Android gelten andere Regeln, aber auch diese ändern sich seit dem es DualCore Smartphones gibt.

Nachrag: Der Beitrag "Avoid Enums Where You Only Need Ints" in der Android Doku scheint verschwunden zu sein.

Designing for Performance | Android Developers


----------



## Shia (16. Aug 2011)

Der Link hat mir echt super weitergeholfen, danke dafür! Wusste nicht, dass man da auf so vieles achten muss bei der Performance..

Ich habe nun ein boolean(8) gewählt, da ich ja auch mehrere mögliche Richtungen gleichzeitig abbilden können muss.
So wies bis jetzt ausschaut fahr ich damit auch ganz gut, Dankeschön!


----------



## Marco13 (16. Aug 2011)

Shia hat gesagt.:


> Ich habe nun ein boolean(8) gewählt, da ich ja auch mehrere mögliche Richtungen gleichzeitig abbilden können muss.



Das kann man mit einem byte auch!

```
public static final byte NORTH = (byte)(1<<0);
public static final byte SOUTH= (byte)(1<<1);
public static final byte EAST= (byte)(1<<2);
...

void x()
{
    byte direction = (byte)(NORTH | SOUTH);

    if ((direction & NORTH) != 0) System.out.println("Norden"); // Wird ausgegeben
    if ((direction & SOUTH) != 0) System.out.println("Süden"); // Wird ausgegeben
    if ((direction & EAST) != 0) System.out.println("Osten"); // Wird NICHT ausgegeben

}
```


----------



## Shia (17. Aug 2011)

"(byte)(1<<2)"  Oha, das kannte ich so noch nicht! Vielen Dank für die Aufklärung


----------

