[Java] 让主战坦克向8个方向行走 →→→→→进入此内容的聊天室

来自 , 2019-08-01, 写在 Java, 查看 122 次.
URL http://www.code666.cn/view/55c567fd
  1. import java.awt.*;
  2. import java.awt.event.*;
  3.  
  4. public class TankClient extends Frame {
  5.        
  6.         public static final int GAME_WIDTH=800;
  7.         public static final int GAME_HEIGHT=600;
  8.        
  9.     Tank myTank =new Tank(50,50);
  10.        
  11.         Image offScreenImage = null;
  12.        
  13.         public void paint(Graphics g) {
  14.  
  15.                 myTank.draw(g);//理解一下面向对象
  16.         }
  17.        
  18.         public void update(Graphics g) {
  19.                 if(offScreenImage == null) {
  20.                         offScreenImage = this.createImage(GAME_WIDTH, GAME_WIDTH);
  21.                 }
  22.                 Graphics gOffScreen = offScreenImage.getGraphics();
  23.                 Color c = gOffScreen.getColor();
  24.                 gOffScreen.setColor(Color.GREEN);
  25.                 gOffScreen.fillRect(0, 0, GAME_WIDTH, GAME_WIDTH);
  26.                 gOffScreen.setColor(c);
  27.                 paint(gOffScreen);
  28.                 g.drawImage(offScreenImage, 0, 0, null);
  29.         }
  30.  
  31.         public void lauchFrame() {
  32.                 this.setLocation(400, 300);
  33.                 this.setSize(GAME_WIDTH, GAME_WIDTH);
  34.                 this.setTitle("TankWar");
  35.                 this.addWindowListener(new WindowAdapter() {
  36.                         public void windowClosing(WindowEvent e) {
  37.                                 System.exit(0);
  38.                         }
  39.                 });
  40.                 this.setResizable(false);
  41.                 this.setBackground(Color.GREEN);
  42.                
  43.                 this.addKeyListener(new KeyMonitor());
  44.                
  45.                 setVisible(true);              
  46.                 new Thread(new PaintThread()).start();
  47.         }
  48.  
  49.         public static void main(String[] args) {
  50.                 TankClient tc = new TankClient();
  51.                 tc.lauchFrame();
  52.         }
  53.        
  54.         private class PaintThread implements Runnable {
  55.  
  56.                 public void run() {
  57.                         while(true) {
  58.                                 repaint();
  59.                                 try {
  60.                                         Thread.sleep(50);
  61.                                 } catch (InterruptedException e) {
  62.                                         e.printStackTrace();
  63.                                 }
  64.                         }
  65.                 }
  66.         }
  67.  
  68.         private class KeyMonitor  extends KeyAdapter
  69.         {
  70.  
  71.  
  72.                 public void keyReleased(KeyEvent e) {
  73.  
  74.                 myTank.keyReleased(e);
  75.                 }
  76.  
  77.                 public void keyPressed(KeyEvent e) {
  78.  
  79.                         System.out.println("ok");
  80.                        
  81.             myTank.keyPressed(e);
  82.                 }
  83.                
  84.         }
  85.  
  86. }
  87.  
  88.  
  89.  
  90. import java.awt.*;
  91. import java.awt.event.*;
  92. public class Tank {
  93.  
  94. public static final int XSPEED =5;
  95. public static final int YSPEED =5;
  96.  
  97. private int x,y;
  98. private boolean bL=false,bU=false,bR=false,bD=false;
  99.  
  100. enum Direction{L,LU,U,RU,R,RD,D,LD,STOP};
  101. private Direction dir=Direction.STOP;  
  102.        
  103.        
  104.         public Tank(int x, int y) {
  105.                 this.x = x;
  106.                 this.y = y;
  107.         }
  108.  
  109.         public void draw(Graphics g)
  110.         {
  111.                 Color c = g.getColor();
  112.                 g.setColor(Color.RED);
  113.                 g.fillOval(x, y, 30, 30);
  114.                 g.setColor(c);
  115.                        
  116.                 move();
  117.         }
  118.        
  119.         void move()
  120.         {
  121.                 switch(dir) {
  122.                 case L:
  123.                         x -= XSPEED;
  124.                         break;
  125.                 case LU:
  126.                         x -= XSPEED;
  127.                         y -= YSPEED;
  128.                         break;
  129.                 case U:
  130.                         y -= YSPEED;
  131.                         break;
  132.                 case RU:
  133.                         x += XSPEED;
  134.                         y -= YSPEED;
  135.                         break;
  136.                 case R:
  137.                         x += XSPEED;
  138.                         break;
  139.                 case RD:
  140.                         x += XSPEED;
  141.                         y += YSPEED;
  142.                         break;
  143.                 case D:
  144.                         y += YSPEED;
  145.                         break;
  146.                 case LD:
  147.                         x -= XSPEED;
  148.                         y += YSPEED;
  149.                         break;
  150.                 case STOP:
  151.                         break;
  152.                 }
  153.         }
  154.        
  155.        
  156.         public void keyPressed(KeyEvent e)
  157.         {
  158.  
  159.                 int key=e.getKeyCode();
  160. //              if(key==KeyEvent.VK_RIGHT)
  161. //              {
  162. //                      x +=5;
  163. //              }
  164.                
  165.                 switch(key)
  166.                 {
  167.                 case KeyEvent.VK_LEFT:
  168.                         bL=true;
  169.                         break;
  170.                 case KeyEvent.VK_UP:
  171.                         bU=true;
  172.                         break;
  173.                 case KeyEvent.VK_RIGHT:
  174.                         bR=true;
  175.                         break;
  176.                 case KeyEvent.VK_DOWN:
  177.                     bD=true;
  178.                     break;
  179.                 }
  180.                 locateDirection() ;
  181.         }
  182.  
  183.  
  184.         void locateDirection()
  185.         {
  186.                 if(bL && !bU && !bR && !bD) dir = Direction.L;
  187.                 else if(bL && bU && !bR && !bD) dir = Direction.LU;
  188.                 else if(!bL && bU && !bR && !bD) dir = Direction.U;
  189.                 else if(!bL && bU && bR && !bD) dir = Direction.RU;
  190.                 else if(!bL && !bU && bR && !bD) dir = Direction.R;
  191.                 else if(!bL && !bU && bR && bD) dir = Direction.RD;
  192.                 else if(!bL && !bU && !bR && bD) dir = Direction.D;
  193.                 else if(bL && !bU && !bR && bD) dir = Direction.LD;
  194.                 else if(!bL && !bU && !bR && !bD) dir = Direction.STOP;
  195.         }
  196.  
  197.         public void keyReleased(KeyEvent e) {
  198.                 int key=e.getKeyCode();
  199.                
  200.                 switch(key)
  201.                 {
  202.                 case KeyEvent.VK_LEFT:
  203.                         bL=false;
  204.                         break;
  205.                 case KeyEvent.VK_UP:
  206.                         bU=false;
  207.                         break;
  208.                 case KeyEvent.VK_RIGHT:
  209.                         bR=false;
  210.                         break;
  211.                 case KeyEvent.VK_DOWN:
  212.                     bD=false;
  213.                     break;
  214.                 }
  215.                 locateDirection() ;
  216.                
  217.         }
  218.        
  219.  
  220. }
  221.  
  222.  
  223.  

回复 "让主战坦克向8个方向行走"

这儿你可以回复上面这条便签

captcha