import java.awt.*; import java.awt.event.*; public class TankClient extends Frame { public static final int GAME_WIDTH=800; public static final int GAME_HEIGHT=600; int x = 50, y = 50; Image offScreenImage = null; public void paint(Graphics g) { Color c = g.getColor(); g.setColor(Color.RED); g.fillOval(x, y, 30, 30); g.setColor(c); } public void update(Graphics g) { if(offScreenImage == null) { offScreenImage = this.createImage(GAME_WIDTH, GAME_WIDTH); } Graphics gOffScreen = offScreenImage.getGraphics(); Color c = gOffScreen.getColor(); gOffScreen.setColor(Color.GREEN); gOffScreen.fillRect(0, 0, GAME_WIDTH, GAME_WIDTH); gOffScreen.setColor(c); paint(gOffScreen); g.drawImage(offScreenImage, 0, 0, null); } public void lauchFrame() { this.setLocation(400, 300); this.setSize(GAME_WIDTH, GAME_WIDTH); this.setTitle("TankWar"); this.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); this.setResizable(false); this.setBackground(Color.GREEN); this.addKeyListener(new KeyMonitor()); setVisible(true); new Thread(new PaintThread()).start(); } public static void main(String[] args) { TankClient tc = new TankClient(); tc.lauchFrame(); } private class PaintThread implements Runnable { public void run() { while(true) { repaint(); try { Thread.sleep(50); } catch (InterruptedException e) { e.printStackTrace(); } } } } private class KeyMonitor extends KeyAdapter { public void keyPressed(KeyEvent e) { System.out.println("ok"); int key=e.getKeyCode(); // if(key==KeyEvent.VK_RIGHT) // { // x +=5; // } switch(key) { case KeyEvent.VK_LEFT: x-=5; break; case KeyEvent.VK_UP: y-=5; break; case KeyEvent.VK_RIGHT: x+=5; break; case KeyEvent.VK_DOWN: y+=5; break; } } } }