Fragen zu Snake unter Allegro 4.2
-
Hallo allerseits.
Von der Uni aus müssen wir ein Snake-Spiel graphisch mit Allegro programmieren. Leider haben wir an der Uni Allegro noch nie besprochen auch nicht, wie man graphische Sachen angeht. Darum hätte ich ein paar konkrete Fragen.
1. Das Spielfeld von Snake würde ich mir nackt ohne Schlange als 2-Dimensionales Array vorstellen:
int field[MAX_X][MAX_Y] = { { 1, 1, 1, 1, 1, 1 }, { 1, 0, 0, 0, 0, 1 }, { 1, 0, 0, 0, 0, 1 }, { 1, 0, 0, 0, 0, 1 }, { 1, 0, 0, 0, 0, 1 }, { 1, 1, 1, 1, 1, 1 } }
Wobei 1 die Wand und 0 das freie Feld bedeutet. Zur Frage: wie kann ich das in Allegro machen? Wie kann ich zum Beispiel sagen, dass jede 1 ein grauer Steinklotz sein soll und 0 ein schwarzer Hintergrund?
2. Läuft auf die gleiche Fragestellung hinaus. Die Schlange selber würde ich als verkettete Liste implementieren:
struct snake_node { int x_dim; int y_dim; int direction; //Richtung struct snake_node *next; };
Wieder die Frage: Wie kann ich Allegro sagen, dass snake_node eine bewegende Schlange sein soll?
Von der Uni habe wir nur den Link zur Dokumentation bekommen, die ich gerade abarbeite. Leider habe ich noch kein Tutorial gefunden, dass mir genau diese Sachen erklärt. Wenn ihr ein gutes Tutorial noch hättet wäre ich euch dankbar, wenn ihr mir den Link schicken könntet.
Vielen Dank schonmal.
-
Du kannst Allegro nicht so etwas sagen.
Allegro ist eine Lowlevel API. Es kann dir sagen: User hat W gedrückt, Fenster wurde geschlossen. Du kannst ihm sagen: Mal ein Bild an die und die Position, spiel Musik ab.
Die Logik musst du implementieren.
Zu deinem Feld:
Du gehst über das Feld drüber und je nachdem, was da drin ist, zeichnest du ein entsprechnedes Bild.
Zu der Schlange:
Jedes Mal wenn eine Taste gedrückt wird, änderst du die Richtung und updatest das in jedem Frame oder so, indem du ein Feld anfügst. Dann zeichnest du sie drüber.
-
Danke Nathan für deine Antwort.
Die Logik musst du implementieren.
Die Logik an und für sich ist nicht mein Problem. Snake habe ich schon als Konsolenprogramm programmiert. Tut mir leid, wenn ich mich falsch ausgedrückt habe. Ich versuchs nochmal detailierter.
Zum Spielfeld. In der Konsole hat jedes Zeichen eine fixe Größe. Also, wenn ich das Spielfeld ausgeben will, mach ich das dann von mir aus so:
@@@@@@@@@ @ @ @ @ @ @ @ @ @@@@@@@@@
Wenn ich jetzt ein Fenster aufmache, dann habe ich Pixel für Pixel. Wie macht man dan so ein Spielfeld? Bestimme ich dann, dass ein "@" von oben zum Beispiel 20x20 Pixel groß ist? Oder muss ich Pixel für Pixel zeichen?
Was graphische Programmierung angeht, ich mache das gerade zum ersten Mal. Darum mag diese Frage vielleicht lächerlich rüberkommen, ich habe aber wirklich keinen Plan, wie man da vorgeht.Danke nochmal.
-
allegro11 schrieb:
Wenn ich jetzt ein Fenster aufmache, dann habe ich Pixel für Pixel. Wie macht man dan so ein Spielfeld? Bestimme ich dann, dass ein "@" von oben zum Beispiel 20x20 Pixel groß ist? Oder muss ich Pixel für Pixel zeichen?
Was graphische Programmierung angeht, ich mache das gerade zum ersten Mal. Darum mag diese Frage vielleicht lächerlich rüberkommen, ich habe aber wirklich keinen Plan, wie man da vorgeht.Danke nochmal.
Ich hab mich schon ewig nicht mehr mit Allegro beschäftigt, aber es gibt dort Funktionen, die zeichnen Bilder bzw. Rechtecke an eine bestimmte Position.
Du musst lediglich übers Array iterieren, die Position berechnen und je nach Inhalt des Arrays ein entsprechendes Bild/Rechteck zeichnen.