Snake pausieren

Warrior7777

Bekanntes Mitglied
Hallo miteinander

ich wollte mal Snake programmieren. Bitte keine Hinweise zu Bewegung der Schlange, daran will ich selbst noch ein wenig knobeln.:)
Nun zu meinem Problem: Ich würde das Spiel gerne pausieren durch Drücken von p. Dadurch soll eine Variable pause auf true gesetzt werden und anschliessend der Thread angehalten werden.

Java:
import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;

class Snake extends Frame implements Runnable{

	Thread thread;
	SnakeElement[] snake=new SnakeElement[15];
	int vx=5;
	int vy=0;
	int startx=350;
	int starty=350;
	int elementwidth=(new SnakeElement(0, 0)).getWidth();
	boolean pause=false;
	
	
	Snake(){
		super("Snake");
		setBounds(300, 300, 300, 300);
		addWindowListener(new ClosingAdapter());
		addKeyListener(new SnakeKeyAdapter());
		
		snake[0]=new SnakeElement(startx, starty);
		snake[1]=new SnakeElement(startx-elementwidth, starty);
		snake[2]=new SnakeElement((startx-2*elementwidth), starty);
		
		setVisible(true);
		thread=new Thread(this);
		thread.start();
	}
	
	public void run(){
		try{
			while(true){
				repaint();
				thread.sleep(10);
			}
		}catch(InterruptedException e){}
	}
	
	public void paint(Graphics g){
		for(int i=0; snake[i]!=null; i++){
			g.drawImage(snake[i].img, snake[i].x, snake[i].y, this);
		}
		moveSnake();
	}
	
	public void moveSnake(){
		for(int i=0; snake[i]!=null; i++){
			snake[i].x=snake[i].x+vx;
			snake[i].y=snake[i].y+vy;
		}
	}
	
	void pause(){
		try{
			if(pause){
				thread.wait();
			}else{
				thread.notify();
			}
		}catch(InterruptedException e){}
	}
	
	public static void main(String[] args){
		new Snake();
	}
}

Hier mein KeyListener:

Java:
import java.awt.*;
import java.awt.event.*;

class SnakeKeyAdapter extends KeyAdapter{

	static int vx=20;
	static int vy=20;
	
	public void keyPressed(KeyEvent e){
		//up
		if(e.getKeyCode()==38){
			((Snake)e.getComponent()).vy=-vy;
		}
		//down
		if(e.getKeyCode()==40){
			((Snake)e.getComponent()).vy=vy;
		}
		//left
		if(e.getKeyCode()==37){
			((Snake)e.getComponent()).vx=-vx;
		}
		//right
		if(e.getKeyCode()==39){
			((Snake)e.getComponent()).vx=vx;
		}
		//pause
		if(e.getKeyCode()==80){
			((Snake)e.getComponent()).pause=!((Snake)e.getComponent()).pause;
			((Snake)e.getComponent()).pause();
		}
	}
}

Beim Drücken von p gibt die JRE eine Fehlermeldung aus. Ich glaub es hat etwas mit dem Thread zu tun. Wird der Hauptthread durch p beendet (was ja nicht die Absicht ist). Oder ist es ein Synchronisationsproblem mit pause?

Danke schon im Voraus und Entschuldigung für den halben Roman. Denke aber lieber zu viele als zu wenige Infos.:)
 
V

vanny

Gast
Wie wär´s denn, wenn du pause = true setzt und in deinem gameloop erstmal schaust, ob der pausiert ist.
lass den loop doch laufen und mach einfach nichts weiter, solange pause == true :p

quasi sowas:
Java:
while(true){
   if(!pause){
      repaint();
   }
  thread.sleep(10);
}

[EDIT]poste dochmal deine Fehlermeldung, dann kann man auch etwas dazu sagen[/EDIT]
 
Zuletzt bearbeitet von einem Moderator:
G

Gast2

Gast
Java:
    public void paint(Graphics g){
        for(int i=0; snake[i]!=null; i++){
            g.drawImage(snake[i].img, snake[i].x, snake[i].y, this);
        }
        moveSnake();
    }
In der paint bzw. paintComponent Methode solltest du ausschließlich zeichnen. Logik hat da nichts zu suchen.
Normalerweise hast du irgendwo nen Gameloop der deine Werte verändert. Am Ende der Loop würde dann einmal repaint() aufgerufen werden dass dein Spielfeld aktualisiert.
 

Warrior7777

Bekanntes Mitglied
Das IST nur Zeichnen...Die Schleife zeichnet lediglich die einzelnen Elenente anhand derer x- und y-Werte. Diese werden durch moveSnake() gesetzt.
Kann man eine JRE Fehlermeldung irgendwie speichern? Hab keine Lust 30Zeilen abzuschreiben.
Trotzdem danke für den Hinweis!
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Z SNAKE Schlange beim Aufheben von Essen verlängern Java Basics - Anfänger-Themen 4
AmsananKING Methoden Moving Snake Forward Java Basics - Anfänger-Themen 0
D Snake-Spiel ähnliche Aufgabe Hilfe Java Basics - Anfänger-Themen 3
B "Snake"-Game verbuggt Java Basics - Anfänger-Themen 0
T Snake-BlueJ Bewegung Java Basics - Anfänger-Themen 7
T Snake mit Bluej Java Basics - Anfänger-Themen 8
K Diverse Bugs in einem Snake Spiel Java Basics - Anfänger-Themen 4
J Snake Movement Java Basics - Anfänger-Themen 7
C Java Nullpointer Exception in 2D-Spiel Snake Java Basics - Anfänger-Themen 8
N Snake Java Basics - Anfänger-Themen 2
S Snake Punktezähler funktioniert nicht Java Basics - Anfänger-Themen 9
C Minispiel Snake Java Basics - Anfänger-Themen 3
A Snake programmieren? Java Basics - Anfänger-Themen 31
K loop pausieren für eine bestimmte Anzahl? Java Basics - Anfänger-Themen 1
CptK For-Schleife in Thread nach jedem Durchlauf pausieren Java Basics - Anfänger-Themen 35
DorFey Schrittweises abändern des GUI während for-Schleife / pausieren einer for-Schleife Java Basics - Anfänger-Themen 3
CptK Best Practice Algorithmus nach jedem Schritt zum Visualisieren pausieren Java Basics - Anfänger-Themen 3
J Timer richtig pausieren Java Basics - Anfänger-Themen 2
V wie kann ich eine Schleife pausieren, bis ein Jbutton gedrückt wird ? Java Basics - Anfänger-Themen 17
S Methode pausieren bis Button gedrückt wird Java Basics - Anfänger-Themen 5
E ExecutorService pausieren Java Basics - Anfänger-Themen 3
H Threads Thread pausieren Java Basics - Anfänger-Themen 6
K Programm ohne Threads kurz Pausieren Java Basics - Anfänger-Themen 4
7 Endlosschleife pausieren Java Basics - Anfänger-Themen 11
M AudioStream - wiederholen, pausieren und wieder starten Java Basics - Anfänger-Themen 2
A Programm pausieren Java Basics - Anfänger-Themen 6
M Ausführen pausieren Java Basics - Anfänger-Themen 16
manunana89 Programm kurz pausieren??? Java Basics - Anfänger-Themen 6
G Schleife mit Thread.sleep pausieren Java Basics - Anfänger-Themen 12
S Stoppuhr - starten, stoppen, pausieren Java Basics - Anfänger-Themen 2
S Programmablauf pausieren, bzw. auf Eingabe warten Java Basics - Anfänger-Themen 4
H Threads pausieren Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Neue Themen


Oben