import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
public class Canvas extends JPanel implements Runnable {
private TheGame theGame;
private volatile boolean running = true;
private Graphics g;
private Image img;
public Canvas() {
setPreferredSize(new Dimension(GameData.BOARD_WIDTH * 10,GameData.BOARD_HEIGHT * 10));
setFocusable(true);
requestFocus();
addKeyListener(new KeyAdapter() {
@Override
public void keyPressed(KeyEvent ke) {
switch ( ke.getKeyCode() ) {
case KeyEvent.VK_UP :
theGame.setDirection(0);
break;
case KeyEvent.VK_LEFT :
theGame.setDirection(1);
break;
case KeyEvent.VK_DOWN :
theGame.setDirection(2);
break;
case KeyEvent.VK_RIGHT :
theGame.setDirection(3);
break;
}
}
});
}
public void startGame() {
theGame = new TheGame();
new Thread(this).start();
}
public void run() {
while ( running ) {
try {
theGame.mainLoop();
} catch (Exception e) {
running = false;
JOptionPane.showMessageDialog(null, e.getMessage(),"Game Over",JOptionPane.ERROR_MESSAGE);
System.exit(0);
}
render();
paintScreen();
try {
Thread.sleep(200);
} catch (Exception e) {
running = false;
e.printStackTrace();
}
}
}
private void render() {
if ( img == null ) {
img = createImage(GameData.BOARD_WIDTH * 10,GameData.BOARD_HEIGHT * 10);
g = img.getGraphics();
}
g.setColor(Color.BLACK);
g.fillRect(0, 0, GameData.BOARD_WIDTH * 10, GameData.BOARD_HEIGHT * 10);
g.setColor(Color.GREEN);
g.fillRect(theGame.getFood().x * 10, theGame.getFood().y * 10, 10, 10);
g.setColor(Color.RED);
g.fillRect(theGame.getHead().position.x * 10, theGame.getHead().position.y * 10, 10, 10);
g.setColor(Color.ORANGE);
SnakePart tail = theGame.getHead().getTail();
while ( tail != null ) {
g.fillRect(tail.position.x * 10, tail.position.y * 10, 10, 10);
tail = tail.getTail();
}
}
private void paintScreen() {
Graphics g;
try {
g = this.getGraphics();
g.drawImage(img, 0, 0, null);
g.dispose();
}
catch (Exception e) {
System.out.println("Graphics error: " + e);
}
}
}
|