zhangxiaoyu 3 years ago
parent
commit
80cdf4ebba

+ 20 - 0
src/tankGame01/Constants.java

@@ -0,0 +1,20 @@
1
+package tankGame01;
2
+
3
+public class Constants {
4
+    public static class Frame{
5
+        public final static int FRAME_HEIGHT = 750;
6
+        public final static int FRAME_WIDTH = 1000;
7
+    }
8
+    public static class Direct {
9
+        public final static Integer UP = 1;
10
+        public final static Integer DOWN = 2;
11
+        public final static Integer LEFT = 3;
12
+        public final static Integer RIGHT = 4;
13
+    }
14
+    // 阵营
15
+    public static class Camp{
16
+        public final static Integer MY = 1; // 我方
17
+        public final static Integer OTHER = 2; // 敌方
18
+    }
19
+
20
+}

+ 7 - 0
src/tankGame01/EnemyTank.java

@@ -0,0 +1,7 @@
1
+package tankGame01;
2
+
3
+public class EnemyTank extends Tank{
4
+    public EnemyTank(Integer x, Integer y, Integer direct) {
5
+        super(x, y, direct, Constants.Camp.OTHER);
6
+    }
7
+}

+ 71 - 20
src/tankGame01/MyPanel.java

@@ -4,19 +4,21 @@ import javax.swing.*;
4 4
 import java.awt.*;
5 5
 import java.awt.event.KeyEvent;
6 6
 import java.awt.event.KeyListener;
7
+import java.util.Vector;
8
+
9
+import static tankGame01.Constants.Direct.*;
7 10
 
8 11
 public class MyPanel extends JPanel implements KeyListener {
9
-    Tank tank1;
10
-    Tank tank2;
11
-    Tank tank3;
12
-    Tank tank4;
12
+    MyTank myTank;
13
+    Vector<EnemyTank> tanks = new Vector<>();
14
+    int initEnemyTanks = 4;
13 15
     public MyPanel() {
14
-        tank1 = new Tank(100, 100);
15
-        tank2 = new Tank(200, 100);
16
-        tank3 = new Tank(300, 100);
17
-        tank4 = new Tank(400, 100);
16
+        myTank = new MyTank(100,100,UP);
17
+        myTank.setStep(10);
18
+        for (int i = 0; i < initEnemyTanks; i++) {
19
+            tanks.add(new EnemyTank((100+(100*i)),0,DOWN));
20
+        }
18 21
     }
19
-
20 22
     @Override
21 23
     public void keyTyped(KeyEvent e) {
22 24
 
@@ -24,17 +26,19 @@ public class MyPanel extends JPanel implements KeyListener {
24 26
 
25 27
     @Override
26 28
     public void keyPressed(KeyEvent e) {
27
-        int x = tank1.getX();
28
-        int y = tank1.getY();
29 29
         if(e.getKeyCode() == KeyEvent.VK_DOWN) {
30 30
             // 键盘向下 y+1
31
-            tank1.setY(y++);
31
+            myTank.moveDown();
32
+            myTank.setDirect(DOWN);
32 33
         } else if(e.getKeyCode() == KeyEvent.VK_UP) {
33
-            tank1.setY(y--);
34
+            myTank.moveUp();
35
+            myTank.setDirect(UP);
34 36
         } else if(e.getKeyCode() == KeyEvent.VK_LEFT) {
35
-            tank1.setX(x--);
37
+            myTank.moveLeft();
38
+            myTank.setDirect(LEFT);
36 39
         } else if(e.getKeyCode() == KeyEvent.VK_RIGHT) {
37
-            tank1.setX(x++);
40
+            myTank.moveRight();
41
+            myTank.setDirect(RIGHT);
38 42
         }
39 43
         this.repaint();
40 44
     }
@@ -48,10 +52,57 @@ public class MyPanel extends JPanel implements KeyListener {
48 52
     public void paint(Graphics g) {
49 53
         super.paint(g);
50 54
         // 填充矩形
51
-        g.fillRect(0,0,1000,750);
52
-        tank1.initTank(g,1,1);
53
-        tank2.initTank(g,2,1);
54
-        tank3.initTank(g,3,1);
55
-        tank4.initTank(g,4,2);
55
+        g.fillRect(0,0, Constants.Frame.FRAME_WIDTH,Constants.Frame.FRAME_HEIGHT);
56
+        // 画出我方坦克
57
+        drawTank(g,myTank);
58
+        // 画出敌方坦克
59
+        for (EnemyTank enemyTank : tanks) {
60
+            drawTank(g,enemyTank);
61
+        }
62
+    }
63
+
64
+    private void drawTank (Graphics g,Tank tank) {
65
+        Color color = tank.getCamp() == Constants.Camp.MY ? Color.CYAN:Color.ORANGE;
66
+        // 画坦克
67
+        g.setColor(color);
68
+        int x = tank.getX();
69
+        int y = tank.getY();
70
+        switch (tank.getDirect()) {
71
+            // 向上
72
+            case 1:
73
+                g.fill3DRect(x,y,10,60,false);// 坦克左侧履带
74
+                g.fill3DRect(x+30,y,10,60,false);// 坦克右侧履带
75
+                g.fill3DRect(x+10,y+10,20,40,false); // 中间控制台
76
+                g.fillOval(x+10,y+20,20,20);  // 画坦克的盖子
77
+                g.drawLine(x+20,y+30,x+20,y);// 画机关枪(中间的线)
78
+                break;
79
+            // 向下
80
+            case 2:
81
+                g.fill3DRect(x,y,10,60,false);// 坦克左侧履带
82
+                g.fill3DRect(x+30,y,10,60,false);// 坦克右侧履带
83
+                g.fill3DRect(x+10,y+10,20,40,false); // 中间控制台
84
+                g.fillOval(x+10,y+20,20,20);  // 画坦克的盖子
85
+                g.drawLine(x+20,y+30,x+20,y+60);// 画机关枪(中间的线)
86
+                break;
87
+            // 向左
88
+            case 3:
89
+                g.fill3DRect(x,y,60,10,false);// 坦克上履带履带
90
+                g.fill3DRect(x,y+30,60,10,false);// 坦克下侧履带
91
+                g.fill3DRect(x+10,y+10,40,20,false); // 中间控制台
92
+                g.fillOval(x+20,y+10,20,20);  // 画坦克的盖子
93
+                g.drawLine(x+30,y+20,x,y+20);// 画机关枪(中间的线)
94
+                break;
95
+            // 向右
96
+            case 4:
97
+                g.fill3DRect(x,y,60,10,false);// 坦克上履带履带
98
+                g.fill3DRect(x,y+30,60,10,false);// 坦克下侧履带
99
+                g.fill3DRect(x+10,y+10,40,20,false); // 中间控制台
100
+                g.fillOval(x+20,y+10,20,20);  // 画坦克的盖子
101
+                g.drawLine(x+30,y+20,x+60,y+20);// 画机关枪(中间的线)
102
+                break;
103
+        }
104
+
105
+
56 106
     }
107
+
57 108
 }

+ 7 - 0
src/tankGame01/MyTank.java

@@ -0,0 +1,7 @@
1
+package tankGame01;
2
+
3
+public class MyTank extends Tank{
4
+    public MyTank(Integer x, Integer y, Integer direct) {
5
+        super(x, y, direct, Constants.Camp.MY);
6
+    }
7
+}

+ 51 - 46
src/tankGame01/Tank.java

@@ -1,15 +1,43 @@
1 1
 package tankGame01;
2 2
 
3
-import java.awt.*;
4 3
 
5 4
 public class Tank {
6 5
     // 横纵坐标
7 6
     private Integer x;
8 7
     private Integer y;
8
+    private Integer direct; // 朝向  上下左右 1234
9
+    private Integer step = 2; // 默认2
10
+    private Integer camp; // 阵营 我方1 敌方2
9 11
 
10
-    public Tank(Integer x, Integer y) {
12
+    public Tank(Integer x, Integer y ,Integer direct,Integer camp) {
11 13
         this.x = x;
12 14
         this.y = y;
15
+        this.direct = direct;
16
+        this.camp = camp;
17
+    }
18
+
19
+    public Integer getDirect() {
20
+        return direct;
21
+    }
22
+
23
+    public Integer getStep() {
24
+        return step;
25
+    }
26
+
27
+    public Integer getCamp() {
28
+        return camp;
29
+    }
30
+
31
+    public void setCamp(Integer camp) {
32
+        this.camp = camp;
33
+    }
34
+
35
+    public void setDirect(Integer direct) {
36
+        this.direct = direct;
37
+    }
38
+
39
+    public void setStep(Integer step) {
40
+        this.step = step;
13 41
     }
14 42
 
15 43
     public Integer getX() {
@@ -27,52 +55,29 @@ public class Tank {
27 55
     public void setY(Integer y) {
28 56
         this.y = y;
29 57
     }
58
+    // 向上
59
+    public void moveUp() {
60
+        if(y>0)
61
+          this.y -= this.step;
30 62
 
31
-    /**
32
-     * 初始化坦克
33
-     * @param g 画笔
34
-     * @param direct 方向 上下左右 1234
35
-     * @param type 类型 1 我方 2 敌方
36
-     */
37
-    public void initTank(Graphics g, int direct,int type) {
38
-        Color color = type == 1? Color.CYAN:Color.ORANGE;
39
-        // 画坦克
40
-        g.setColor(color);
41
-        switch (direct) {
42
-            // 向上
43
-            case 1:
44
-                g.fill3DRect(x,y,10,60,false);// 坦克左侧履带
45
-                g.fill3DRect(x+30,y,10,60,false);// 坦克右侧履带
46
-                g.fill3DRect(x+10,y+10,20,40,false); // 中间控制台
47
-                g.fillOval(x+10,y+20,20,20);  // 画坦克的盖子
48
-                g.drawLine(x+20,y+30,x+20,y);// 画机关枪(中间的线)
49
-                break;
50
-            // 向下
51
-            case 2:
52
-                g.fill3DRect(x,y,10,60,false);// 坦克左侧履带
53
-                g.fill3DRect(x+30,y,10,60,false);// 坦克右侧履带
54
-                g.fill3DRect(x+10,y+10,20,40,false); // 中间控制台
55
-                g.fillOval(x+10,y+20,20,20);  // 画坦克的盖子
56
-                g.drawLine(x+20,y+30,x+20,y+60);// 画机关枪(中间的线)
57
-                break;
58
-            // 向左
59
-            case 3:
60
-                g.fill3DRect(x,y,60,10,false);// 坦克上履带履带
61
-                g.fill3DRect(x,y+30,60,10,false);// 坦克下侧履带
62
-                g.fill3DRect(x+10,y+10,40,20,false); // 中间控制台
63
-                g.fillOval(x+20,y+10,20,20);  // 画坦克的盖子
64
-                g.drawLine(x+30,y+20,x,y+20);// 画机关枪(中间的线)
65
-                break;
66
-            // 向右
67
-            case 4:
68
-                g.fill3DRect(x,y,60,10,false);// 坦克上履带履带
69
-                g.fill3DRect(x,y+30,60,10,false);// 坦克下侧履带
70
-                g.fill3DRect(x+10,y+10,40,20,false); // 中间控制台
71
-                g.fillOval(x+20,y+10,20,20);  // 画坦克的盖子
72
-                g.drawLine(x+30,y+20,x+60,y+20);// 画机关枪(中间的线)
73
-                break;
74
-        }
63
+    }
64
+    // 向下
65
+    public void moveDown() {
66
+        System.out.println(this.y<Constants.Frame.FRAME_HEIGHT);
67
+        if(this.y<Constants.Frame.FRAME_HEIGHT)
68
+            this.y += this.step;
69
+    }
70
+    // 向左
71
+    public void moveLeft() {
72
+        if(x>0)
73
+            this.x -= this.step;
75 74
 
76 75
     }
76
+    // 向右
77
+    public void moveRight() {
78
+        if(x<Constants.Frame.FRAME_WIDTH)
79
+            this.x += this.step;
80
+    }
81
+
77 82
 
78 83
 }