Schulprogramm "Snake"

Nookieslot

Neues Mitglied
Hallo Leute,

ich muss ein Snakespiel in Java programmieren. Dabei wollte ich, dass die Schlange, wie beim richtigen "Snake" von alleine in eine Richtung läuft und ich dann mit Buttons die Richtung ändern kann. Leider kann ich mit der Pause-Funktion die Richtung zwischendurch nicht verändern.

Wie kann man das Während der Pausen machen?

Hier mein Code:


Java:
public void Pause(int M) {
     try {Thread.sleep(M);}
     catch(InterruptedException e) {return;}
    }








Java:
        if(e.getSource()==Up){
            direction=1;
            while(direction==1){
            if(direction!=2){
              K.yPosition=K.yPosition-10;
              Q.enqueue(K.xPosition,K.yPosition);
              
              if((K.yPosition==S.yPosition)&&(K.xPosition==S.xPosition)){
                  Leinwand.setColor(Color.white);
                  Leinwand.fillOval(S.xPosition,S.yPosition,S.durchmesser,S.durchmesser);
                  S.setx();
                  S.sety();
                  Leinwand.setColor(Color.red);
                  Leinwand.fillOval(S.xPosition,S.yPosition,S.durchmesser,S.durchmesser);
                  i=i+1;
                }
                
              Leinwand.setColor(Color.blue);
              Leinwand.fillOval(K.xPosition,K.yPosition,K.durchmesser,K.durchmesser);
            
              if(ZV>i){
                Leinwand.setColor(Color.white);
                Leinwand.fillOval(Q.getx(),Q.gety(),K.durchmesser,K.durchmesser);
                Q.dequeue();
              }else{ZV=ZV+1;}
              direction=1;
              Pause(1000);
            }
        }       
 }

"direction" und "ZV" ist nicht relevant für das Problem, habs nur dringelassen, damit ich keine Syntaxfehler habe. "Enqueue" ist so etwas, wie ein Schritt weiter mit der Schlange, wobei der hintere Teil sofort mit "dequeue" gelöscht wird (sie soll ja nicht länger werden). "K" ist meine Kreisklasse, aus der die Schlange besteht. "S" ist das, was die Schlange essen kann. "Q" ist das Nebenprogramm, worin "enqueue" und "dequeue" usw. enthalten ist. "Leinwand" ist einfach die Fläche, auf der gezeichnet wird.

Alles wird über Buttons gesteuert. Das ist mein Beispiel für den Vorgang "Up" (Schlange bewegt sich nach oben).

Edit: "direction" ist doch relevant merke ich grad :D

Bei up ist sie 1
bei down 2
bei left 3
bei right 4
 
Zuletzt bearbeitet:

Titanpharao

Bekanntes Mitglied
Ich schau mal in meine Glaskugel und erkenne das
if(e.getSource()==Up){ ...
sich in einer keyPressed Methode befindet...

Also erstmal baust du dein Snake Clon komplett falsch auf.

Du solltest einen Thread starten welcher ständig alles neuzeichnet und ~10ms "wartet" um nicht auf 100% CPU zu kommen.
Gameloop ist hier das Strichwort.

Er sollte auch die Schlange anhand deiner Eingabe bewegen und könnte sogar neue "Gegner" spawn usw usw.

Dann fängst du im KeyEvent nur noch die Eingabe der Tastatur ab und setzt die Richtung.
Wenn die Schlange "gewechselt" hat, setzt du die Richtung wieder auf -1 oder einen ungültigen Wert.


Etwas code der dich inspirieren soll:

Code:
Thread gameLoop=new Thread(new Runnable(){
	public void run(){
		Thread.sleep(10);
		moveSnake();....
	}
});


public void keyPressed(KeyEvent e){
	if(direction==-1){
 switch(e.getKeyCode()){... direction= ....
}

Ist etwas schwer zu erklären, aber deine Event basierte Methodik ist hier vollkommen fehl am Platz.

Es gibt doch auch hier ein gutes Tutorial wie man ein simples Spiel macht mit einem Gameloop.

Und lehren euch die Lehrer nicht mehr Java CodeStyles? Aber unsere Professoren sind da genauso schlecht, deswegen muss ich jetzt etwas "flamen".

upCamelCase, Denglish, Klassen groß, Methoden & Variablen klein ... *.*

Aber keine Angst, wir waren alle mal so ...
 

Titanpharao

Bekanntes Mitglied
Ach da fällt mir noch etwas ein, wie du deine Schlange dauer bewegen kannst.

Nimmst du den Thread und sagst dort einfach alle eine Sekunde (oder wie schnell sie sein soll),
bewege dich in Richtung um +X.
Dann prüfst du jedes mal vor dem Verschieben, ob sie nicht die Richtung ändern soll.

Naja ähnelt eigentlich fast dem Gameloop ...
 

Nookieslot

Neues Mitglied
Danke für die schnelle Antwort.

Naja, unser Lehrer möchte halt, dass wir das nach einem bestimmten Muster machen (kann sein, dass ich das trotzdem falsche habe :p)

Noch eine Frage, ich habe dieses "Thread.sleep(10);" auch in anderen Beiträgen hier gelesen, jedoch weiß ich nicht was das bewirkt (wir sind noch nicht so weit). Stoppt dann einfach das ganze Programm für 10ms und prüft, ob irgendetwas passiert ist??

PS: Mein Programm wir (noch) über Buttons gesteuert (also "ActionListener" usw.), deshalb kann ich noch nicht mit KeyPressed o.Ä. arbeiten.
 

TKausL

Top Contributor
mit Thread.sleep(10) pausiert der AKTUELLE THREAD 10 Sekunden lang. Fals du nicht bewusst neue Threads erstellt und gestartet hast kannst du davon ausgehen, dass dein "Programm" solange pausiert, ja. Das Thema "Threads" wird warscheinlich später behandelt werden.
 
Ä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
R Hilfe bei Snake-Programmierung Spiele- und Multimedia-Programmierung 6
C Hinterteil von Snake programmieren Spiele- und Multimedia-Programmierung 11
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

Ähnliche Java Themen

Neue Themen


Oben