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]
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]