- 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; 
-          
-         Tank myTank = new Tank(50, 50, this); 
-         Missile m = null; 
-          
-         Image-  offScreenImage  = null;
 
-          
-                 if(m!=null) m.draw(g); 
-                 myTank.draw(g); 
-         } 
-          
-                 if(offScreenImage == null) { 
-                         offScreenImage = this.createImage(GAME_WIDTH, GAME_HEIGHT); 
-                 } 
-                 Graphics-  gOffScreen  =-  offScreenImage. getGraphics();
 
-                 Color-  c  =-  gOffScreen. getColor();
 
-                 gOffScreen. setColor(Color- . GREEN);
-                 gOffScreen.fillRect(0, 0, GAME_WIDTH, GAME_HEIGHT); 
-                 gOffScreen.setColor(c); 
-                 paint(gOffScreen); 
-                 g.drawImage(offScreenImage, 0, 0, null); 
-         } 
-   
-         public void lauchFrame() { 
-                 //this.setLocation(400, 300); 
-                 this.setSize(GAME_WIDTH, GAME_HEIGHT); 
-                 this.setTitle("TankWar"); 
-                         } 
-                 }); 
-                 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 { 
-                                         e.printStackTrace(); 
-                                 } 
-                         } 
-                 } 
-         } 
-          
-   
-                         myTank.keyReleased(e); 
-                 } 
-   
-                         myTank.keyPressed(e); 
-                 } 
-                  
-         } 
- } 
-   
-   
-   
- import java.awt.*; 
- import java.awt.event.*; 
-   
- public class Tank { 
-         public static final int XSPEED = 5; 
-         public static final int YSPEED = 5; 
-          
-         public static final int WIDTH = 30; 
-         public static final int HEIGHT = 30; 
-          
-         TankClient tc; 
-          
-         private int x, y; 
-          
-         private boolean bL=false, bU=false, bR=false, bD = false; 
-         enum Direction {L, LU, U, RU, R, RD, D, LD, STOP}; 
-          
-         private Direction dir = Direction.STOP; 
-         private Direction ptDir = Direction.D; 
-   
-         public Tank(int x, int y) { 
-                 this.x = x; 
-                 this.y = y; 
-         } 
-          
-         public Tank(int x, int y, TankClient tc) { 
-                 this(x, y); 
-                 this.tc = tc; 
-         } 
-          
-                 g.fillOval(x, y, WIDTH, HEIGHT); 
-                 g.setColor(c); 
-                  
-                 switch(ptDir) { 
-                 case L: 
-                         g.drawLine(x + Tank.WIDTH/2, y + Tank.HEIGHT/2, x, y + Tank.HEIGHT/2); 
-                         break; 
-                 case LU: 
-                         g.drawLine(x + Tank.WIDTH/2, y + Tank.HEIGHT/2, x, y); 
-                         break; 
-                 case U: 
-                         g.drawLine(x + Tank.WIDTH/2, y + Tank.HEIGHT/2, x + Tank.WIDTH/2, y); 
-                         break; 
-                 case RU: 
-                         g.drawLine(x + Tank.WIDTH/2, y + Tank.HEIGHT/2, x + Tank.WIDTH, y); 
-                         break; 
-                 case R: 
-                         g.drawLine(x + Tank.WIDTH/2, y + Tank.HEIGHT/2, x + Tank.WIDTH, y + Tank.HEIGHT/2); 
-                         break; 
-                 case RD: 
-                         g.drawLine(x + Tank.WIDTH/2, y + Tank.HEIGHT/2, x + Tank.WIDTH, y + Tank.HEIGHT); 
-                         break; 
-                 case D: 
-                         g.drawLine(x + Tank.WIDTH/2, y + Tank.HEIGHT/2, x + Tank.WIDTH/2, y + Tank.HEIGHT); 
-                         break; 
-                 case LD: 
-                         g.drawLine(x + Tank.WIDTH/2, y + Tank.HEIGHT/2, x, y + Tank.HEIGHT); 
-                         break; 
-                 } 
-                  
-                 move(); 
-         } 
-          
-         void move() { 
-                 switch(dir) { 
-                 case L: 
-                         x -= XSPEED; 
-                         break; 
-                 case LU: 
-                         x -= XSPEED; 
-                         y -= YSPEED; 
-                         break; 
-                 case U: 
-                         y -= YSPEED; 
-                         break; 
-                 case RU: 
-                         x += XSPEED; 
-                         y -= YSPEED; 
-                         break; 
-                 case R: 
-                         x += XSPEED; 
-                         break; 
-                 case RD: 
-                         x += XSPEED; 
-                         y += YSPEED; 
-                         break; 
-                 case D: 
-                         y += YSPEED; 
-                         break; 
-                 case LD: 
-                         x -= XSPEED; 
-                         y += YSPEED; 
-                         break; 
-                 case STOP: 
-                         break; 
-                 } 
-                  
-                 if(this.dir != Direction.STOP) { 
-                         this.ptDir = this.dir; 
-                 } 
-         } 
-          
-                 int key = e.getKeyCode(); 
-                 switch(key) { 
-                         tc.m = fire(); 
-                         break; 
-                         bL = true; 
-                         break; 
-                         bU = true; 
-                         break; 
-                         bR = true; 
-                         break; 
-                         bD = true; 
-                         break; 
-                 } 
-                 locateDirection(); 
-         } 
-          
-         void locateDirection() { 
-                 if(bL && !bU && !bR && !bD) dir = Direction.L; 
-                 else if(bL && bU && !bR && !bD) dir = Direction.LU; 
-                 else if(!bL && bU && !bR && !bD) dir = Direction.U; 
-                 else if(!bL && bU && bR && !bD) dir = Direction.RU; 
-                 else if(!bL && !bU && bR && !bD) dir = Direction.R; 
-                 else if(!bL && !bU && bR && bD) dir = Direction.RD; 
-                 else if(!bL && !bU && !bR && bD) dir = Direction.D; 
-                 else if(bL && !bU && !bR && bD) dir = Direction.LD; 
-                 else if(!bL && !bU && !bR && !bD) dir = Direction.STOP; 
-         } 
-   
-                 int key = e.getKeyCode(); 
-                 switch(key) { 
-                         bL = false; 
-                         break; 
-                         bU = false; 
-                         break; 
-                         bR = false; 
-                         break; 
-                         bD = false; 
-                         break; 
-                 } 
-                 locateDirection();               
-         } 
-          
-         public Missile fire() { 
-                 int x = this.x + Tank.WIDTH/2 - Missile.WIDTH/2; 
-                 int y = this.y + Tank.HEIGHT/2 - Missile.HEIGHT/2; 
-                 Missile m = new Missile(x, y, ptDir); 
-                 return m; 
-         } 
- } 
-   
-   
- import java.awt.*; 
-   
- public class Missile { 
-         public static final int XSPEED = 10; 
-         public static final int YSPEED = 10; 
-          
-         public static final int WIDTH = 10; 
-         public static final int HEIGHT = 10; 
-          
-         int x, y; 
-         Tank.Direction dir; 
-          
-         public Missile(int x, int y, Tank.Direction dir) { 
-                 this.x = x; 
-                 this.y = y; 
-                 this.dir = dir; 
-         } 
-          
-                 g.fillOval(x, y, WIDTH, HEIGHT); 
-                 g.setColor(c); 
-                  
-                 move(); 
-         } 
-   
-         private void move() { 
-                 switch(dir) { 
-                 case L: 
-                         x -= XSPEED; 
-                         break; 
-                 case LU: 
-                         x -= XSPEED; 
-                         y -= YSPEED; 
-                         break; 
-                 case U: 
-                         y -= YSPEED; 
-                         break; 
-                 case RU: 
-                         x += XSPEED; 
-                         y -= YSPEED; 
-                         break; 
-                 case R: 
-                         x += XSPEED; 
-                         break; 
-                 case RD: 
-                         x += XSPEED; 
-                         y += YSPEED; 
-                         break; 
-                 case D: 
-                         y += YSPEED; 
-                         break; 
-                 case LD: 
-                         x -= XSPEED; 
-                         y += YSPEED; 
-                         break; 
-                 case STOP: 
-                         break; 
-                 } 
-         } 
-          
-          
- } 
-