Hinterteil von Snake programmieren

chaostheory

Bekanntes Mitglied
Hallo,
ich habe jetzt seit fast einem Jahr Informatik-Unterricht in der 10. Klasse und habe aus Spaß angefangen kleinere Spielchen oder Programme zu schreiben (Teilweise sehr nutzlos, z.B. wird der Bildschirm auf Knopfdruck mit bunten Kreisen zugespammt.)
Als größeres Projekt habe ich mich an das Retro-Handyspiel Snake gemacht.
Im Unterricht arbeiten wir mit BlueJ und der Bibliothek SuM, die ausschließlich zum Erlernen der Java-Grundlagen geschrieben wurde.
Das Prinzip funktioniert so, dass ein Stift etwas auf dem Bildschirm zeichnet, es dann wieder löscht und anschließend daneben neu zeichnet, so kommt eine Bewegung zustande.
Meine Schlange ist bisher nur ein einfaches Rechteck, aber ich würde gerne auch ein Hinterteil haben, das immer länger wird und auch um Ecken läuft. Im Unterricht hatten wir außer Variablen aber noch nichts, mit dem man Position speichern kann. Den Versuch mehrere Rechtecke hintereinander laufen zu lassen habe ich schnell aufgegeben, da die Anzahl an Variablen viel zu groß wurde.
Nach etwas googlen bin ich auf Arrays gestoßen, ginge es vielleicht damit? Aber wie schreibe ich, dass bei jedem Treffer die Schlange länger und somit der Array größer wird?


Anbei der Code der Mainmethode:

Java:
public void agiere()
    {
        do
        {
            if(hatTastatur.wurdeGedrueckt())
            {
                switch(hatTastatur.zeichen())
                {
                    case Zeichen.PFEILOBEN:     hatSnake.drehe(90);                                            
                                                break;
                    case Zeichen.PFEILUNTEN:    hatSnake.drehe(270);
                                                                                              break;
                    case Zeichen.PFEILRECHTS:   hatSnake.drehe(0);
                                                                                                break;
                    case Zeichen.PFEILLINKS:    hatSnake.drehe(180);
                                                                                                break;
                    case '0':                   hatSnake.zSpeed=0; break;
                    case'+':                    hatSnake.zSpeed=hatSnake.zSpeed+0.5; break;
                    case'-':                    hatSnake.zSpeed=hatSnake.zSpeed-0.5; break;
                }
                hatTastatur.weiter();
            }
                                    
            if(hatSnake.getroffen(hatFutter.hPosition(), hatFutter.vPosition()))
            {
            hatFutter.loesche();
            hatFutter.zeichne();
            hatCounter.zaehle();
            }

            hatSnake.bewege();
            hatFutter.zeichneNeu();
            hatCounter.zeichne();   
            hatCounter.zaehleNeu();
            hatBildschirm.zeichneDich(); 
        }while(!hatMaus.doppelKlick());
    }
 

Fu3L

Top Contributor
Noch besser als ein Array ist zB eine java.util.List
Man könnte, für einen Anfänger, sagen, das ist wie ein Array, das seine Größe selbstständig erweitert, wenns voll ist (bei einer ArrayList wäre das genau das, bei LinkedList funktioniert es intern nochn Stück anders, aber das braucht dich nicht zu interessieren^^)

Sagen wir, du erstellst eine Klasse, deren Objekte je einen Teil der Schlange repräsentieren und nennst diese Klasse Part, dann sähe das so aus:
Java:
List<Part> parts = new LinkedList<Part>();
Part p = new Part();
parts.add(p);

Und lesen geht natürlich auch:

Java:
for(Part p : parts) {
   //zeichne den Teil p oder verschiebe ihn oder so
}

Damit wird die gesamte Liste durchlaufen und immer ein Teil daraus gelesen und über die Variable p zugänglich gemacht.

Ob das jetzt deine Fähigkeiten sprengt, weil ihr nur dieses lächerliche und unnütze Lernprogramm mit SuM nutzt, kann ich nicht einschätzen^^
 

chaostheory

Bekanntes Mitglied
Ob das jetzt deine Fähigkeiten sprengt, weil ihr nur dieses lächerliche und unnütze Lernprogramm mit SuM nutzt, kann ich nicht einschätzen^^

Ähm ja, tut es :oops:
Als ich mal nach Tutorials danach gesucht habe, war ich auch nur noch mehr verwirrt.
Vielleicht sollte ich aber erst mal was leichteres schreiben, bei unserem Unterricht sind wir da wahrscheinlich eh erst in einem Jahr^^
 

Fu3L

Top Contributor
Kenn ich aus meiner Stufe^^ Dieses Jahr Abi gemacht. Die, die 2 Jahre Informatik hatten, können nicht einmal ein Hallo Welt Programm ohne BlueJ ausführen :noe: (gut der Unterricht fand auch nur zur Hälfte der Zeit statt.. aber trotzdem arm^^)

Ich würde sagen, wenn es dich wirklich interessiert, lies einfach mal selbst ein Buch. Ich hab mir Java auch in der 10 selbst beigebracht ohne Informatikunterricht^^ ;)

Galileo Computing :: Java ist auch eine Insel – Vorwort

Das hier ist online sogar kostenlos (wobei ich persönlich gedruckte Bücher mehr zu schätzen weiß^^)
 

chaostheory

Bekanntes Mitglied
Das hier ist online sogar kostenlos (wobei ich persönlich gedruckte Bücher mehr zu schätzen weiß^^)

Da steht das kostet auch online 45€ ???:L
Zudem richtet es sich nicht an blutige Anfänger und da zähle ich mich lieber noch zu.
Wahrscheinlich wird mein Programmiererleben leider auf Autodidaktik hinauslaufen, vielleicht hat die Bibliothek ja was parat.
 

Fu3L

Top Contributor
Die Kapitel dieses Buchs sind für Einsteiger in die Programmiersprache Java wie auch für Fortgeschrittene konzipiert.

Und dort steht ein Preis, aber der ist für die gebundene, papierende Ausgabe. Fast alle hier im Forum verweisen bei Anfängerfragen auf die Insel, weil die Insel kostenlos von vorne bis hinten online steht ;)

Ich glaube in der Bücherrei wirste nix besseres finden^^
 

Matthias K.

Mitglied
Hi,
ich muss auch mit BlueJ programmieren, aber diese kleine Entwicklungsumgebung ist
für richtige Projekte nicht geeignet.
Guck mal einfach auf deine CPU-Auslastung, wenn du eine Programm ausführst.
Müsste um die 50% ausgelastet sein.
Ich würde dir empfehlen Eclipse herunter zu laden und dann richtig los zu legen.
Ich stehe dir gerne für jegliche Fragen zur Verfügung.
Jedoch ist es nicht falsch, das BlueJ-Buch durch zu arbeiten.
Im Zug-Kapitel findest du z.B. eine Lösung für dein Problem.
Außerdem gewöhnst du dir einen guten Programmier-Stile an.

Gruß,
Matthias
 

Cola_Colin

Top Contributor
Um Snake umzusetzen kann man wohl verschiedene Ansätze wählen.

Im allgemeinen läuft es immer darauf hinaus, dass die Schlange aus einer Reihe von Einzelstücken besteht, die alle eine eigene Bewegungsrichtung für den nächsten "Zug" haben und miteinander verkettet sind.
Bei der Bewegung wird erst jedes Teil anhand seiner Wunschrichtung bewegt und danach wird jedem Teil die Bewegungsrichtung des Vordermans gegeben.
Kann man sich wie eine Reihe von Waggons vorstellen, ja.

Verwalten kann man diese einzelnen Teile am besten per OOP in einer verketten Liste.
 

c_sidi90

Top Contributor
Du füllst 2 Arrays (am besten int) in den du die Bestandteile der Snake speicherst

Java:
          int maxSize = 500;
          int x [] = new int [maxSize] //z.B.
          int y [] = new int [maxSize] //^
          int dotSize = 10; //Beispielsweise jenachdem wie groß dein Image ist (Pixel)

Dann brauchst du noch eine Variable die die aktuelle Größe deiner Snake speichert

Java:
 int snakeSize = 3; //3 ist der Startwert ist beliebig zu verändern


Jedes mal wenn die Schlange ein Objekt frisst, erhöst du diese Variable um 1.
Nun brauchst du ein Algorithmus, welcher die Bestandteile der Schlange im Array an die Bewegung anpasst (x,y Koords).

Das könnte in etwa so aussehen:

Java:
    public void bewegen() {

        for (int z = snakeSize ; z > 0; z--) {
            x[z] = x[(z - 1)];
            y[z] = y[(z - 1)];
        }

        if (links) {
            x[0] -= DOT_SIZE;
        }

        if (rechts) {
            x[0] += DOT_SIZE;
        }

        if (hoch) {
            y[0] -= DOT_SIZE;
        }

        if (runter) {
            y[0] += DOT_SIZE;
        }
    }
 

SkonroX

Aktives Mitglied
angenehmste lösung meiner meinung nach ist meine ;D :
Java:
private void SnakeMove() {
    for (int i = SnakeGame.lage.size() - 1; i > 0; i--)
      SnakeGame.lage.set(i, (Point)SnakeGame.lage.get(i - 1));
    if (SnakeGame.CurrentTurn == 0)
      SnakeGame.lage.set(0, new Point(((Point)SnakeGame.lage.get(0)).x, ((Point)SnakeGame.lage.get(0)).y - 17));
    if (SnakeGame.CurrentTurn == 1)
      SnakeGame.lage.set(0, new Point(((Point)SnakeGame.lage.get(0)).x - 17, ((Point)SnakeGame.lage.get(0)).y));
    if (SnakeGame.CurrentTurn == 2)
      SnakeGame.lage.set(0, new Point(((Point)SnakeGame.lage.get(0)).x + 17, ((Point)SnakeGame.lage.get(0)).y));
    if (SnakeGame.CurrentTurn == 3)
      SnakeGame.lage.set(0, new Point(((Point)SnakeGame.lage.get(0)).x, ((Point)SnakeGame.lage.get(0)).y + 17));
  }
Deklarationen:
ArrayList< Point > lage;
int CurrentTurn;

lg
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J SNAKE-GAME-LOOP / (Applet zu Application) Spiele- und Multimedia-Programmierung 4
P Snake Game Verbessern Spiele- und Multimedia-Programmierung 15
P Snake Java Hilfe Spiele- und Multimedia-Programmierung 4
F Koordinieren und Essen von Snake - Spiel Spiele- und Multimedia-Programmierung 14
B "Snake"-Game Logikfehler Spiele- und Multimedia-Programmierung 1
B noch ein snake klon Spiele- und Multimedia-Programmierung 2
Viktim Snake - Schlange wächst nicht Spiele- und Multimedia-Programmierung 3
M Hilfe bei Snake Spiele- und Multimedia-Programmierung 4
J LWJGL Update Schleife (Snake) Spiele- und Multimedia-Programmierung 6
N Schulprogramm "Snake" Spiele- und Multimedia-Programmierung 4
R Hilfe bei Snake-Programmierung Spiele- und Multimedia-Programmierung 6
S Snake versuch Spiele- und Multimedia-Programmierung 14
J Snake Programmierung Spiele- und Multimedia-Programmierung 18
V Snake Spiel Spiele- und Multimedia-Programmierung 7
D Snake n+1-Thread Spiele- und Multimedia-Programmierung 2
N Hilfe bei snake Spiele- und Multimedia-Programmierung 37
N Snake (Programmier Stil) Spiele- und Multimedia-Programmierung 8
G SNAKE HILFEEE! Spiele- und Multimedia-Programmierung 15
G Snake Alphaversion Spiele- und Multimedia-Programmierung 18
B Snake-Game fürs Handy Spiele- und Multimedia-Programmierung 3
M BlueJ Schach Steuerung programmieren Spiele- und Multimedia-Programmierung 28
ItundMathe1994 TicTacToe Spiel programmieren Spiele- und Multimedia-Programmierung 2
N Escape the Room - Spiele Apps programmieren Spiele- und Multimedia-Programmierung 14
Laaalo Tic tac toe programmieren Spiele- und Multimedia-Programmierung 4
mihe7 Wie man einfache Spiele programmieren kann Spiele- und Multimedia-Programmierung 23
M Brauche Hilfe was zu Programmieren Spiele- und Multimedia-Programmierung 4
N Minecraft Spigot-Plugin | Schusswaffe programmieren Spiele- und Multimedia-Programmierung 3
A Programmieren eines Memorys mit Java (in Eclipse) Spiele- und Multimedia-Programmierung 5
A DoodleJump programmieren: Kollisionsabfrage Spiele- und Multimedia-Programmierung 6
I Vier gewinnt programmieren, Klick-Reihenfolge Spiele- und Multimedia-Programmierung 2
B Programmieren wie der Befehl /ban in Minecraft geblockt wird aber nicht /ban mit einem Argument Spiele- und Multimedia-Programmierung 1
K Android Spiel Programmieren Spiele- und Multimedia-Programmierung 6
P Tennis- Spielstand- Zähler für Schule programmieren Spiele- und Multimedia-Programmierung 6
J HDMI Ausgänge mit Java programmieren? Spiele- und Multimedia-Programmierung 18
L Hörtest programmieren und implementieren Spiele- und Multimedia-Programmierung 2
E Möchte Jump and Run programmieren Spiele- und Multimedia-Programmierung 2
E Möchte Spiel Programmieren Spiele- und Multimedia-Programmierung 7
M Gesellschaftsspiel Mühle in Java programmieren Spiele- und Multimedia-Programmierung 3
M Textbasiertes Spiel programmieren Spiele- und Multimedia-Programmierung 4
M Logitech G15/G510 Applets programmieren Spiele- und Multimedia-Programmierung 3
F Spiel ähnlich wie SimCity/o.ä programmieren Spiele- und Multimedia-Programmierung 5
O Rundenbasiertes strategiespiel programmieren Spiele- und Multimedia-Programmierung 2
K 2D Blockade Programmieren Spiele- und Multimedia-Programmierung 3
wolfgang63 Mit JavaFX einfaches Game programmieren Spiele- und Multimedia-Programmierung 5
J Mod Loader programmieren Spiele- und Multimedia-Programmierung 11
I Hitpoints/Lifepoints programmieren, wie? Spiele- und Multimedia-Programmierung 7
L Minecraft Minecraft Plugin programmieren (Craftbukkit 1.7.2) Problem Spiele- und Multimedia-Programmierung 4
B Spiel Programmieren, die Anfänge Spiele- und Multimedia-Programmierung 6
wolfgang63 Einfachen Soundgenerator programmieren Spiele- und Multimedia-Programmierung 1
J UNO Programmieren Spiele- und Multimedia-Programmierung 4
F Bot Programmieren Spiele- und Multimedia-Programmierung 10
N Game GUI Programmieren Spiele- und Multimedia-Programmierung 16
1 Minecraft Minecraft Plugins programmieren Spiele- und Multimedia-Programmierung 6
T MiniCraft - selbst nach Programmieren Spiele- und Multimedia-Programmierung 25
A Klickgame ala "Harveys neue Augen" oder "Edna bricht aus" in Java programmieren... Fragen zu Kleinig Spiele- und Multimedia-Programmierung 8
S Spiel Programmieren (Kreise treffen) Spiele- und Multimedia-Programmierung 5
F wie richtig spiele programmieren ? Spiele- und Multimedia-Programmierung 19
B Spiele programmieren für ein Fenster? Spiele- und Multimedia-Programmierung 14
B Kartenspiel Leben und Tod programmieren Spiele- und Multimedia-Programmierung 11
T Vier gewinnt programmieren Spiele- und Multimedia-Programmierung 9
N Stimme programmieren Spiele- und Multimedia-Programmierung 11
Sebi Mit Java Online games programmieren ? Spiele- und Multimedia-Programmierung 8
N Labyrinth programmieren/Denkhilfe Spiele- und Multimedia-Programmierung 3
data89 Spiel mit JMonkey programmieren Spiele- und Multimedia-Programmierung 6
O Programmieren von "Familienduell" Spiele- und Multimedia-Programmierung 3
A Wie JAVA Webcam Client programmieren? Spiele- und Multimedia-Programmierung 11
T vier gewinnt programmieren - aber wie Spiele- und Multimedia-Programmierung 19
N In einem Kasten springende Bälle programmieren...Hilfe Spiele- und Multimedia-Programmierung 7
B Problem beim Programmieren von 4Gewinnt Spiele- und Multimedia-Programmierung 5
A Programmieren eines Bruchrechners Spiele- und Multimedia-Programmierung 3
K Malefiz programmieren - Frage zu den einzelnen Spielfeldern Spiele- und Multimedia-Programmierung 5
G wer möchte mit mir risiko programmieren? Spiele- und Multimedia-Programmierung 7
B Problem beim Programmieren Von Mühle Spiele- und Multimedia-Programmierung 6
N Sinus Welle programmieren! Spiele- und Multimedia-Programmierung 4
J Gesellschaftsspiele programmieren Spiele- und Multimedia-Programmierung 8
P 2D Spiel mir drehbaren Bildern (Sprites) programmieren Spiele- und Multimedia-Programmierung 10
U Ball programmieren Spiele- und Multimedia-Programmierung 26
A "Wegnehm-Spiel" programmieren, Tipps + Links? Spiele- und Multimedia-Programmierung 8

Ähnliche Java Themen

Neue Themen


Oben