Snake Punktezähler funktioniert nicht

SkonroX

Aktives Mitglied
Hallo,
ich habe mich mal an Snake versucht und es auch hinbekommen zu programmieren, jedoch hakt es bei mir mit der Punktezählung, habe einen Integer dafür gleich am anfang deklariert, bekomme jedoch wenn ich es ausgeben will nur den wert 0 zusehen (Im Spiel werden die Punkte in "echtzeit" angezeigt, funktioniert auch wunderbar, sogar wenn ich die Punkte am ende mit (JLabel-name in welchem die punkte gezählt werden).getText() anzeigen will geht es nicht, verstehe nicht wieso, bin dankbar für jede Hilfe!
[JAVA=42]
package Snake;
import javax.swing.SwingUtilities;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.Toolkit;
import java.util.Random;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JFrame;
//############################################################
public class Snake extends JFrame
{
private static final long serialVersionUID = 1L;
//------------------------------------------------
private JPanel jContentPane = null;
private JLabel JLabel = null;
//------------------------------------------------
public static Dimension dim = new Dimension(640, 480); // @jve:decl-index=0:
//------------------------------------------------
private static boolean up = false;
private static boolean left = false;
private static boolean right = true;
private static boolean down = false;
//------------------------------------------------
private Image snake_head; // @jve:decl-index=0:
private Image snake_body;
private Image apple; // @jve:decl-index=0:
//------------------------------------------------
private int laenge = 3;
//------------------------------------------------
private static Point[] lage = new Point[(int)(dim.getWidth()*dim.getHeight())/100];
private static Point apfel; // @jve:decl-index=0:
public int highscore = 0;
public int score = 0; //dekl des punktestandes
private JLabel jLabel = null;
private JLabel jLabel1 = null;
//############################################################
public static void main(String[] args)
{
SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
Snake thisClass = new Snake();
thisClass.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
thisClass.setVisible(true);
}
});
}
//############################################################
public void paint(Graphics g)
{
super.paint(g);
g.drawImage(snake_head, lage[0].x, lage[0].y, this);
Toolkit.getDefaultToolkit().sync();
g.drawImage(apple, apfel.x, apfel.y, this);
jLabel.setText("" + score);
Toolkit.getDefaultToolkit().sync();
for(int k = 1; k < laenge; k++)
{
g.drawImage(snake_body, lage[k].x, lage[k].y, this);
Toolkit.getDefaultToolkit().sync();
}
g.dispose();
try {Thread.sleep(150);}
catch (InterruptedException e) {e.printStackTrace();}
colli();
move();
repaint();
}
//############################################################
public Snake()
{
super();
initialize();
}
//############################################################
private void colli()
{
if(lage[0].x == apfel.x && lage[0].y == apfel.y)
{
laenge++;
score++; //hochzaehlen des Punktestandes
applen();
}
if(lage[0].x > dim.getWidth() || lage[0].y > dim.getHeight() || lage[0].x < 0 || lage[0].y < 0)
{
if(score > highscore)
{
score = highscore;
}
JOptionPane.showMessageDialog(null, "GameOver! \n Score: " + score + "\n Highscore: " + highscore); //Hier soll es eigentlich ausgeben werden, dennoch highscore und score = 0!
}
for(int i = 1; i < laenge; i++)
{
if(lage.x == lage[0].x && lage.y == lage[0].y)
{
if(score > highscore)
{
score = highscore;
}
JOptionPane.showMessageDialog(null, "GameOver! \n Score: " + score + "\n Highscore: " + highscore); //Hier soll es eigentlich ausgeben werden, dennoch highscore und score = 0!
}
}
}
//############################################################
private void applen()
{
Random rndm = new Random();
int zahlx = 17 + rndm.nextInt(36) * 17;
int zahly = 34 + rndm.nextInt(26) * 17;
apfel = new Point(zahlx, zahly);
}
//############################################################
private void initialize()
{
this.setSize(dim);
this.setContentPane(getJContentPane());
this.setTitle("Snake");
for(int i=0; i<lage.length; i++)
{
lage = new Point(0,0);
}
lage[0].move(170,238);
lage[1].move(153,238);
lage[2].move(136,238);
graphics();
applen();
//------------------------------------------------
this.addKeyListener(new java.awt.event.KeyListener()
{
public void keyPressed(java.awt.event.KeyEvent e)
{
//------------------------------------------------
if (e.getKeyChar() == 'a' && right == false && e.getKeyChar() != 'd')
{
up = false;
left = true;
down = false;
}
//------------------------------------------------
if(e.getKeyChar() == 'd' && left == false && e.getKeyChar() != 'a')
{
up = false;
right = true;
down = false;
}
//------------------------------------------------
if(e.getKeyChar() == 'w' && down == false && e.getKeyChar() != 's')
{
up = true;
left = false;
right = false;
}
//------------------------------------------------
if(e.getKeyChar() == 's' && up == false && e.getKeyChar() != 'w')
{
left = false;
right = false;
down = true;
}
//------------------------------------------------
if(e.getKeyChar() == 'r')
{
initialize();
}
//------------------------------------------------
}
public void keyTyped(java.awt.event.KeyEvent e) {}
public void keyReleased(java.awt.event.KeyEvent e) {}
});
repaint();
}
//############################################################
private void move()
{
for(int i = laenge; i > 0; i--)
{
lage.x = lage[i-1].x;
lage.y = lage[i-1].y;
}
if(up) {lage[0].y = lage[0].y - 17;}
if(left) {lage[0].x = lage[0].x - 17;}
if(right) {lage[0].x = lage[0].x + 17;}
if(down) {lage[0].y = lage[0].y + 17;}
}
//############################################################
private void graphics()
{
ImageIcon sh = new ImageIcon("C:\\Users\\Eugen\\Schule\\Programmieren\\workspace\\Anschaungsmaterial\\head.png");
snake_head = sh.getImage();
ImageIcon sb = new ImageIcon("C:\\Users\\Eugen\\Schule\\Programmieren\\workspace\\Anschaungsmaterial\\body.png");
snake_body = sb.getImage();
ImageIcon ap = new ImageIcon("C:\\Users\\Eugen\\Schule\\Programmieren\\workspace\\Anschaungsmaterial\\apple.png");
apple = ap.getImage();
}
//############################################################
private JPanel getJContentPane()
{
if (jContentPane == null)
{
jLabel1 = new JLabel();
jLabel1.setBounds(new Rectangle(524, 8, 47, 21));
jLabel1.setText("Punkte:");
jLabel1.setForeground(Color.red);
jLabel = new JLabel();
jLabel.setBounds(new Rectangle(579, 8, 34, 20));
jLabel.setForeground(Color.RED);
jContentPane = new JPanel();
jContentPane.setBackground(Color.BLACK);
jContentPane.setLayout(null);
jContentPane.add(jLabel, null);
jContentPane.add(jLabel1, null);
}
return jContentPane;
}
}
[/code]
 
Java:
if(score > highscore) {
    highscore = score;
}

So wird ein Schuh draus. Am Anfang ist highscore gleich 0, und jedesmal wenn score größer ist (also immer), wird er in deiner Version auf highscore (also wieder 0) gesetzt.
 
Nein gerade nicht, es wird ja erst nach der bedingung gefragt, wenn man gameover ist, und es wird dann nicht gleich 0, sondern für highscore (falls es ein neuer ist) wird der score dann eingesetzt.

mfg
 
Doch, Landei hat recht:

Java:
if(score > highscore)
{
	System.out.println(score);
	score = highscore;
	System.out.println(score);
}
Code:
1
0

btw. man sollte wenn schon nur den relativen und niemals den absoluten Pfad eines Bildes angeben.

Edit: Das definiert "langsam" neu. 🙁
 
Mensch das war nur ein versuch ob ich es wirklich schaffe ein spiel zu programmieren (war mein erstes) und war ja immerhin erfolgreich ;P
Und 241 Zeilen Quelltext finde ich ja jetzt nicht sooo tragisch ;D
 
Ja, und für einen absoluten Neuling finde ich es garnicht schlecht. Als nächstes könntest du versuchen die Schlange in eine andere Klasse auszulagen und zu einen Thread zu machen. Errinnert mich an mein erste Projekt.
Eventuell auch mehrere Wände, und zufällige Items, nicht nur Äpfel und kurz erscheinende Bonusitems.
 

Zurück
Oben