Snake Spiel

Vancold

Aktives Mitglied
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

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:
S

SlaterB

Gast
Java:
public class TestGUI  extends JFrame {
    public TestGUI()   {
        JPanel p = new JPanel();
        p.addKeyListener(new KeyAdapter() {
                public void keyTyped(KeyEvent e)   {
                    System.out.println("key: " + e.getKeyChar());
                }
            });
        add(p);
        setSize(950, 300);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setVisible(true);
        p.requestFocus(); // !
    }

    public static void main(String[] args)  {
        new TestGUI();
    }
}
der Focus ist wichtig, allerdings eine vergängliche Sache mit nicht noch mehr komplizierten Befehlen,
evtl. sind KeyBindings verläßlicher, KeyListener ist eher für Textfelder & Co. gedacht
 

Vancold

Aktives Mitglied
Hey!

Der Code funktioniert irgendwie nicht. Ich brauch den KeyListener in der SpielFeldklasse, und da reagiert das Programm trotzdem nicht drauf.
Und wenn ichs wie dus mir vorgegeben hast einfach in ne Klasse packe eben TestGUI reagiert er auch nicht :S

Und KeyListener funktionieren auch bei normalen eingaben. ich hab das damals für mein Sudoku benutz da gings einwandfrei ;)



lg,

Rene
 
Zuletzt bearbeitet:
S

SlaterB

Gast
mein Code komplett kopiert funktioniert bei dir nicht? wenn doch und du dasselbe bei dir versuchst, dann poste den Code dazu,
wichtig ist z.B. dass der requestFocus()-Befehl NACH setVisible(true) steht

keyTyped() ist für Pfeiltasten sicherlich ungeeignet, fallst du das ausprobiert hast,
dein Listener ist da besser
 

Vancold

Aktives Mitglied
Naja bei mir ist das kein Frame sondern ein JPanel in dem ich den KeyListener reinhaue ;)

schaut inetwa so aus

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();
		snake.addKeyListener(new KeyHandler());
		snake.requestFocus();
		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;
						
					}
			
			}
			
		}
		
	}
	
}


ich bin etwas ratlos


lg,

Rene
 
S

SlaterB

Gast
Snake ist die einzige Klasse, die du bisher nicht gepostet hast, dafür SpielFeld 2x im ersten Post,
jetzt das dritte Mal, aber danach hatte ich ja auch gefragt und der Fehler ist nun erkennbar, ich hatte ihn auch schon benannt (!) :
requestFocus() steht im Konstruktor, lange vor setVisible(true)

in der Klasse Spiel in Zeile 19 kann es erst losgehen,
dort z.B. this.spielFeld.getSnake().requestFocus(); aufrufen, eine entspechende get-Methode vorausgesetzt
 

xehpuk

Top Contributor
Mal eine andere Sache nebenbei: Die
Code:
break
-Statements sollten aber wohl außerhalb der
Code:
if
-Abfragen stehen …
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
F Koordinieren und Essen von Snake - Spiel Spiele- und Multimedia-Programmierung 14
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
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
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
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
xFearofdarkness Feinde überlappen sich in Java Spiel Spiele- und Multimedia-Programmierung 3
ItundMathe1994 TicTacToe Spiel programmieren Spiele- und Multimedia-Programmierung 2
JEP1 Hilfe bei Spiel Spiele- und Multimedia-Programmierung 1
P Pokemon Spiel Funktioniert nicht ? Spiele- und Multimedia-Programmierung 3
Leon.tr3x Mein erstes Programm/Spiel Spiele- und Multimedia-Programmierung 10
O Texas Hold'em Poker als Online-Spiel mit Freunden Spiele- und Multimedia-Programmierung 5
Drachenbauer Speicher-Tool für ein Spiel schreiben Spiele- und Multimedia-Programmierung 13
M Spiel Mühle-Programmierung Java Spiele- und Multimedia-Programmierung 9
Excess Spiel abzugeben Spiele- und Multimedia-Programmierung 1
I Superhelden - Spiel Spiele- und Multimedia-Programmierung 14
E Hauptmenü und Spiel ???? Spiele- und Multimedia-Programmierung 2
L Sound in Java Spiel Spiele- und Multimedia-Programmierung 5
R Interaktives Spiel Spiele- und Multimedia-Programmierung 5
L Spiel im Editor testen Spiele- und Multimedia-Programmierung 4
Jackii dispatchUncaughtException in Quiz Spiel mit GUI Layout Spiele- und Multimedia-Programmierung 6
D Textbasiertes Spiel Spiele- und Multimedia-Programmierung 8
K Android Spiel Programmieren Spiele- und Multimedia-Programmierung 6
L BrickBreaker Spiel Spiele- und Multimedia-Programmierung 3
A Spiel Figur ansprechen und bewegen Spiele- und Multimedia-Programmierung 3
it_is_all Dialogbox im Spiel - Text in Blöcke aufteilen Spiele- und Multimedia-Programmierung 4
G Entity Verwaltung in einem 2D Spiel Spiele- und Multimedia-Programmierung 1
E Möchte Spiel Programmieren Spiele- und Multimedia-Programmierung 7
S Connect6 Spiel - Code in ei Spiele- und Multimedia-Programmierung 2
A Spiel nach Abfrage beenden oder neustarten Spiele- und Multimedia-Programmierung 1
G Welten Generierung 2D Spiel Spiele- und Multimedia-Programmierung 4
G Java 2D Spiel mit LWJGL verbinden Spiele- und Multimedia-Programmierung 1
N Problem mit 2D Spiel Spiele- und Multimedia-Programmierung 17
T Probleme bei "Pixel-Fighting"-Spiel: Unausgewogene Mannschaften??? Spiele- und Multimedia-Programmierung 4
R Pong Spiel Problem Spiele- und Multimedia-Programmierung 1
L Coordinate Space JavaFX 2d Spiel Spiele- und Multimedia-Programmierung 0
C Vier Gewinnt Spiel Programmiertipp Spiele- und Multimedia-Programmierung 11
N Jump and run Spiel - wo anfangen / weitermachen? Spiele- und Multimedia-Programmierung 11
K Spiel zum zuordnen von Dienstgraden und Dienstgradabzeichen Spiele- und Multimedia-Programmierung 5
M Textbasiertes Spiel programmieren Spiele- und Multimedia-Programmierung 4
T 2d-Spiel Licht Spiele- und Multimedia-Programmierung 5
S Jump 'n' Run-Spiel Kollisionserkennung Spiele- und Multimedia-Programmierung 3
T Spiel rendern Spiele- und Multimedia-Programmierung 2
Grevak Sounds im Spiel Spiele- und Multimedia-Programmierung 5
B Fehlerhafte Mob Bewegungen in Tower Defense Spiel Spiele- und Multimedia-Programmierung 2
F Spiel ähnlich wie SimCity/o.ä programmieren Spiele- und Multimedia-Programmierung 5
X Erklärung zu einem Tic Tac Toe Spiel Spiele- und Multimedia-Programmierung 1
I Spectator Modus für Spiel ähnlich zu Terraria Spiele- und Multimedia-Programmierung 8
I Textbasiertes Spiel - Umsetzungsfrage & Schleifen Problem Spiele- und Multimedia-Programmierung 26
M Kollisions abfrage bei 3D spiel? Spiele- und Multimedia-Programmierung 12
D JAVA Basiertes Spiel aus dem Internet in eigenem Client laden Spiele- und Multimedia-Programmierung 1
P [Spiel]Welche Bilder sind gleich Spiele- und Multimedia-Programmierung 2
E GUI zum Spiel hinzufügen Spiele- und Multimedia-Programmierung 19
S 2D Spiel - Physics Spiele- und Multimedia-Programmierung 16
S 2D Spiel "Der Sprung" Spiele- und Multimedia-Programmierung 7
A 2D Spiel ohne Tiles Spiele- und Multimedia-Programmierung 10
V welche vorgehensweise beforzieht ihr bei einfachem Quizz Spiel ? Spiele- und Multimedia-Programmierung 4
S Quaxli's Heli Spiel läuft nicht nach Plan Spiele- und Multimedia-Programmierung 2
G Methode sleepen während das Spiel weiterläuft Spiele- und Multimedia-Programmierung 3
T Spiel Überprüfung Spiele- und Multimedia-Programmierung 3
P Spiel laggt nach unbestimmter Zeit tierisch. Spiele- und Multimedia-Programmierung 27
S Hilfe bei Spiel Spiele- und Multimedia-Programmierung 6
B Hauptmenü für Spiel Spiele- und Multimedia-Programmierung 1
W Spiel ist langsam/laggt Spiele- und Multimedia-Programmierung 18
J Ascii Spiel Spiele- und Multimedia-Programmierung 1
Androbin Mein Spiel will sich nicht zeichnen lassen !!! Spiele- und Multimedia-Programmierung 7
O Vollständige Musik in Spiel einbauen (wav - Format) Spiele- und Multimedia-Programmierung 8
Y Quiz Spiel Spiele- und Multimedia-Programmierung 1
J Conways Spiel des Lebens nachprogrammiert Spiele- und Multimedia-Programmierung 1
B Spiel Programmieren, die Anfänge Spiele- und Multimedia-Programmierung 6
D [OpenGL] Spiel in der Art von Age of Empires Spiele- und Multimedia-Programmierung 4
lord239123 suche Graphiker für ein Pokemon-Spiel Spiele- und Multimedia-Programmierung 6
S Spiel installeren lassen und organisieren Spiele- und Multimedia-Programmierung 3
J Lichtupdate in tile-basiertem Spiel Spiele- und Multimedia-Programmierung 4
P Erstes Spiel (Strategie) Spiele- und Multimedia-Programmierung 31
J Mein erstes Spiel [Spielevorstellung] Spiele- und Multimedia-Programmierung 2
Bananabert Spiel Renderer Images und Strings Spiele- und Multimedia-Programmierung 4
N Spiel Menü error ! Spiele- und Multimedia-Programmierung 5
S Anfangsmenü mit Spiel verknüpfen Spiele- und Multimedia-Programmierung 16
S Spiel ruckelt trotz 50 fps Spiele- und Multimedia-Programmierung 16
D Spiel-Bilddaten auswerten Spiele- und Multimedia-Programmierung 7
Creylon [LWJGL] Spiel Exportieren Spiele- und Multimedia-Programmierung 2
L Hilfe bei Klassendesign für Spiel Spiele- und Multimedia-Programmierung 2
Devil0s Spiel laggt trotz 90 FPS (bei der Anzeige) Spiele- und Multimedia-Programmierung 9
N Webanwendung als eine Art Spiel Spiele- und Multimedia-Programmierung 8
L Korrekte Darstellung von Wasser in 2D Spiel Spiele- und Multimedia-Programmierung 4

Ähnliche Java Themen

Neue Themen


Oben