Hey liebe Community!
Zuerst ich habe nach einem passenden Thread gesucht, habe aber nix gefunden!
Mein Problem ist folgendes. Ich füge einem JPanel einen KeyListener hinzu und das sollte eigentlich funktionieren.
Das Problem ist aber das er nicht auf eingaben reagiert...
Das soll in der Klasse SpielFeld stattfinden. Die Schlange bewegt sich ja, aber die Richtung kann nicht beinflusst werden. Der KeyListener wird nichtmal aufgerufen. Habe schon probiert mit System.out.println() zu testen ob die Methode ansprechbar ist. Hat nicht geklappt.
Diese Klasse startet das Spiel
Die eigentliche Klasse wo das Spielabgebildet werden soll.
Diese Klasse stellt einen Punkt am Spielfeld dar.
Dieser Thread ist dafür zuständig das sich die Schlange bewegt!
Die gesamt GUI + Spielfeld
Das Spiel ist bei weitem noch nicht fertig, aber ich will es erst schaffen das ich die Schlange durch Tastendruck nach links nach rechts usw. bewegen kann!
lg,
Rene
Zuerst ich habe nach einem passenden Thread gesucht, habe aber nix gefunden!
Mein Problem ist folgendes. Ich füge einem JPanel einen KeyListener hinzu und das sollte eigentlich funktionieren.
Das Problem ist aber das er nicht auf eingaben reagiert...
Das soll in der Klasse SpielFeld stattfinden. Die Schlange bewegt sich ja, aber die Richtung kann nicht beinflusst werden. Der KeyListener wird nichtmal aufgerufen. Habe schon probiert mit System.out.println() zu testen ob die Methode ansprechbar ist. Hat nicht geklappt.
Diese Klasse startet das Spiel
Java:
package Snake;
import java.awt.Dimension;
import javax.swing.JFrame;
public class Spiel extends JFrame {
public SpielFeld spielFeld;
public Spiel() {
this.spielFeld = new SpielFeld();
this.add(this.spielFeld);
this.setSize(new Dimension(500,400));
this.setTitle("Snake Version 1.0");
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
this.setResizable(false);
this.setVisible(true);
}
/**
* Startes das Speil
*
* @param args Argumente die bei der Konsoleneingabe übergeben werden.
*/
public static void main(String[] args) {
new Spiel();
}
}
Die eigentliche Klasse wo das Spielabgebildet werden soll.
Java:
package Snake;
import java.awt.BorderLayout;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class SpielFeld extends JPanel {
private Snake snake;
private JLabel punkteAnzahl;
public SpielFeld() {
this.setLayout(new BorderLayout());
this.snake = new Snake();
this.snake.addKeyListener(new KeyHandler());
this.punkteAnzahl = new JLabel("Aktuelle Punkteanzahl: 0");
this.add(snake,BorderLayout.NORTH);
this.add(punkteAnzahl,BorderLayout.SOUTH);
}
private class KeyHandler extends KeyAdapter {
public void keyPressed(KeyEvent e) {
switch(e.getKeyCode()) {
case KeyEvent.VK_UP:
if(snake.getBlickrichtung() != Snake.SÜDEN) {
snake.setBlickrichtung(Snake.NORDEN);
break;
}
case KeyEvent.VK_RIGHT:
if(snake.getBlickrichtung() != Snake.WESTEN) {
snake.setBlickrichtung(Snake.OSTEN);
break;
}
case KeyEvent.VK_DOWN:
if(snake.getBlickrichtung() != Snake.NORDEN) {
snake.setBlickrichtung(Snake.SÜDEN);
break;
}
case KeyEvent.VK_LEFT:
if(snake.getBlickrichtung() != Snake.OSTEN) {
snake.setBlickrichtung(Snake.WESTEN);
break;
}
}
}
}
}
Diese Klasse stellt einen Punkt am Spielfeld dar.
Java:
package Snake;
public class Koordinate {
private int x,y;
public Koordinate() {
this(0,0);
}
public Koordinate(int x,int y) {
this.x = x;
this.y = y;
}
public int getX() {
return this.x;
}
public void setX(int x) {
this.x = x;
}
public int getY() {
return this.y;
}
public void setY(int y) {
this.y = y;
}
}
Dieser Thread ist dafür zuständig das sich die Schlange bewegt!
Java:
package Snake;
public class BewegungsThread extends Thread {
private Snake snake;
private boolean exitFlag;
private int geschwindigkeit;
public BewegungsThread(Snake snake) {
this.snake = snake;
this.exitFlag = false;
this.geschwindigkeit = 1;
}
public void setGeschwindigkeit(int geschwindigkeit) {
this.geschwindigkeit = geschwindigkeit;
}
public int getGeschwindigkeit() {
return this.geschwindigkeit;
}
public void setExitFlag(boolean exitFlag) {
this.exitFlag = exitFlag;
}
public boolean getExitFlag() {
return this.exitFlag;
}
public void run() {
while(!exitFlag) {
this.snake.updatePunkte();
try {
this.sleep(250*geschwindigkeit);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
Die gesamt GUI + Spielfeld
Java:
package Snake;
import java.awt.BorderLayout;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class SpielFeld extends JPanel {
private Snake snake;
private JLabel punkteAnzahl;
public SpielFeld() {
this.setLayout(new BorderLayout());
this.snake = new Snake();
this.snake.addKeyListener(new KeyHandler());
this.punkteAnzahl = new JLabel("Aktuelle Punkteanzahl: 0");
this.add(snake,BorderLayout.NORTH);
this.add(punkteAnzahl,BorderLayout.SOUTH);
}
private class KeyHandler extends KeyAdapter {
public void keyPressed(KeyEvent e) {
switch(e.getKeyCode()) {
case KeyEvent.VK_UP:
snake.setBlickrichtung(Snake.NORDEN);
break;
case KeyEvent.VK_RIGHT:
snake.setBlickrichtung(Snake.OSTEN);
break;
case KeyEvent.VK_DOWN:
snake.setBlickrichtung(Snake.SÜDEN);
break;
case KeyEvent.VK_LEFT:
snake.setBlickrichtung(Snake.WESTEN);
break;
}
}
}
}
Das Spiel ist bei weitem noch nicht fertig, aber ich will es erst schaffen das ich die Schlange durch Tastendruck nach links nach rechts usw. bewegen kann!
lg,
Rene
Zuletzt bearbeitet: