staging.inyokaproject.org

Graphisches Adventure in Java

Status: Gelöst | Ubuntu-Version: Nicht spezifiziert
Antworten |

Slackubuntu

Anmeldungsdatum:
5. Juni 2010

Beiträge: Zähle...

Hallo! Ich würde gerne ein kleines graphisches Adventure in Java schreiben. Ich bräuchte jemanden, der mich irgendwie dort unterstützt.
Als GUI würde ich Java2D nehmen, es soll nur ein einfaches Hobby-Projekt werden.
Ich bräuchte :
- eine Story (in solchen Sachen bin ich sehr unkreativ)
- jemanden, der bestimmte Sachen im Spiel programmiert (es würde natürlich auch alleine gehen, aber desto mehr, desto schneller und desto weniger Fehler)
Austausch der Codes und alles würde ich gleich hier im Thread machen (Vielleicht fragt ihr euch, warum ich dieses Thema nicht bei einem Java-Forum poste: Das Spiel soll ja unter Linux reibungslos laufen - Trotzdem fände ich es nicht schade, wenn jemand das ganze auf Windows oder Mac ausprobiert).

Slackubuntu

(Themenstarter)

Anmeldungsdatum:
5. Juni 2010

Beiträge: 39

ok, ich habe mich entschieden statt einem Adventure einen Pac-man Clone zu schreiben. Schaut mal hier: http://www.java-forum.org/spiele-multimedia-programmierung/101616-pacman-clone.html#post646956

Marc_BlackJack_Rintsch Team-Icon

Ehemalige
Avatar von Marc_BlackJack_Rintsch

Anmeldungsdatum:
16. Juni 2006

Beiträge: 4735

@Slackubuntu: Da ich jetzt keine Lust habe mich in dem Java-Forum anzumelden, eine kleine Anmerkung hier zu dem Java-Quelltext dort: Es wurde Dir ja schon enum statt Zahlen vorgeschlagen. Das solltest Du umsetzen, oder auch "normale" Klassen für die Spielfeldelemente verwenden. Denn diese if-Kaskade zum entscheiden wie welche "Zahl" gemalt werden soll, ist aus objektorientierter Sicht etwas was man nicht machen sollte. Das ist eine unnötige Indirektion Zahlen für Objekte stehen zu lassen. Sauberer wäre ein Spielfeld-Array aus Objekten die wissen wie sie sich selber zu malen haben. Bei den Spielfiguren kommen da später auch noch so Sachen wie Zustände hinzu – gelähmte Geister, Pacman der eine Powerpille gefressen hat, und Ähnliches. Die Strategie der Geister kann auch mit in so eine Klasse. Dann kann man viel einfacher neue Feldtypen oder Spielfiguren hinzufügen, als wenn man über das ganze Programm verteilt nach Code Ausschau halten muss, der irgendwelche letztendlich willkürlich gewählten Zahlen als Felder und Figuren interpretiert.

Das Feld dürfte so auch nicht ausreichen bzw. ist die Frage ob die Spielfiguren wirklich in dem Feldarray gespeichert werden sollten, denn die kommen ja sozusagen "oben drauf". Man muss ja unterscheiden können, ob auf einem Feld wo eine Spielfigur steht, eine Pille liegt oder nicht.

"Magische Zahlen" sind nicht gut. Das betrifft zum Beispiel die 30 und die 40. Wenn Du die Spielfeldgrösse änderst, musst Du durch das ganze Programm gehen und auch ja daran denken die alle anzupassen, aber auf der anderen Seite auch keine 30 oder 40 zu ändern, die mit der Spielfeldgrösse nichts zu tun hat. Für so etwas legt man Konstanten an. Dann kann man die an einer zentralen Stelle ändern und im Quelltext hat die Zahl einen aussagekräftigen Namen. Wobei bei der Feldgrösse die Zahlen nur für's erstellen benötigt werden. Java-Arrays kennen ja ihre eigene Grösse, also braucht man da nicht mit literalen Zahlen arbeiten. Besser noch: Man kann die foreach-Variante der for-Schleife verwenden um sich die Indexerei komplett zu sparen.

Das newpaint() könnte dann so aussehen (ungetestet):

1
2
3
4
5
6
7
    public void paintAll() {
        for (Piece[] row : feld) {
            for (Piece piece : row) {
                piece.paint(g);
            }
        }
    }

Ich hab's mal paintAll() genannt, denn mit Deinem command-Argument fängst Du auch da schon wieder an magische Zahlen zu verwenden, die schwer zu durchschauen sind.

Slackubuntu

(Themenstarter)

Anmeldungsdatum:
5. Juni 2010

Beiträge: 39

Bedeutet das also, dass ich für jedes Spielelement eine eigene Klasse anlegen soll?
Klingt gut! EDIT: Ich habe das Project unter den Namen jacman in Sourceforge eingetragen, ist aber noch alpha. Wenns fehler oder so gibt könnt ihr die auch dort posten.

Antworten |