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.
Hier mein KeyListener:
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.
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.