Ich habe hier mal was probiert, ist aber noch längst nicht fertig:
Nur wenn man hoch und breit höher stellt fängt es schon an nichtmehr ganz so flüssig zu laufen! Dabei laufen solche ähnlichen Spiele sogar auf einem schlechten Handy gut. Das heißt ich habe es ziemlich blöd programmiert! Könnt ihr mir helfen und sagen wo ich die vielen Systemressourcen klaue und wie ich daqs umgehen kann?
Code:
import java.awt.Color;
import java.awt.Container;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.geom.Rectangle2D;
import java.awt.image.BufferedImage;
import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class test09 extends JPanel implements KeyListener {
static test09 panel;
int hoch = 20;
int breit = 20;
int lang = 19;
int richtung = 0;
static boolean an = true;
Point[] schlange = new Point[lang];
test09() {
addKeyListener(this);
for (int i = 0; i < lang; i++)
schlange[i] = new Point(i, 0);
}
void weiter(Point p) {
for (int i = 0; i < lang - 1; i++)
schlange[i] = new Point((int) schlange[i + 1].getX(),
(int) schlange[i + 1].getY());
schlange[lang - 1] = new Point((int) p.getX(), (int) p.getY());
}
void move() {
Point p = new Point(0, 0);
if (richtung == 0)
p = new Point((int) schlange[lang - 1].getX() + 1,
(int) schlange[lang - 1].getY());
if (richtung == 1)
p = new Point((int) schlange[lang - 1].getX(),
(int) schlange[lang - 1].getY() + 1);
if (richtung == 2)
p = new Point((int) schlange[lang - 1].getX() - 1,
(int) schlange[lang - 1].getY());
if (richtung == 3)
p = new Point((int) schlange[lang - 1].getX(),
(int) schlange[lang - 1].getY() - 1);
p = new Point(((int) p.getX() + breit) % breit, ((int) p.getY() + hoch)
% hoch);
for (int i = 0; i < lang; i++)
if (schlange[i].getX() == p.getX()
&& schlange[i].getY() == p.getY())
an = false;
if (an)
weiter(p);
repaint();
}
protected void paintComponent(Graphics g) {
BufferedImage bild = new BufferedImage(breit * 10, hoch * 10,
BufferedImage.TYPE_INT_RGB);
Graphics2D gr = (Graphics2D) bild.getGraphics();
gr.setColor(Color.BLUE);
gr.fill(new Rectangle2D.Double(0, 0, breit * 10, hoch * 10));
gr.setColor(Color.YELLOW);
for (int i = 0; i < lang; i++) {
gr.fill(new Rectangle2D.Double(schlange[i].getX() * 10, schlange[i]
.getY() * 10, 10, 10));
}
g.drawImage(bild, 0, 0, this);
}
public static void main(String args[]) {
JFrame f = new JFrame("Snake");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setSize(600, 600);
Container con = f.getContentPane();
panel = new test09();
panel.setBorder(BorderFactory.createEtchedBorder(Color.black,
Color.blue));
con.add("Center", panel);
con.add(panel);
f.setVisible(true);
panel.requestFocus();
lauf t = panel.new lauf();
t.start();
}
class lauf extends Thread {
public void run() {
while (an) {
try {
Thread.sleep(30);
} catch (InterruptedException e) {
interrupt();
}
panel.move();
}
}
}
public void keyTyped(KeyEvent arg0) {
}
public void keyPressed(KeyEvent arg0) {
if (arg0.getKeyCode() == KeyEvent.VK_LEFT && richtung != 0)
richtung = 2;
if (arg0.getKeyCode() == KeyEvent.VK_RIGHT && richtung != 2)
richtung = 0;
if (arg0.getKeyCode() == KeyEvent.VK_DOWN && richtung != 3)
richtung = 1;
if (arg0.getKeyCode() == KeyEvent.VK_UP && richtung != 1)
richtung = 3;
move();
}
public void keyReleased(KeyEvent arg0) {
};
}
Nur wenn man hoch und breit höher stellt fängt es schon an nichtmehr ganz so flüssig zu laufen! Dabei laufen solche ähnlichen Spiele sogar auf einem schlechten Handy gut. Das heißt ich habe es ziemlich blöd programmiert! Könnt ihr mir helfen und sagen wo ich die vielen Systemressourcen klaue und wie ich daqs umgehen kann?