Snake ...Problem

T

Thorse

Gast
Ich bin gerade dabei eine Art Snake zu programmieren, dabei habe ich folgendes Problem :
Eigentlich soll zuerst das Spielfeld gezeichnet werden und dann die Punkte.
Doch dadurch das die Punkte gezeichnet werden wird das Spielfeld (das Rechteck) "gelöscht".
Sieht vll jmd vion euch den Fehler:
Java:
import java.awt.Color;
import java.awt.Graphics; //x+8 //y+28
import java.awt.event.*;
import java.util.Random;

import javax.swing.JFrame;




public class Snake extends JFrame implements KeyListener
{
	
	private static final long serialVersionUID = 3800165321162121122L;
 
	Color schwarz = new Color( 0, 0, 0 );
	Random rand = new Random();

	String pcom;
	String com;
	String comnext=new String("r");
	int lifes = 4;
	int s = 100;
	int dots = 3; 
	int points=0;
	Boolean equal=false;
	Boolean got=true;
	
	int[]xvals=new int[20];
	int[]yvals=new int[30];
	
	int i;
	int e=0;
	
	int x1 = 13;
	int y1 = 33;
	int xl = 4000;
	int yl = 4000;
	int xg;
	int yg;
	int fx=0;
	int fy=0;
 Snake()
 {
	  	setSize(425,360); //x + 2x8Framerand + 2x5Spielfeld
	 					  //y+28+8 Framerand + 2x5 Spielfeld
	 	setVisible(true);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBackground(schwarz);
	    addKeyListener(this);
	    
 }

 public void keyPressed(KeyEvent ev)
 {
	 if(ev.getKeyCode()==KeyEvent.VK_LEFT && com.equals("r")==false)
		{comnext = "l";}
	 if(ev.getKeyCode()==KeyEvent.VK_RIGHT && com.equals("l")==false)
	    {comnext = "r";}
	 if(ev.getKeyCode()==KeyEvent.VK_UP && com.equals("d")==false)
	 	{comnext = "u";}
	 if(ev.getKeyCode()==KeyEvent.VK_DOWN && com.equals("u")==false)
	 	{comnext = "d";}

	 
 }
 public void keyTyped (KeyEvent ev)
 {
	 if(ev.getKeyCode()==KeyEvent.VK_LEFT && com.equals("r")==false)
		{comnext = "l";}
	 if(ev.getKeyCode()==KeyEvent.VK_RIGHT && com.equals("l")==false)
	    {comnext = "r";}
	 if(ev.getKeyCode()==KeyEvent.VK_UP && com.equals("d")==false)
	 	{comnext = "u";}
	 if(ev.getKeyCode()==KeyEvent.VK_DOWN && com.equals("u")==false)
	 	{comnext = "d";}
 }
 public void keyReleased (KeyEvent ev){}

 public void paint( Graphics g )
 {
	 if(pcom.equals("flash"))
	 {
		 g.setColor(new Color(0,0,0));
		 g.fillRect(8, 28, 450, 350);
		 g.setColor(Color.GRAY);
		 g.drawRect(8, 28, 408, 303);
		 g.drawRect(9, 29, 406, 301);
		 g.drawRect(10, 30, 404, 299);
	 }
	 if(pcom.equals("score"))
	 {
		 g.setColor(Color.WHITE);
		 g.drawString("Score "+points,30,345);
	 }
	 
	 if(pcom.equals("loop"))
	 {
		 g.setColor(new Color(255,0,0));
		 g.fillRect(xg, yg, 5, 5);
		 g.setColor(new Color(0,0,0));
		 g.fillRect(xvals[0], yvals[0], 5, 5);
		 g.setColor(new Color(rand.nextInt(256),rand.nextInt(256),rand.nextInt(256)));
		 g.fillRect( x1, y1, 5, 5);
	 }
 }
 void draw(String c)
 {
	pcom=c;
	repaint();
 }
 public void start()throws Exception
 {
	 
	 draw("flash");
	 draw("score");
	 

	 while(lifes!=0)
	 {
	   while(dots<=15)
	   {
       Thread.sleep(s);
       xvals[dots]=x1;
       yvals[dots]=y1;
       
	   com = comnext;
	   if(com.equals("l"))
		   x1=x1-7;
	   if(com.equals("r"))
		   x1=x1+7;
	   if(com.equals("u"))
		   y1=y1-7;
	   if(com.equals("d"))
		   y1=y1+7;
	   
	   if(x1==xg&&y1==yg)
	   {
		   got=true;
		   dots++;
	   }
	   
	   i = 0;
	   while(i<dots)
	   {
		   xvals[i]=xvals[i+1];
		   yvals[i]=yvals[i+1];
		   i++;
	   }
	   if(got==true)
	   {	
		   equal=true;
		   while(equal==true)
		   {	
			   equal=false;
			   xg=13+(rand.nextInt(57)*7);
			   yg=33+(rand.nextInt(42)*7);
			   while(e<=dots)
			   {
				   if(xg==xvals[e]&&yg==yvals[e])
					   equal=true;
				   e++;
			   }
			   e=0;
			   
		   }
		   got=false;
		   points++;
		   draw("score");
	   }
	   draw("loop");
	   }
	   dots=3;
	   s-=50;
	   x1=13;
	   y1=33;
	   comnext="r";
	   draw("flash");
	   
	 }

 }
 
}
 
G

Gast2

Gast
Zwei sachen:
- in Swing die paintComponent methode überschreiben, nicht die paint.
- die paintComponent Methode des JFrames nicht überschreiben, mal dein Zeug besser in nen JPanel

Evtl. löst das auch schon dein problem.

PS:
Ich würde die Punkte nicht unbedingt reinmalen per drawString.
Pack dir oben nen JPanel rein wo du JLabels drin hast die die scores anzeigen.
 
T

Thorse

Gast
ich versteh jetzt nicht ganz was mit "mal dein zeug lieber in ein Jpanel" gemeint ist?

dass ich am anfagng ein großes jpanel zeichnen soll ??
 
S

SlaterB

Gast
was ist das allererste was einem Lehrbuch zum Zeichnen in JFrame einfällt zu sagen?
Galileo Computing :: Java ist auch eine Insel – 20 Grafikprogrammierung

20.1.2 Zeichnen von Inhalten auf ein JFrame Zur nächsten Überschrift
Wenn Swing eine Komponente zeichnet, ruft es automatisch die Methode paint() auf. Um eine Grafik selbst in ein Fenster zu zeichnen, ließe sich von JFrame eine Unterklasse bilden und paint() überschreiben – das ist jedoch nicht der übliche Weg.

Stattdessen wählen wir einen anderen Ansatz, der sogar unter AWT eine gute Lösung ist. Wir bilden eine eigene Komponente, eine Unterklasse von JPanel [..]
die Formulierung ist noch geschönt, einfach 'paint in JFrame == bäh', fertig, und genau das hast du eingebaut,
wie es immer nur zu sowas kommt?

gleich noch den anderen noch häufigeren Merksatz: nie getGraphics() aufrufen!
 
T

Thorse

Gast
Also ich hab jetzt mal ein Panel eingefügt das einfach mal Schwarz ist.
Das hat schon mal den Fehler behoben das manchmal bei Starten der Programms der Hintergrund nicht schwarz sondern grau war.

Aber leider passiert außer einem schwarzen Frame auch weiter nix.

Könnte mir vielleicht mal ganz grob jemand erklären wie das mit paintComponent() und @overwrite funktioniert?
Ich hab echt schon viel gegooglet aber nicht wirklich was gefunden.
 
S

SlaterB

Gast
ich habe doch einen Link zu einem Lehrbuch gepostet, eines der ersten Code-Spiele für JFrame (nach dem von mir zitierten wichtigen Text) enthält dort
Java:
class DrawPanel extends JPanel
{
  @Override
  protected void paintComponent( Graphics g )
  {
    super.paintComponent( g );
    g.drawLine( 10, 10, 100, 50 );
  }
}
?!?!

wenn was bei dir nicht funktioniert, dann weichst du bestimmt vom Standard ab,
z.B. könnte das Panel ganz klein sein wenn es nicht BorderLayout maximiert wird,
setPreferredSize() könnte dann helfen,
immer Code posten
 
T

Thorse

Gast
Das habe ich mir ja auch angesehen, aber ich weiß nicht was ich dann mit dieser Klasse machen soll, wie ich sie dem Frame hinzufüge und wie ich sie dann neu zeichne ...
 
S

SlaterB

Gast
oh, nach 2 Min. eine Antwort und von mir jetzt erst nach 7 Stunden,
sonst meist andersrum ;)

also Einfügen an sich wäre logischerweise das nächste Codebeispiel nur wenige Zeilen darunter,
aber repaint(), komplette Steuerung usw., das findet man natürlich nicht überall, das stimmt

wobei deine Variante erstmal bestimmt passt, repaint() ist repaint(), egal wo nun die paintComponent() überschrieben ist,
noch ein Link:
http://www.ralf-bauer.org/java/tutorial/Tutorial.zip
 
T

Thorse

Gast
Ja erst nach 7 Stunden.. schäm dich was!
:D

Danke für das tolle Tutorial.
Und... Thanks for your support. ;)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
L Snake in Java KeyListener Problem AWT, Swing, JavaFX & SWT 30
X Snake - Spiel AWT, Swing, JavaFX & SWT 27
V Snake - Spielverlauf nicht flüssig AWT, Swing, JavaFX & SWT 11
eQuest Swing Snake repaint() "flackern" AWT, Swing, JavaFX & SWT 13
J Snake AWT, Swing, JavaFX & SWT 4
Juelin Problem mit TextField.requestFocus(); AWT, Swing, JavaFX & SWT 17
Juelin Problem beim Laden Controller AWT, Swing, JavaFX & SWT 2
G Problem mit der Anzeige von jLabel. Unlesbar wenn der Text geändert wird. AWT, Swing, JavaFX & SWT 28
H 2D-Grafik Problem mit Paint AWT, Swing, JavaFX & SWT 1
S Layout - Problem AWT, Swing, JavaFX & SWT 1
Tassos JavaFX/Problem mit der Maussteuerung in Stackpane AWT, Swing, JavaFX & SWT 7
sserio Java Fx - Problem AWT, Swing, JavaFX & SWT 3
A Problem Spiel auf Panel der GUI zu bringen AWT, Swing, JavaFX & SWT 1
A JavaFX Controller Problem AWT, Swing, JavaFX & SWT 1
TheWhiteShadow JavaFX ListView Problem beim Entfernen von Elementen AWT, Swing, JavaFX & SWT 1
E LayoutManager Welcher Layout-Mix löst mein Problem? AWT, Swing, JavaFX & SWT 3
Umb3rus JavaFX Problem mit PropertyValueFactory: can not read from unreadable property AWT, Swing, JavaFX & SWT 1
T Problem mit paintComponent() AWT, Swing, JavaFX & SWT 17
AmsananKING Java Menü-Problem AWT, Swing, JavaFX & SWT 1
K JavaFX Resizing-Problem beim BorderLayout (Center Component) beim Arbeiten mit mehreren FXMLs AWT, Swing, JavaFX & SWT 2
G Instance OF Problem AWT, Swing, JavaFX & SWT 9
FrittenFritze Ein Problem mit der CSSBox, die Größe wird nicht angepasst AWT, Swing, JavaFX & SWT 5
M Problem mit dem Anzeigen von Frames im Vordergrund AWT, Swing, JavaFX & SWT 5
Badebay Problem mit JButton AWT, Swing, JavaFX & SWT 2
newJavaGeek Grid-Layout problem AWT, Swing, JavaFX & SWT 7
J JavaFX Löschen im Tabelview macht Problem AWT, Swing, JavaFX & SWT 15
JavaTalksToMe JavaFx ExekutorService Problem AWT, Swing, JavaFX & SWT 2
Zrebna Problem bei Eventhandling (Value soll nach jedem erneutem Klick gelöscht werden) AWT, Swing, JavaFX & SWT 4
B Problem mit JavaFX AWT, Swing, JavaFX & SWT 5
J css Problem AWT, Swing, JavaFX & SWT 5
B JavaFX habe mein Problem fett markiert AWT, Swing, JavaFX & SWT 2
A Swing Filter-Problem AWT, Swing, JavaFX & SWT 1
temi JavaFX Problem mit IntelliJ und JavaFx 11 unter XUbuntu AWT, Swing, JavaFX & SWT 3
L Java FX Problem mit Ubuntu 18 und JavaFx AWT, Swing, JavaFX & SWT 27
H JTable TableCellEditor-Problem AWT, Swing, JavaFX & SWT 0
kodela Swing Problem mit Warten-Dialog AWT, Swing, JavaFX & SWT 16
B JavaFx Scene Builder Problem AWT, Swing, JavaFX & SWT 2
B [Problem] Java öffnet Word-Datein nicht AWT, Swing, JavaFX & SWT 14
T DataBinding Problem AWT, Swing, JavaFX & SWT 5
Blender3D Problem mit € Symbol Font Gotham Windows 10 Swing AWT, Swing, JavaFX & SWT 11
T Problem mit JTable Sortierung AWT, Swing, JavaFX & SWT 2
J Problem mit Platfrom run later AWT, Swing, JavaFX & SWT 15
J Problem mit Platfrom run later AWT, Swing, JavaFX & SWT 0
D Swing SwingUtils / Thread Problem AWT, Swing, JavaFX & SWT 3
L JavaFX Problem beim Aufrufen einer Methode AWT, Swing, JavaFX & SWT 5
T Swing Problem mit Datum und FormattedTextField AWT, Swing, JavaFX & SWT 2
S AWT Java print dialog Problem AWT, Swing, JavaFX & SWT 0
olfibits JavaFX Problem mit HTMLEditor AWT, Swing, JavaFX & SWT 0
W SWT hover-background-problem with first column in TreeViewer AWT, Swing, JavaFX & SWT 0
M Problem mit Add JScrollPane AWT, Swing, JavaFX & SWT 25
Mario1409 Swing JTextArea scroll Problem AWT, Swing, JavaFX & SWT 0
N Swing Problem mit loop AWT, Swing, JavaFX & SWT 2
S Swing Problem mit Button und ActionListener AWT, Swing, JavaFX & SWT 5
S Swing & Clean und build Problem AWT, Swing, JavaFX & SWT 12
S JLabel setText() Problem AWT, Swing, JavaFX & SWT 6
I 2D-Grafik Problem beim Ändern der Farbe eine 2d Objekts AWT, Swing, JavaFX & SWT 3
G Swing Splitpane Problem AWT, Swing, JavaFX & SWT 1
F Problem mit der FXML Rectangle Shape AWT, Swing, JavaFX & SWT 2
N JavaFX Stranges Problem mit der Autoscroll-Eigenschaft von Textareas AWT, Swing, JavaFX & SWT 0
E Java FX FXML Problem mit html Scriptausführung AWT, Swing, JavaFX & SWT 2
J JavaFX Intersect Problem mit Shapes AWT, Swing, JavaFX & SWT 10
R JavaFX MediaPlayer AVI-Problem AWT, Swing, JavaFX & SWT 1
M Swing Problem mit ListCellRenderer AWT, Swing, JavaFX & SWT 7
D Problem mit JTable AWT, Swing, JavaFX & SWT 1
F GUI Auflösung ändern - Koordianten und Proportions Problem AWT, Swing, JavaFX & SWT 21
J Problem mit Button darstellung AWT, Swing, JavaFX & SWT 23
M Problem mit Layoutmanagern... Hilfe wäre sehr nett. AWT, Swing, JavaFX & SWT 2
S 2D-Grafik Problem mit Variablen AWT, Swing, JavaFX & SWT 4
7 JavaFX Problem beim Zeichnen eines Dreiecks in einem GUI AWT, Swing, JavaFX & SWT 6
M Swing AttributiveCellTableModel addRow() Problem AWT, Swing, JavaFX & SWT 1
J Swing Problem mit Graphics Methode AWT, Swing, JavaFX & SWT 4
N JavaFX Problem mit table multiple selection AWT, Swing, JavaFX & SWT 5
K CheckBox Problem AWT, Swing, JavaFX & SWT 5
Grevak DisplayMode Problem seit Windows 10 AWT, Swing, JavaFX & SWT 2
S Swing Eigene JComboBox Problem! AWT, Swing, JavaFX & SWT 1
B Swing Problem mit Bildpfad AWT, Swing, JavaFX & SWT 4
N Swing Problem beim Scrollen mit JScrollPane AWT, Swing, JavaFX & SWT 6
V Graphics g - drawOval problem mit background AWT, Swing, JavaFX & SWT 1
C AWT Problem mit Protokol Fenster AWT, Swing, JavaFX & SWT 0
M Swing pack() Problem mit Taskleiste AWT, Swing, JavaFX & SWT 4
N Swing Choice- Problem! AWT, Swing, JavaFX & SWT 8
Q "AWT-EventQueue-0" Exception Problem AWT, Swing, JavaFX & SWT 4
D jButton Problem, ein Rieser Button bedeckt das ganze frame AWT, Swing, JavaFX & SWT 1
A Problem: repaint() - Schleife AWT, Swing, JavaFX & SWT 3
J Anfänger GUI Problem bei der Ausführung eines sehr einfachen Programms AWT, Swing, JavaFX & SWT 2
P AWT Problem mit Platzierung (GridBagLayout) AWT, Swing, JavaFX & SWT 2
N Swing JTree Problem beim erstellen der Knoten AWT, Swing, JavaFX & SWT 0
N Swing CardLayout: Problem beim Wechsel zwischen den JPanels AWT, Swing, JavaFX & SWT 3
A Mini-Menu-Schriften. Ein Problem bei hohen DPI Zahlen AWT, Swing, JavaFX & SWT 2
Z Canvas in Frame einfügen. Problem mit 4-Gewinnt AWT, Swing, JavaFX & SWT 1
C Thread-/ Simulations- Problem AWT, Swing, JavaFX & SWT 18
G Swing Setvisible problem AWT, Swing, JavaFX & SWT 1
J JTabbedPane: close Button Problem AWT, Swing, JavaFX & SWT 2
Tom299 JavaFX -> fxmlLoader -> getResourceAsStream Problem AWT, Swing, JavaFX & SWT 1
T Problem: ComboBox und addItem AWT, Swing, JavaFX & SWT 5
M JTextArea wird nicht aktualisiert (ActionListener-Problem) AWT, Swing, JavaFX & SWT 1
T LayoutManager LookAndFeel-Problem AWT, Swing, JavaFX & SWT 4
F Problem mit Implementierung von Kollisionsabfrage AWT, Swing, JavaFX & SWT 5
vodkaz (javafx) Image Problem AWT, Swing, JavaFX & SWT 2
T Problem beim Zeichnen von Rechteck AWT, Swing, JavaFX & SWT 3

Ähnliche Java Themen


Oben