guyanqing 10 kuukautta sitten
vanhempi
commit
42fe5541b9
83 muutettua tiedostoa jossa 1828 lisäystä ja 4 poistoa
  1. BIN
      imgs/bg.jpg
  2. BIN
      imgs/boss.png
  3. BIN
      imgs/bossbullet.png
  4. BIN
      imgs/doubleshell.png
  5. BIN
      imgs/enemy1.png
  6. BIN
      imgs/enemy2.png
  7. BIN
      imgs/enemy2bullet.png
  8. BIN
      imgs/explode/e1.gif
  9. BIN
      imgs/explode/e10.gif
  10. BIN
      imgs/explode/e11.gif
  11. BIN
      imgs/explode/e12.gif
  12. BIN
      imgs/explode/e13.gif
  13. BIN
      imgs/explode/e14.gif
  14. BIN
      imgs/explode/e15.gif
  15. BIN
      imgs/explode/e16.gif
  16. BIN
      imgs/explode/e2.gif
  17. BIN
      imgs/explode/e3.gif
  18. BIN
      imgs/explode/e4.gif
  19. BIN
      imgs/explode/e5.gif
  20. BIN
      imgs/explode/e6.gif
  21. BIN
      imgs/explode/e7.gif
  22. BIN
      imgs/explode/e8.gif
  23. BIN
      imgs/explode/e9.gif
  24. BIN
      imgs/gift.png
  25. BIN
      imgs/littleboss1.png
  26. BIN
      imgs/littleboss1bullet.png
  27. BIN
      imgs/littleboss2.png
  28. BIN
      imgs/littleboss2bullet.png
  29. BIN
      imgs/plane.png
  30. BIN
      imgs/shell.png
  31. BIN
      imgs/tripleshell.png
  32. BIN
      imgs/warning.gif
  33. 12 4
      src/main/java/com/sf/day03/ArrayWorker.java
  34. 55 0
      src/main/java/com/sf/day04/T.java
  35. 200 0
      src/main/java/com/sf/day04/T2.java
  36. 54 0
      src/main/java/com/sf/game/GameWin.java
  37. 35 0
      src/main/java/com/sf/game/obj/BgObj.java
  38. 41 0
      src/main/java/com/sf/game/obj/BossBullet.java
  39. 116 0
      src/main/java/com/sf/game/obj/BossObj.java
  40. 38 0
      src/main/java/com/sf/game/obj/DoubleShellObj.java
  41. 83 0
      src/main/java/com/sf/game/obj/Enemy1Obj.java
  42. 34 0
      src/main/java/com/sf/game/obj/Enemy2BulletObj.java
  43. 100 0
      src/main/java/com/sf/game/obj/Enemy2Obj.java
  44. 27 0
      src/main/java/com/sf/game/obj/ExplodeObj.java
  45. 113 0
      src/main/java/com/sf/game/obj/GameObj.java
  46. 37 0
      src/main/java/com/sf/game/obj/GiftObj.java
  47. 114 0
      src/main/java/com/sf/game/obj/LittleBoss1.java
  48. 39 0
      src/main/java/com/sf/game/obj/LittleBoss1Bullet.java
  49. 120 0
      src/main/java/com/sf/game/obj/LittleBoss2.java
  50. 106 0
      src/main/java/com/sf/game/obj/LittleBoss2Bullet.java
  51. 176 0
      src/main/java/com/sf/game/obj/PlaneObj.java
  52. 36 0
      src/main/java/com/sf/game/obj/ShellObj.java
  53. 38 0
      src/main/java/com/sf/game/obj/TripleShellObj.java
  54. 29 0
      src/main/java/com/sf/game/obj/WaringObj.java
  55. 81 0
      src/main/java/com/sf/game/utils/GameUtils.java
  56. 68 0
      src/main/java/com/sf/homework/CreditCard.java
  57. 76 0
      src/main/java/com/sf/homework/DepositCard.java
  58. BIN
      target/classes/com/sf/day03/ArrayWorker.class
  59. BIN
      target/classes/com/sf/day04/T.class
  60. BIN
      target/classes/com/sf/day04/T2.class
  61. BIN
      target/classes/com/sf/game/GameWin.class
  62. BIN
      target/classes/com/sf/game/obj/BgObj.class
  63. BIN
      target/classes/com/sf/game/obj/BossBullet.class
  64. BIN
      target/classes/com/sf/game/obj/BossObj.class
  65. BIN
      target/classes/com/sf/game/obj/DoubleShellObj.class
  66. BIN
      target/classes/com/sf/game/obj/Enemy1Obj.class
  67. BIN
      target/classes/com/sf/game/obj/Enemy2BulletObj.class
  68. BIN
      target/classes/com/sf/game/obj/Enemy2Obj.class
  69. BIN
      target/classes/com/sf/game/obj/ExplodeObj.class
  70. BIN
      target/classes/com/sf/game/obj/GameObj.class
  71. BIN
      target/classes/com/sf/game/obj/GiftObj.class
  72. BIN
      target/classes/com/sf/game/obj/LittleBoss1.class
  73. BIN
      target/classes/com/sf/game/obj/LittleBoss1Bullet.class
  74. BIN
      target/classes/com/sf/game/obj/LittleBoss2.class
  75. BIN
      target/classes/com/sf/game/obj/LittleBoss2Bullet.class
  76. BIN
      target/classes/com/sf/game/obj/PlaneObj$1.class
  77. BIN
      target/classes/com/sf/game/obj/PlaneObj.class
  78. BIN
      target/classes/com/sf/game/obj/ShellObj.class
  79. BIN
      target/classes/com/sf/game/obj/TripleShellObj.class
  80. BIN
      target/classes/com/sf/game/obj/WaringObj.class
  81. BIN
      target/classes/com/sf/game/utils/GameUtils.class
  82. BIN
      target/classes/com/sf/homework/CreditCard.class
  83. BIN
      target/classes/com/sf/homework/DepositCard.class

BIN
imgs/bg.jpg


BIN
imgs/boss.png


BIN
imgs/bossbullet.png


BIN
imgs/doubleshell.png


BIN
imgs/enemy1.png


BIN
imgs/enemy2.png


BIN
imgs/enemy2bullet.png


BIN
imgs/explode/e1.gif


BIN
imgs/explode/e10.gif


BIN
imgs/explode/e11.gif


BIN
imgs/explode/e12.gif


BIN
imgs/explode/e13.gif


BIN
imgs/explode/e14.gif


BIN
imgs/explode/e15.gif


BIN
imgs/explode/e16.gif


BIN
imgs/explode/e2.gif


BIN
imgs/explode/e3.gif


BIN
imgs/explode/e4.gif


BIN
imgs/explode/e5.gif


BIN
imgs/explode/e6.gif


BIN
imgs/explode/e7.gif


BIN
imgs/explode/e8.gif


BIN
imgs/explode/e9.gif


BIN
imgs/gift.png


BIN
imgs/littleboss1.png


BIN
imgs/littleboss1bullet.png


BIN
imgs/littleboss2.png


BIN
imgs/littleboss2bullet.png


BIN
imgs/plane.png


BIN
imgs/shell.png


BIN
imgs/tripleshell.png


BIN
imgs/warning.gif


+ 12 - 4
src/main/java/com/sf/day03/ArrayWorker.java

@@ -2,7 +2,7 @@ package com.sf.day03;
 
 import org.junit.jupiter.api.Test;
 
-import java.net.SocketTimeoutException;
+import java.util.Arrays;
 
 /**
  * 数组练习题
@@ -50,19 +50,27 @@ public class ArrayWorker {
      */
     @Test
     public void t3(){
-        int[] arr = {4,5,6,1,9,9,3};
+        int[] arr = {4,5,9,1,9,9,3};
         int max = arr[0];
+        int count = 0;
+        int pre = 0;
+        int[] arr1 = new int[arr.length];   //null  0
         String index  = "0";
         for (int i = 0; i < arr.length; i++) {
          if(arr[i] > max){
              max = arr[i];
-             index = i+"";
+             pre = max;
+             arr1[count] = i;
          }else if (arr[i] == max){
-             index += "   "+i;
+             if(pre != max){
+                 count--;
+             }
+             arr1[++count] = i;
          }
         }
         System.out.println(max);
         System.out.println(index);
+        System.out.println(Arrays.toString(arr1));
     }
 
     @Test

+ 55 - 0
src/main/java/com/sf/day04/T.java

@@ -0,0 +1,55 @@
+package com.sf.day04;
+
+import org.junit.jupiter.api.Test;
+
+import java.util.Arrays;
+
+/**
+ * 第四天  数组
+ */
+public class T {
+    @Test
+    public void t1(){
+        /**
+         * 数据类型[] 数组名 = new 数据类型[]{};
+         * 数据类型[] 数组名 = new 数据类型[数组的长度];
+         *
+         */
+        int[] arr = new int[5];
+        int[] arr1;
+        arr1 = new int[3];
+        System.out.println(Arrays.toString(arr1));
+        arr[0] = 10;
+        arr[1] = 10;
+        arr[2] = 11;
+        arr[3] = 12;
+        arr[3] = 20;
+        arr[4] = 13;
+//        arr[5] = 10;
+        System.out.println(Arrays.toString(arr));
+        for (int i = 0;i<arr.length;i++){
+            System.out.println(arr[i]);
+        }
+        for (int ele : arr){
+            System.out.println(ele);
+        }
+    }
+
+    /**
+     * 创建一个长度为6的int型数组,要求数组元素的值都在1-30之间,且是随机赋值,并要求不重复
+     */
+    @Test
+    public void t2(){
+        int[] arr = new int[6];
+        for (int i  =0 ;i<arr.length;i++){
+            arr[i] = (int) ((Math.random()*6)+1);
+            for(int j = 0;j<i;j++){
+                if(arr[i]  == arr[j]){
+                    i--;
+                    break;
+                }
+            }
+        }
+        System.out.println(Arrays.toString(arr));
+    }
+}

+ 200 - 0
src/main/java/com/sf/day04/T2.java

@@ -0,0 +1,200 @@
+package com.sf.day04;
+
+import com.beust.ah.A;
+import org.junit.jupiter.api.Test;
+
+import java.util.Arrays;
+import java.util.Scanner;
+
+/**
+ * 从键盘读入学生10成绩,找出最高分,并输出学生成绩等级。
+ *
+ * - 成绩>=最高分-10   等级为’A’
+ *
+ * - 成绩>=最高分-20  等级为’B’
+ *
+ * - 成绩>=最高分-30  等级为’C’
+ *
+ * - 其余            等级为’D’
+ */
+public class T2 {
+    public static void main(String[] args) {
+        Scanner scanner = new Scanner(System.in);
+        System.out.println("请输入录入成绩的人数~");
+        int personCount = scanner.nextInt();
+        int[] score = new int[personCount];
+        //假设一个最大值
+        int max = 0;
+        for (int i = 0; i< score.length;i++){
+            score[i] = scanner.nextInt();
+            if(max < score[i]){
+                max = score[i];
+            }
+        }
+        System.out.println("最高分"+max);
+
+        char level;
+        //确定等级
+        for (int i = 0; i< score.length;i++){
+            if(score[i] >= max - 10){
+                 level = 'A';
+            }else if (score[i] >= max - 20 ){
+                level = 'B';
+            }else if (score[i] >= max - 30){
+                level = 'C';
+            }else {
+                level = 'D';
+            }
+            System.out.println(level);
+        }
+    }
+
+    @Test
+    public void t1(){
+        //声明初始化一个二维数组
+        int[][] arr = new int[][]{ {1,2},{1,2,3},{3,4,5,6}};
+        int[][] arr2 = new int[2][3];
+        //赋值
+        for (int i = 0 ;i<arr2.length ;i++){
+            for (int j = 0;j< arr2[i].length;j++){
+                arr2[i][j] = 3;
+            }
+        }
+
+        arr2[0][1] = 4;
+        System.out.println(Arrays.toString(arr2[0]));
+    }
+
+    /**
+     * 第一季度 每一个月的销售额 分别是 12,14,24,
+     *
+     * 第二季度 每一个月的销售额 分别是 23,18,35,
+     *
+     * 第三季度 每一个月的销售额 分别是 33,48,25,
+     *
+     * 第四季度 每一个月的销售额 分别是 27,28,35,
+     */
+    @Test
+    public void t3(){
+        int[][] arr = new int[][]{{12,14,24},{23,18,35},{33,48,25},{27,28,35}};
+        int sum = 0;
+        for (int i= 0;i<arr.length;i++){
+            for (int j= 0;j<arr[i].length;j++){
+                    sum += arr[i][j];
+            }
+        }
+        System.out.println(sum);
+        System.out.println(sum*1.0/12);
+    }
+
+    //数组的反转
+    @Test
+    public void t4(){
+        int[] arr = {1,2,3,4,5,6,7,8,9};
+//        for (int i  = 0;i< arr.length/2;i++){
+//           int temp = arr[i];
+//           arr[i] = arr[arr.length-i-1];
+//            arr[arr.length-i-1] = temp;
+//        }
+//        System.out.println(Arrays.toString(arr));
+        for (int left = 0,right = arr.length-1;left<right;left++,right--){
+            int temp = arr[left];
+            arr[left] = arr[right];
+            arr[right] = temp;
+        }
+        System.out.println(Arrays.toString(arr));
+    }
+
+
+    @Test
+    public void t5(){
+        //数组元素的复制
+        int[] arr = {1,2,3,4,5,6,7,8,9};
+        int[] arr1 = new int[arr.length];
+        for (int i = 0;i<arr.length;i++){
+            arr1[i] = arr[i];
+        }
+        System.out.println(Arrays.toString(arr1));
+    }
+
+    @Test
+    public void t2(){
+        //数组元素的查找
+        int[] arr = {1,2,3,4,5,6,7,8,9};
+        int value = 9;
+        int index = -1;
+        for(int i=0; i<arr.length; i++){
+            if(arr[i] == value){
+                index = i;
+                break;
+            }
+        }
+        if(index==-1){
+            System.out.println(value + "不存在");
+        }else{
+            System.out.println(value + "的下标是" + index);
+        }
+    }
+
+
+    /**
+     * 复制
+     */
+    @Test
+    public void t6(){
+        int[] arr = new int[]{1,2,3,4,5,67,67,8,89};
+       int[] arr1 =  new int[arr.length];
+       for(int i = 0;i<arr.length;i++){
+           arr1[i] = arr[i];
+        }
+        System.out.println(Arrays.toString(arr1));
+    }
+
+    /**
+     * 数组的元素查找
+     */
+    @Test
+    public void t7(){
+        int[] arr = new int[]{1,2,3,4,5,67,8,89};
+        int index = -1;
+        int val = 672;
+        for (int i= 0;i<arr.length;i++){
+            if(val == arr[i]){
+                index = i;
+                break;
+            }
+        }
+        if(index  == -1){
+            System.out.println("没有找到");
+        }else {
+            System.out.println("找到了  下标是"+index);
+        }
+    }
+
+    /**
+     * 二分查找   前提  必须是有序数组
+     */
+    @Test
+    public void t8(){
+        int[] arr = new int[]{1,2,3,4,5,67,81,89};
+        int val = 811;
+        int head = 0;
+        boolean flag = true;
+        int end = arr.length-1;
+        while (head<=end){
+            int middle = (head + end) / 2;
+            if(arr[middle] == val){
+                System.out.println("找到了  index= "+middle);
+                flag = false;
+                break;
+            }else if(arr[middle] > val){
+                end = middle -1;
+            }else {
+                head = middle+1;
+            }
+        }
+        if(flag){
+            System.out.println("没有找到~");
+        }
+    }
+}

+ 54 - 0
src/main/java/com/sf/game/GameWin.java

@@ -0,0 +1,54 @@
+package com.sf.game;
+
+import com.sf.game.obj.BgObj;
+import com.sf.game.obj.PlaneObj;
+import com.sf.game.utils.GameUtils;
+
+import javax.swing.*;
+import java.awt.*;
+
+//启动类
+public class GameWin extends JFrame {
+    //记录游戏的状态
+    // 0 未开始  1  游戏中  2 暂停  3 失败  4 成功通关
+    public static int state = 0;
+    //创建背景图片
+    BgObj bgObj = new BgObj(GameUtils.bdImg,0,-1800,2);
+    //定义一个图片的变量
+    Image offScreenImage = null;
+    // 我方法飞机对象
+    PlaneObj planeObj = new PlaneObj(GameUtils.planeImg,37,41,290,550,0,this);
+    //记录游戏绘画的次数
+    int count = 1;
+
+
+
+
+
+    //定一个变量来存储分数
+    public static int score = 0;
+
+    //我方飞机的下标
+    public static int planeindex = 0;
+    public void launch(){
+        //设置游戏窗口的大小--前提可见
+        this.setVisible(true);
+        //设置窗口的大小
+        this.setSize(600,800);
+        //窗口的位置
+        this.setLocationRelativeTo(null);
+        //设置标题
+        this.setTitle("爱扣钉飞机大战~");
+        //关闭窗口后自动结束进程
+        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+        //将所有的要绘画的游戏物件全部放在集合中
+        GameUtils.gameObjList.add(bgObj);
+        GameUtils.gameObjList.add(planeObj);
+        planeindex= GameUtils.gameObjList.indexOf(planeObj);  //获取我放飞机的下标
+    }
+
+    public static void main(String[] args) {
+        GameWin gameWin = new GameWin();
+        gameWin.launch();
+    }
+}

+ 35 - 0
src/main/java/com/sf/game/obj/BgObj.java

@@ -0,0 +1,35 @@
+package com.sf.game.obj;
+
+
+
+import com.sf.game.GameWin;
+
+import java.awt.*;
+
+public class BgObj extends GameObj{
+	public BgObj() {
+		super();
+	}
+
+	public BgObj(Image img, int width, int height, int x, int y, double speed, GameWin frame) {
+		super(img, width, height, x, y, speed, frame);
+	}
+
+	public BgObj(Image img, int x, int y, double speed) {
+		super(img, x, y, speed);
+	}
+
+	@Override
+	public void paintSelf(Graphics g) {
+		super.paintSelf(g);
+		y+=speed;
+		if(y>=0){
+			y=-1800;
+		}
+	}
+
+	@Override
+	public Rectangle getRec() {
+		return super.getRec();
+	}
+}

+ 41 - 0
src/main/java/com/sf/game/obj/BossBullet.java

@@ -0,0 +1,41 @@
+package com.sf.game.obj;
+
+
+
+import com.sf.game.GameWin;
+import com.sf.game.utils.GameUtils;
+
+import java.awt.*;
+
+public class BossBullet extends GameObj{
+	public BossBullet() {
+		super();
+	}
+
+	public BossBullet(Image img, int width, int height, int x, int y, double speed, GameWin frame) {
+		super(img, width, height, x, y, speed, frame);
+	}
+
+	public BossBullet(Image img, int x, int y, double speed) {
+		super(img, x, y, speed);
+	}
+
+	public BossBullet(int x, int y) {
+		super(x, y);
+	}
+
+	@Override
+	public void paintSelf(Graphics g) {
+		super.paintSelf(g);
+		y+=speed;
+		//越界判断
+		if(this.y>800){
+			GameUtils.removeList.add(this);
+		}
+	}
+
+	@Override
+	public Rectangle getRec() {
+		return super.getRec();
+	}
+}

+ 116 - 0
src/main/java/com/sf/game/obj/BossObj.java

@@ -0,0 +1,116 @@
+package com.sf.game.obj;
+
+
+import com.sf.game.GameWin;
+import com.sf.game.utils.GameUtils;
+
+import java.awt.*;
+
+public class BossObj extends GameObj{
+	int health=30;
+	public BossObj() {
+		super();
+	}
+
+	public BossObj(Image img, int width, int height, int x, int y, double speed, GameWin frame) {
+		super(img, width, height, x, y, speed, frame);
+	}
+
+	public BossObj(Image img, int x, int y, double speed) {
+		super(img, x, y, speed);
+	}
+
+	public BossObj(int x, int y) {
+		super(x, y);
+	}
+
+	@Override
+	public void paintSelf(Graphics g) {
+		super.paintSelf(g);
+		if(y<40){
+			y+=speed;
+		}else {
+			x+=speed;
+			if(x<0||x>360){
+				speed=-speed;
+			}
+		}
+		//首先是我方一级子弹和boss进行碰撞检测
+		for(ShellObj shellObj: GameUtils.shellObjList){
+			if(this.getRec().intersects(shellObj.getRec())&&health>0){
+				shellObj.setX(-100);
+				shellObj.setY(-100);
+				GameUtils.removeList.add(shellObj);
+				health--;
+			} else if (this.getRec().intersects(shellObj.getRec())&&health<=0) {
+				//绘制爆炸
+				ExplodeObj explodeObj=new ExplodeObj(x,y);
+				GameUtils.explodeObjList.add(explodeObj);
+				GameUtils.removeList.add(explodeObj);
+				shellObj.setX(-100);
+				shellObj.setY(-100);
+				GameUtils.removeList.add(shellObj);
+				this.x=-200;
+				this.y=-200;
+				GameUtils.removeList.add(this);
+				GameWin.state=4;
+				GameWin.score+=10;
+			}
+		}
+		//首先是我方二级子弹和boss进行碰撞检测
+		for(DoubleShellObj doubleshellObj: GameUtils.doubleShellObjList){
+			if(this.getRec().intersects(doubleshellObj.getRec())&&health>0){
+				doubleshellObj.setX(-100);
+				doubleshellObj.setY(-100);
+				GameUtils.removeList.add(doubleshellObj);
+				health-=3;
+			} else if (this.getRec().intersects(doubleshellObj.getRec())&&health<=0) {
+				//绘制爆炸
+				ExplodeObj explodeObj=new ExplodeObj(x,y);
+				GameUtils.explodeObjList.add(explodeObj);
+				GameUtils.removeList.add(explodeObj);
+				doubleshellObj.setX(-100);
+				doubleshellObj.setY(-100);
+				GameUtils.removeList.add(doubleshellObj);
+				this.x=-200;
+				this.y=-200;
+				GameUtils.removeList.add(this);
+				GameWin.state=4;
+				GameWin.score+=10;
+			}
+		}
+		//首先是我方三级子弹和boss进行碰撞检测
+		for(TripleShellObj tripleshellObj: GameUtils.tripleShellObjList){
+			if(this.getRec().intersects(tripleshellObj.getRec())&&health>0){
+				tripleshellObj.setX(-100);
+				tripleshellObj.setY(-100);
+				GameUtils.removeList.add(tripleshellObj);
+				health-=5;
+			} else if (this.getRec().intersects(tripleshellObj.getRec())&&health<=0) {
+				//绘制爆炸
+				ExplodeObj explodeObj=new ExplodeObj(x,y);
+				GameUtils.explodeObjList.add(explodeObj);
+				GameUtils.removeList.add(explodeObj);
+				tripleshellObj.setX(-100);
+				tripleshellObj.setY(-100);
+				GameUtils.removeList.add(tripleshellObj);
+				this.x=-200;
+				this.y=-200;
+				GameUtils.removeList.add(this);
+				GameWin.state=4;
+				GameWin.score+=10;
+			}
+		}
+		//白色矩形
+		g.setColor(Color.WHITE);
+		g.fillRect(200,40,200,10);
+		//红色矩形
+		g.setColor(Color.RED);
+		g.fillRect(200,40,health*200/30,10);
+	}
+
+	@Override
+	public Rectangle getRec() {
+		return super.getRec();
+	}
+}

+ 38 - 0
src/main/java/com/sf/game/obj/DoubleShellObj.java

@@ -0,0 +1,38 @@
+package com.sf.game.obj;
+
+import com.sf.game.GameWin;
+import com.sf.game.utils.GameUtils;
+
+import java.awt.*;
+
+public class DoubleShellObj extends GameObj{
+	public DoubleShellObj() {
+		super();
+	}
+
+	public DoubleShellObj(Image img, int width, int height, int x, int y, double speed, GameWin frame) {
+		super(img, width, height, x, y, speed, frame);
+	}
+
+	public DoubleShellObj(Image img, int x, int y, double speed) {
+		super(img, x, y, speed);
+	}
+
+	public DoubleShellObj(int x, int y) {
+		super(x, y);
+	}
+
+	@Override
+	public void paintSelf(Graphics g) {
+		super.paintSelf(g);
+		y-=speed;
+		if(y<0){
+			GameUtils.removeList.add(this);
+		}
+	}
+
+	@Override
+	public Rectangle getRec() {
+		return super.getRec();
+	}
+}

+ 83 - 0
src/main/java/com/sf/game/obj/Enemy1Obj.java

@@ -0,0 +1,83 @@
+package com.sf.game.obj;
+
+import com.sf.game.utils.GameUtils;
+import com.sf.game.GameWin;
+
+import java.awt.*;
+
+public class Enemy1Obj extends GameObj{
+	public Enemy1Obj() {
+		super();
+	}
+
+	public Enemy1Obj(Image img, int width, int height, int x, int y, double speed, GameWin frame) {
+		super(img, width, height, x, y, speed, frame);
+	}
+
+	public Enemy1Obj(Image img, int x, int y, double speed) {
+		super(img, x, y, speed);
+	}
+
+	@Override
+	public void paintSelf(Graphics g) {
+		super.paintSelf(g);
+		y+=speed;
+		//一级子弹和敌方小飞机的碰撞
+		for(ShellObj shellObj: GameUtils.shellObjList){
+			if(this.getRec().intersects(shellObj.getRec())){
+				//绘制爆炸
+				ExplodeObj explodeObj=new ExplodeObj(x,y);
+				GameUtils.explodeObjList.add(explodeObj);
+				GameUtils.removeList.add(explodeObj);
+				shellObj.setX(-100);
+				shellObj.setY(-100);
+				this.setX(-200);
+				this.setY(-200);
+				GameUtils.removeList.add(shellObj);
+				GameUtils.removeList.add(this);
+				GameWin.score+=1;
+			}
+		}
+		//二级子弹和敌方小飞机的碰撞
+		for(DoubleShellObj doubleshellObj: GameUtils.doubleShellObjList){
+			if(this.getRec().intersects(doubleshellObj.getRec())){
+				//绘制爆炸
+				ExplodeObj explodeObj=new ExplodeObj(x,y);
+				GameUtils.explodeObjList.add(explodeObj);
+				GameUtils.removeList.add(explodeObj);
+				doubleshellObj.setX(-100);
+				doubleshellObj.setY(-100);
+				this.setX(-200);
+				this.setY(-200);
+				GameUtils.removeList.add(doubleshellObj);
+				GameUtils.removeList.add(this);
+				GameWin.score+=1;
+			}
+		}
+		//三级子弹和敌方小飞机的碰撞
+		for(TripleShellObj tripleshellObj: GameUtils.tripleShellObjList){
+			if(this.getRec().intersects(tripleshellObj.getRec())){
+				//绘制爆炸
+				ExplodeObj explodeObj=new ExplodeObj(x,y);
+				GameUtils.explodeObjList.add(explodeObj);
+				GameUtils.removeList.add(explodeObj);
+				tripleshellObj.setX(-100);
+				tripleshellObj.setY(-100);
+				this.setX(-200);
+				this.setY(-200);
+				GameUtils.removeList.add(tripleshellObj);
+				GameUtils.removeList.add(this);
+				GameWin.score+=1;
+			}
+		}
+		//越界判断
+		if(this.y>800){
+			GameUtils.removeList.add(this);
+		}
+	}
+
+	@Override
+	public Rectangle getRec() {
+		return super.getRec();
+	}
+}

+ 34 - 0
src/main/java/com/sf/game/obj/Enemy2BulletObj.java

@@ -0,0 +1,34 @@
+package com.sf.game.obj;
+import com.sf.game.utils.GameUtils;
+
+import java.awt.*;
+import com.sf.game.GameWin;
+
+public class Enemy2BulletObj extends GameObj{
+	public Enemy2BulletObj() {
+		super();
+	}
+
+	public Enemy2BulletObj(Image img, int width, int height, int x, int y, double speed, GameWin frame) {
+		super(img, width, height, x, y, speed, frame);
+	}
+
+	public Enemy2BulletObj(Image img, int x, int y, double speed) {
+		super(img, x, y, speed);
+	}
+
+	@Override
+	public void paintSelf(Graphics g) {
+		super.paintSelf(g);
+		y+=speed;
+		//越界判断
+		if(this.y>800){
+			GameUtils.removeList.add(this);
+		}
+	}
+
+	@Override
+	public Rectangle getRec() {
+		return super.getRec();
+	}
+}

+ 100 - 0
src/main/java/com/sf/game/obj/Enemy2Obj.java

@@ -0,0 +1,100 @@
+package com.sf.game.obj;
+
+import com.sf.game.utils.GameUtils;
+
+import java.awt.*;
+import com.sf.game.GameWin;
+public class Enemy2Obj extends GameObj{
+	//设置血量属性
+	int health=3;
+
+	public Enemy2Obj() {
+		super();
+	}
+
+	public Enemy2Obj(Image img, int width, int height, int x, int y, double speed, GameWin frame) {
+		super(img, width, height, x, y, speed, frame);
+	}
+
+	public Enemy2Obj(Image img, int x, int y, double speed) {
+		super(img, x, y, speed);
+	}
+
+	@Override
+	public void paintSelf(Graphics g) {
+		super.paintSelf(g);
+		y+=speed;
+		//一级子弹和敌方大飞机的碰撞检测
+		for(ShellObj shellObj: GameUtils.shellObjList){
+			if(this.getRec().intersects(shellObj.getRec())&&health>0){
+				shellObj.setX(-100);
+				shellObj.setY(-100);
+				GameUtils.removeList.add(shellObj);
+				health--;
+			} else if (this.getRec().intersects(shellObj.getRec())&&health<=0) {
+				//绘制爆炸
+				ExplodeObj explodeObj=new ExplodeObj(x,y);
+				GameUtils.explodeObjList.add(explodeObj);
+				GameUtils.removeList.add(explodeObj);
+				shellObj.setX(-100);
+				shellObj.setY(-100);
+				GameUtils.removeList.add(shellObj);
+				this.x=-100;
+				this.y=-100;
+				GameUtils.removeList.add(this);
+				GameWin.score+=2;
+			}
+		}
+		//二级子弹和敌方大飞机的碰撞检测
+		for(DoubleShellObj doubleshellObj: GameUtils.doubleShellObjList){
+			if(this.getRec().intersects(doubleshellObj.getRec())&&health>0){
+				doubleshellObj.setX(-100);
+				doubleshellObj.setY(-100);
+				GameUtils.removeList.add(doubleshellObj);
+				health-=3;
+			} else if (this.getRec().intersects(doubleshellObj.getRec())&&health<=0) {
+				//绘制爆炸
+				ExplodeObj explodeObj=new ExplodeObj(x,y);
+				GameUtils.explodeObjList.add(explodeObj);
+				GameUtils.removeList.add(explodeObj);
+				doubleshellObj.setX(-100);
+				doubleshellObj.setY(-100);
+				GameUtils.removeList.add(doubleshellObj);
+				this.x=-100;
+				this.y=-100;
+				GameUtils.removeList.add(this);
+				GameWin.score+=2;
+			}
+		}
+		//三级子弹和敌方大飞机的碰撞检测
+		for(TripleShellObj tripleshellObj: GameUtils.tripleShellObjList){
+			if(this.getRec().intersects(tripleshellObj.getRec())&&health>0){
+				tripleshellObj.setX(-100);
+				tripleshellObj.setY(-100);
+				GameUtils.removeList.add(tripleshellObj);
+				health-=5;
+			} else if (this.getRec().intersects(tripleshellObj.getRec())&&health<=0) {
+				//绘制爆炸
+				ExplodeObj explodeObj=new ExplodeObj(x,y);
+				GameUtils.explodeObjList.add(explodeObj);
+				GameUtils.removeList.add(explodeObj);
+				tripleshellObj.setX(-100);
+				tripleshellObj.setY(-100);
+				GameUtils.removeList.add(tripleshellObj);
+				this.x=-100;
+				this.y=-100;
+				GameUtils.removeList.add(this);
+				GameWin.score+=2;
+			}
+		}
+		//越界判断
+		if(this.y>800){
+			GameUtils.removeList.add(this);
+		}
+	}
+
+	@Override
+	public Rectangle getRec() {
+		return super.getRec();
+	}
+}

+ 27 - 0
src/main/java/com/sf/game/obj/ExplodeObj.java

@@ -0,0 +1,27 @@
+package com.sf.game.obj;
+
+import java.awt.*;
+import com.sf.game.utils.GameUtils;
+public class ExplodeObj extends GameObj{
+	static Image[] explodePic=new Image[16];
+	int explodeCount=0;
+	static {
+		for(int i=0;i< explodePic.length;i++){
+			explodePic[i]=Toolkit.getDefaultToolkit().getImage("imgs/explode/e"+(i+1)+".gif");
+		}
+	}
+
+	@Override
+	public void paintSelf(Graphics g) {
+		super.paintSelf(g);
+		if(explodeCount<16){
+			super.img=explodePic[explodeCount];
+			super.paintSelf(g);
+			explodeCount++;
+		}
+	}
+
+	public ExplodeObj(int x, int y) {
+		super(x, y);
+	}
+}

+ 113 - 0
src/main/java/com/sf/game/obj/GameObj.java

@@ -0,0 +1,113 @@
+package com.sf.game.obj;
+
+
+import com.sf.game.GameWin;
+import java.awt.*;
+
+//所有游戏元素的父类
+public class GameObj {
+	//元素的图片
+	Image img;
+	//游戏元素的大小
+	int width;
+	int height;
+	//游戏元素的位置
+	int x;
+	int y;
+	//元素的运动速度
+	double speed;
+	//窗口类
+	GameWin frame;
+
+	//set和get方法
+	public Image getImg() {
+		return img;
+	}
+
+	public void setImg(Image img) {
+		this.img = img;
+	}
+
+	public int getWidth() {
+		return width;
+	}
+
+	public void setWidth(int width) {
+		this.width = width;
+	}
+
+	public int getHeight() {
+		return height;
+	}
+
+	public void setHeight(int height) {
+		this.height = height;
+	}
+
+	public int getX() {
+		return x;
+	}
+
+	public void setX(int x) {
+		this.x = x;
+	}
+
+	public int getY() {
+		return y;
+	}
+
+	public void setY(int y) {
+		this.y = y;
+	}
+
+	public double getSpeed() {
+		return speed;
+	}
+
+	public void setSpeed(double speed) {
+		this.speed = speed;
+	}
+
+	public GameWin getFrame() {
+		return frame;
+	}
+
+	public void setFrame(GameWin frame) {
+		this.frame = frame;
+	}
+    //构造方法
+	public GameObj() {
+	}
+
+	public GameObj(Image img, int width, int height, int x, int y, double speed, GameWin frame) {
+		this.img = img;
+		this.width = width;
+		this.height = height;
+		this.x = x;
+		this.y = y;
+		this.speed = speed;
+		this.frame = frame;
+	}
+
+	public GameObj(Image img, int x, int y, double speed) {
+		this.img = img;
+		this.x = x;
+		this.y = y;
+		this.speed = speed;
+	}
+
+	public GameObj(int x, int y) {
+		this.x = x;
+		this.y = y;
+	}
+
+	//绘制元素自身的方法
+	public void paintSelf(Graphics g){
+		g.drawImage(img,x,y,null);
+	}
+	//获取自身矩形的方法,用来进行碰撞检测
+	public Rectangle getRec(){
+		return new Rectangle(x,y,width,height);
+	}
+
+}

+ 37 - 0
src/main/java/com/sf/game/obj/GiftObj.java

@@ -0,0 +1,37 @@
+package com.sf.game.obj;
+
+
+import com.sf.game.utils.GameUtils;
+import java.awt.*;
+import com.sf.game.GameWin;
+
+public class GiftObj extends GameObj{
+	public GiftObj() {
+		super();
+	}
+
+	public GiftObj(Image img, int width, int height, int x, int y, double speed, GameWin frame) {
+		super(img, width, height, x, y, speed, frame);
+	}
+
+	public GiftObj(Image img, int x, int y, double speed) {
+		super(img, x, y, speed);
+	}
+
+	public GiftObj(int x, int y) {
+		super(x, y);
+	}
+
+	@Override
+	public void paintSelf(Graphics g) {
+		super.img= GameUtils.giftImg;
+		super.width=64;
+		super.height=62;
+		super.paintSelf(g);
+	}
+
+	@Override
+	public Rectangle getRec() {
+		return super.getRec();
+	}
+}

+ 114 - 0
src/main/java/com/sf/game/obj/LittleBoss1.java

@@ -0,0 +1,114 @@
+package com.sf.game.obj;
+
+
+import com.sf.game.utils.GameUtils;
+import java.awt.*;
+import com.sf.game.GameWin;
+
+public class LittleBoss1 extends GameObj{
+	int health=10;
+	public LittleBoss1() {
+		super();
+	}
+
+	public LittleBoss1(Image img, int width, int height, int x, int y, double speed, GameWin frame) {
+		super(img, width, height, x, y, speed, frame);
+	}
+
+	public LittleBoss1(Image img, int x, int y, double speed) {
+		super(img, x, y, speed);
+	}
+
+	public LittleBoss1(int x, int y) {
+		super(x, y);
+	}
+
+	@Override
+	public void paintSelf(Graphics g) {
+		super.paintSelf(g);
+		x+=speed;
+		if(x>400){
+			speed=-1;
+		}
+		//敌方1号boss和我方子弹碰撞之后,我方子弹消失,当1号boss血量为0的时候,1号boss也会消失,否则不会消失
+		for(ShellObj shellObj: GameUtils.shellObjList){
+			if(this.getRec().intersects(shellObj.getRec())&&health>0){
+				shellObj.setX(-100);
+				shellObj.setY(-100);
+				GameUtils.removeList.add(shellObj);
+				health--;
+			} else if (this.getRec().intersects(shellObj.getRec())&&health<=0) {
+				//绘制爆炸
+				ExplodeObj explodeObj=new ExplodeObj(x,y);
+				GameUtils.explodeObjList.add(explodeObj);
+				GameUtils.removeList.add(explodeObj);
+				//当敌方小boss被击毁的时候才会出现补给品
+				GiftObj giftObj=new GiftObj(this.x,this.y);
+				GameUtils.giftObjList.add(giftObj);
+				GameUtils.gameObjList.addAll(GameUtils.giftObjList);
+				shellObj.setX(-100);
+				shellObj.setY(-100);
+				GameUtils.removeList.add(shellObj);
+				this.x=-200;
+				this.y=-200;
+				GameUtils.removeList.add(this);
+				GameWin.score+=5;
+			}
+		}
+		//敌方1号boss和我方二级子弹碰撞之后,我方子弹消失,当1号boss血量为0的时候,1号boss也会消失,否则不会消失
+		for(DoubleShellObj doubleshellObj: GameUtils.doubleShellObjList){
+			if(this.getRec().intersects(doubleshellObj.getRec())&&health>0){
+				doubleshellObj.setX(-100);
+				doubleshellObj.setY(-100);
+				GameUtils.removeList.add(doubleshellObj);
+				health-=3;
+			} else if (this.getRec().intersects(doubleshellObj.getRec())&&health<=0) {
+				//绘制爆炸
+				ExplodeObj explodeObj=new ExplodeObj(x,y);
+				GameUtils.explodeObjList.add(explodeObj);
+				GameUtils.removeList.add(explodeObj);
+				//当敌方小boss被击毁的时候才会出现补给品
+				GiftObj giftObj=new GiftObj(this.x,this.y);
+				GameUtils.giftObjList.add(giftObj);
+				GameUtils.gameObjList.addAll(GameUtils.giftObjList);
+				doubleshellObj.setX(-100);
+				doubleshellObj.setY(-100);
+				GameUtils.removeList.add(doubleshellObj);
+				this.x=-200;
+				this.y=-200;
+				GameUtils.removeList.add(this);
+				GameWin.score+=5;
+			}
+		}
+		//敌方1号boss和我方三级子弹碰撞之后,我方子弹消失,当1号boss血量为0的时候,1号boss也会消失,否则不会消失
+		for(TripleShellObj tripleshellObj: GameUtils.tripleShellObjList){
+			if(this.getRec().intersects(tripleshellObj.getRec())&&health>0){
+				tripleshellObj.setX(-100);
+				tripleshellObj.setY(-100);
+				GameUtils.removeList.add(tripleshellObj);
+				health-=5;
+			} else if (this.getRec().intersects(tripleshellObj.getRec())&&health<=0) {
+				//绘制爆炸
+				ExplodeObj explodeObj=new ExplodeObj(x,y);
+				GameUtils.explodeObjList.add(explodeObj);
+				GameUtils.removeList.add(explodeObj);
+				//当敌方小boss被击毁的时候才会出现补给品
+				GiftObj giftObj=new GiftObj(this.x,this.y);
+				GameUtils.giftObjList.add(giftObj);
+				GameUtils.gameObjList.addAll(GameUtils.giftObjList);
+				tripleshellObj.setX(-100);
+				tripleshellObj.setY(-100);
+				GameUtils.removeList.add(tripleshellObj);
+				this.x=-200;
+				this.y=-200;
+				GameUtils.removeList.add(this);
+				GameWin.score+=5;
+			}
+		}
+	}
+
+	@Override
+	public Rectangle getRec() {
+		return super.getRec();
+	}
+}

+ 39 - 0
src/main/java/com/sf/game/obj/LittleBoss1Bullet.java

@@ -0,0 +1,39 @@
+package com.sf.game.obj;
+
+import com.sf.game.utils.GameUtils;
+
+import java.awt.*;
+import com.sf.game.GameWin;
+
+public class LittleBoss1Bullet extends GameObj{
+	public LittleBoss1Bullet() {
+		super();
+	}
+
+	public LittleBoss1Bullet(Image img, int width, int height, int x, int y, double speed, GameWin frame) {
+		super(img, width, height, x, y, speed, frame);
+	}
+
+	public LittleBoss1Bullet(Image img, int x, int y, double speed) {
+		super(img, x, y, speed);
+	}
+
+	public LittleBoss1Bullet(int x, int y) {
+		super(x, y);
+	}
+
+	@Override
+	public void paintSelf(Graphics g) {
+		super.paintSelf(g);
+		y+=speed;
+		//越界判断
+		if(this.y>800){
+			GameUtils.removeList.add(this);
+		}
+	}
+
+	@Override
+	public Rectangle getRec() {
+		return super.getRec();
+	}
+}

+ 120 - 0
src/main/java/com/sf/game/obj/LittleBoss2.java

@@ -0,0 +1,120 @@
+package com.sf.game.obj;
+
+
+import com.sf.game.utils.GameUtils;
+import java.awt.*;
+import com.sf.game.GameWin;
+
+public class LittleBoss2 extends GameObj{
+	int health=10;
+	public LittleBoss2() {
+		super();
+	}
+
+	public LittleBoss2(Image img, int width, int height, int x, int y, double speed, GameWin frame) {
+		super(img, width, height, x, y, speed, frame);
+	}
+
+	public LittleBoss2(Image img, int x, int y, double speed) {
+		super(img, x, y, speed);
+	}
+
+	public LittleBoss2(int x, int y) {
+		super(x, y);
+	}
+
+	@Override
+	public void paintSelf(Graphics g) {
+		super.paintSelf(g);
+		if(y<150){
+			y+=2;
+		}else{
+			x+=speed;
+			if(x>400||x<10){
+				speed=-speed;
+			}
+		}
+
+		//敌方1号boss和我方子弹碰撞之后,我方子弹消失,当1号boss血量为0的时候,1号boss也会消失,否则不会消失
+		for(ShellObj shellObj: GameUtils.shellObjList){
+			if(this.getRec().intersects(shellObj.getRec())&&health>0){
+				shellObj.setX(-100);
+				shellObj.setY(-100);
+				GameUtils.removeList.add(shellObj);
+				health--;
+			} else if (this.getRec().intersects(shellObj.getRec())&&health<=0) {
+				//绘制爆炸
+				ExplodeObj explodeObj=new ExplodeObj(x,y);
+				GameUtils.explodeObjList.add(explodeObj);
+				GameUtils.removeList.add(explodeObj);
+				//当敌方小boss被击毁的时候才会出现补给品
+				GiftObj giftObj=new GiftObj(this.x,this.y);
+				GameUtils.giftObjList.add(giftObj);
+				GameUtils.gameObjList.addAll(GameUtils.giftObjList);
+
+				shellObj.setX(-100);
+				shellObj.setY(-100);
+				GameUtils.removeList.add(shellObj);
+				this.x=-200;
+				this.y=-200;
+				GameUtils.removeList.add(this);
+				GameWin.score+=5;
+			}
+		}
+		//敌方2号boss和我方二级子弹碰撞之后,我方子弹消失,当1号boss血量为0的时候,1号boss也会消失,否则不会消失
+		for(DoubleShellObj doubleshellObj: GameUtils.doubleShellObjList){
+			if(this.getRec().intersects(doubleshellObj.getRec())&&health>0){
+				doubleshellObj.setX(-100);
+				doubleshellObj.setY(-100);
+				GameUtils.removeList.add(doubleshellObj);
+				health-=3;
+			} else if (this.getRec().intersects(doubleshellObj.getRec())&&health<=0) {
+				//绘制爆炸
+				ExplodeObj explodeObj=new ExplodeObj(x,y);
+				GameUtils.explodeObjList.add(explodeObj);
+				GameUtils.removeList.add(explodeObj);
+				//当敌方小boss被击毁的时候才会出现补给品
+				GiftObj giftObj=new GiftObj(this.x,this.y);
+				GameUtils.giftObjList.add(giftObj);
+				GameUtils.gameObjList.addAll(GameUtils.giftObjList);
+				doubleshellObj.setX(-100);
+				doubleshellObj.setY(-100);
+				GameUtils.removeList.add(doubleshellObj);
+				this.x=-200;
+				this.y=-200;
+				GameUtils.removeList.add(this);
+				GameWin.score+=5;
+			}
+		}
+		//敌方2号boss和我方三级子弹碰撞之后,我方子弹消失,当1号boss血量为0的时候,1号boss也会消失,否则不会消失
+		for(TripleShellObj tripleshellObj: GameUtils.tripleShellObjList){
+			if(this.getRec().intersects(tripleshellObj.getRec())&&health>0){
+				tripleshellObj.setX(-100);
+				tripleshellObj.setY(-100);
+				GameUtils.removeList.add(tripleshellObj);
+				health-=5;
+			} else if (this.getRec().intersects(tripleshellObj.getRec())&&health<=0) {
+				//绘制爆炸
+				ExplodeObj explodeObj=new ExplodeObj(x,y);
+				GameUtils.explodeObjList.add(explodeObj);
+				GameUtils.removeList.add(explodeObj);
+				//当敌方小boss被击毁的时候才会出现补给品
+				GiftObj giftObj=new GiftObj(this.x,this.y);
+				GameUtils.giftObjList.add(giftObj);
+				GameUtils.gameObjList.addAll(GameUtils.giftObjList);
+				tripleshellObj.setX(-100);
+				tripleshellObj.setY(-100);
+				GameUtils.removeList.add(tripleshellObj);
+				this.x=-200;
+				this.y=-200;
+				GameUtils.removeList.add(this);
+				GameWin.score+=5;
+			}
+		}
+	}
+
+	@Override
+	public Rectangle getRec() {
+		return super.getRec();
+	}
+}

+ 106 - 0
src/main/java/com/sf/game/obj/LittleBoss2Bullet.java

@@ -0,0 +1,106 @@
+package com.sf.game.obj;
+
+import com.sf.game.utils.GameUtils;
+
+import java.awt.*;
+import com.sf.game.GameWin;
+
+public class LittleBoss2Bullet extends GameObj{
+	int health=2;
+	public LittleBoss2Bullet() {
+		super();
+	}
+
+	public LittleBoss2Bullet(Image img, int width, int height, int x, int y, double speed, GameWin frame) {
+		super(img, width, height, x, y, speed, frame);
+	}
+
+	public LittleBoss2Bullet(Image img, int x, int y, double speed) {
+		super(img, x, y, speed);
+	}
+
+	public LittleBoss2Bullet(int x, int y) {
+		super(x, y);
+	}
+
+	@Override
+	public void paintSelf(Graphics g) {
+		super.paintSelf(g);
+		//实现追踪功能
+		this.y+=speed;
+		this.x-=(this.x-GameUtils.gameObjList.get(GameWin.planeindex).getX())/30;
+
+		//敌方2号boss子弹和我方子弹碰撞之后,我方子弹消失,当1号boss血量为0的时候,1号boss也会消失,否则不会消失
+		for(ShellObj shellObj: GameUtils.shellObjList){
+			if(this.getRec().intersects(shellObj.getRec())&&health>0){
+				shellObj.setX(-100);
+				shellObj.setX(-100);
+				GameUtils.removeList.add(shellObj);
+				health--;
+			} else if (this.getRec().intersects(shellObj.getRec())&&health<=0) {
+				//绘制爆炸
+				ExplodeObj explodeObj=new ExplodeObj(x,y);
+				GameUtils.explodeObjList.add(explodeObj);
+				GameUtils.removeList.add(explodeObj);
+				shellObj.setX(-100);
+				shellObj.setX(-100);
+				GameUtils.removeList.add(shellObj);
+				this.x=-200;
+				this.y=-200;
+				GameUtils.removeList.add(this);
+				GameWin.score+=3;
+			}
+		}
+		//敌方2号boss子弹和我方二级子弹碰撞之后,我方子弹消失,当1号boss血量为0的时候,1号boss也会消失,否则不会消失
+		for(DoubleShellObj doubleshellObj: GameUtils.doubleShellObjList){
+			if(this.getRec().intersects(doubleshellObj.getRec())&&health>0){
+				doubleshellObj.setX(-100);
+				doubleshellObj.setX(-100);
+				GameUtils.removeList.add(doubleshellObj);
+				health-=3;
+			} else if (this.getRec().intersects(doubleshellObj.getRec())&&health<=0) {
+				//绘制爆炸
+				ExplodeObj explodeObj=new ExplodeObj(x,y);
+				GameUtils.explodeObjList.add(explodeObj);
+				GameUtils.removeList.add(explodeObj);
+				doubleshellObj.setX(-100);
+				doubleshellObj.setX(-100);
+				GameUtils.removeList.add(doubleshellObj);
+				this.x=-200;
+				this.y=-200;
+				GameUtils.removeList.add(this);
+				GameWin.score+=3;
+			}
+		}
+		//敌方2号boss子弹和我方三级子弹碰撞之后,我方子弹消失,当1号boss血量为0的时候,1号boss也会消失,否则不会消失
+		for(TripleShellObj tripleshellObj: GameUtils.tripleShellObjList){
+			if(this.getRec().intersects(tripleshellObj.getRec())&&health>0){
+				tripleshellObj.setX(-100);
+				tripleshellObj.setX(-100);
+				GameUtils.removeList.add(tripleshellObj);
+				health-=5;
+			} else if (this.getRec().intersects(tripleshellObj.getRec())&&health<=0) {
+				//绘制爆炸
+				ExplodeObj explodeObj=new ExplodeObj(x,y);
+				GameUtils.explodeObjList.add(explodeObj);
+				GameUtils.removeList.add(explodeObj);
+				tripleshellObj.setX(-100);
+				tripleshellObj.setX(-100);
+				GameUtils.removeList.add(tripleshellObj);
+				this.x=-200;
+				this.y=-200;
+				GameUtils.removeList.add(this);
+				GameWin.score+=3;
+			}
+		}
+		//越界判断
+		if(this.y>800){
+			GameUtils.removeList.add(this);
+		}
+	}
+
+	@Override
+	public Rectangle getRec() {
+		return super.getRec();
+	}
+}

+ 176 - 0
src/main/java/com/sf/game/obj/PlaneObj.java

@@ -0,0 +1,176 @@
+package com.sf.game.obj;
+
+import com.sf.game.utils.GameUtils;
+import com.sf.game.GameWin;
+
+import java.awt.*;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
+
+public class PlaneObj extends GameObj{
+	//记录我方飞机碰撞补给的次数
+	public static int times=1;
+	LittleBoss1 littleBoss1=new LittleBoss1();
+	LittleBoss2 littleBoss2=new LittleBoss2();
+	public PlaneObj() {
+		super();
+	}
+
+	public PlaneObj(Image img, int width, int height, int x, int y, double speed, GameWin frame) {
+		super(img, width, height, x, y, speed, frame);
+		//添加鼠标的移动事件
+		this.frame.addMouseMotionListener(new MouseAdapter() {
+			@Override
+			public void mouseMoved(MouseEvent e) {
+				PlaneObj.super.x=e.getX()-19;
+				PlaneObj.super.y=e.getY()-20;
+			}
+		});
+	}
+
+	public PlaneObj(Image img, int x, int y, double speed) {
+		super(img, x, y, speed);
+	}
+
+	@Override
+	public void paintSelf(Graphics g) {
+		super.paintSelf(g);
+		//我方飞机与敌方小飞机的碰撞检测,碰撞时候我方飞机和敌方小飞机都会消失
+		for(Enemy1Obj enemy1Obj:GameUtils.enemy1ObjList){
+			if(this.getRec().intersects(enemy1Obj.getRec())){
+				//绘制爆炸
+				ExplodeObj explodeObj=new ExplodeObj(x,y);
+				GameUtils.explodeObjList.add(explodeObj);
+				GameUtils.removeList.add(explodeObj);
+				//让敌方小飞机消失的处理方法就是改变其坐标,让它消失在游戏窗口中,并不是真正的消失
+				enemy1Obj.setX(-100);
+				enemy1Obj.setY(-100);
+				this.x=-200;
+				this.y=-200;
+				GameUtils.removeList.add(enemy1Obj);
+				GameUtils.removeList.add(this);
+				GameWin.state=3;
+			}
+		}
+		//我方飞机与敌方大飞机的碰撞检测,碰撞时候我方飞机和敌方大飞机都会消失
+		for(Enemy2Obj enemy2Obj:GameUtils.enemy2ObjList){
+			if(this.getRec().intersects(enemy2Obj.getRec())){
+				//绘制爆炸
+				ExplodeObj explodeObj=new ExplodeObj(x,y);
+				GameUtils.explodeObjList.add(explodeObj);
+				GameUtils.removeList.add(explodeObj);
+				//让敌方小飞机消失的处理方法就是改变其坐标,让它消失在游戏窗口中,并不是真正的消失
+				enemy2Obj.setX(-100);
+				enemy2Obj.setY(-100);
+				this.x=-200;
+				this.y=-200;
+				GameUtils.removeList.add(enemy2Obj);
+				GameUtils.removeList.add(this);
+				GameWin.state=3;
+			}
+		}
+		//我方飞机与敌方大飞机子弹的碰撞检测,碰撞时候我方飞机和敌方大飞机子弹都会消失
+		for(Enemy2BulletObj enemy2BulletObj:GameUtils.enemy2BulletObjList){
+			if(this.getRec().intersects(enemy2BulletObj.getRec())){
+				//绘制爆炸
+				ExplodeObj explodeObj=new ExplodeObj(x,y);
+				GameUtils.explodeObjList.add(explodeObj);
+				GameUtils.removeList.add(explodeObj);
+				//让敌方小飞机消失的处理方法就是改变其坐标,让它消失在游戏窗口中,并不是真正的消失
+				enemy2BulletObj.setX(-100);
+				enemy2BulletObj.setY(-100);
+				this.x=-200;
+				this.y=-200;
+				GameUtils.removeList.add(enemy2BulletObj);
+				GameUtils.removeList.add(this);
+				GameWin.state=3;
+			}
+		}
+		//当敌方boss1和我方飞机碰撞的时候,我方飞机消失,敌方飞机不消失
+		if(this.getRec().intersects(littleBoss1.getRec())){
+			//绘制爆炸
+			ExplodeObj explodeObj=new ExplodeObj(x,y);
+			GameUtils.explodeObjList.add(explodeObj);
+			GameUtils.removeList.add(explodeObj);
+			this.x=-200;
+			this.y=-200;
+			GameUtils.removeList.add(this);
+			GameWin.state=3;
+		}
+		//当敌方boss2和我方飞机碰撞的时候,我方飞机消失,敌方飞机不消失
+		if(this.getRec().intersects(littleBoss2.getRec())){
+			//绘制爆炸
+			ExplodeObj explodeObj=new ExplodeObj(x,y);
+			GameUtils.explodeObjList.add(explodeObj);
+			GameUtils.removeList.add(explodeObj);
+			this.x=-200;
+			this.y=-200;
+			GameUtils.removeList.add(this);
+			GameWin.state=3;
+		}
+		//当我方飞机和敌方1号boss子弹碰撞之后,两者都消失
+		for (LittleBoss1Bullet littleBoss1Bullet:GameUtils.littleBoss1BulletList) {
+			if(this.getRec().intersects(littleBoss1Bullet.getRec())){
+				//绘制爆炸
+				ExplodeObj explodeObj=new ExplodeObj(x,y);
+				GameUtils.explodeObjList.add(explodeObj);
+				GameUtils.removeList.add(explodeObj);
+				littleBoss1Bullet.setX(-100);
+				littleBoss1Bullet.setY(-100);
+				GameUtils.removeList.add(littleBoss1Bullet);
+				this.x=-200;
+				this.y=-200;
+				GameUtils.removeList.add(this);
+				GameWin.state=3;
+			}
+		}
+		//当我方飞机和敌方2号boss子弹碰撞之后,两者都消失
+		for (LittleBoss2Bullet littleBoss2Bullet:GameUtils.littleBoss2BulletList) {
+			if(this.getRec().intersects(littleBoss2Bullet.getRec())){
+				//绘制爆炸
+				ExplodeObj explodeObj=new ExplodeObj(x,y);
+				GameUtils.explodeObjList.add(explodeObj);
+				GameUtils.removeList.add(explodeObj);
+				littleBoss2Bullet.setX(-100);
+				littleBoss2Bullet.setY(-100);
+				GameUtils.removeList.add(littleBoss2Bullet);
+				this.x=-200;
+				this.y=-200;
+				GameUtils.removeList.add(this);
+				GameWin.state=3;
+			}
+		}
+		//我方飞机碰撞补给之后,补给消失,我方飞机不消失
+		for (GiftObj giftObj: GameUtils.giftObjList) {
+			if(this.getRec().intersects(giftObj.getRec())){
+				giftObj.setX(-100);
+				giftObj.setY(-100);
+				GameUtils.removeList.add(giftObj);
+				times++;
+			}
+		}
+		//我方飞机碰撞boss子弹后,两者都消失
+		for(BossBullet bossBullet:GameUtils.bossBulletList){
+			if(this.getRec().intersects(bossBullet.getRec())){
+				//绘制爆炸
+				ExplodeObj explodeObj=new ExplodeObj(x,y);
+				GameUtils.explodeObjList.add(explodeObj);
+				GameUtils.removeList.add(explodeObj);
+				bossBullet.setX(-100);
+				bossBullet.setY(-100);
+				this.x=-200;
+				this.y=-200;
+				GameUtils.removeList.add(bossBullet);
+				GameUtils.removeList.add(this);
+				GameWin.state=3;
+			}
+		}
+
+
+	}
+
+	@Override
+	public Rectangle getRec() {
+		return super.getRec();
+	}
+}

+ 36 - 0
src/main/java/com/sf/game/obj/ShellObj.java

@@ -0,0 +1,36 @@
+package com.sf.game.obj;
+
+
+import com.sf.game.utils.GameUtils;
+import java.awt.*;
+import com.sf.game.GameWin;
+
+public class ShellObj extends GameObj{
+	public ShellObj() {
+		super();
+	}
+
+	public ShellObj(Image img, int width, int height, int x, int y, double speed, GameWin frame) {
+		super(img, width, height, x, y, speed, frame);
+	}
+
+	public ShellObj(Image img, int x, int y, double speed) {
+		super(img, x, y, speed);
+	}
+
+	@Override
+	public void paintSelf(Graphics g) {
+		super.paintSelf(g);
+		//实现子弹的移动,改变子弹的纵坐标
+		y -= speed;
+
+		if(y<0){
+			GameUtils.removeList.add(this);
+		}
+	}
+
+	@Override
+	public Rectangle getRec() {
+		return super.getRec();
+	}
+}

+ 38 - 0
src/main/java/com/sf/game/obj/TripleShellObj.java

@@ -0,0 +1,38 @@
+package com.sf.game.obj;
+
+import com.sf.game.utils.GameUtils;
+
+import java.awt.*;
+import com.sf.game.GameWin;
+
+public class TripleShellObj extends GameObj{
+	public TripleShellObj() {
+		super();
+	}
+
+	public TripleShellObj(Image img, int width, int height, int x, int y, double speed, GameWin frame) {
+		super(img, width, height, x, y, speed, frame);
+	}
+
+	public TripleShellObj(Image img, int x, int y, double speed) {
+		super(img, x, y, speed);
+	}
+
+	public TripleShellObj(int x, int y) {
+		super(x, y);
+	}
+
+	@Override
+	public void paintSelf(Graphics g) {
+		super.paintSelf(g);
+		y-=speed;
+		if(y<0){
+			GameUtils.removeList.add(this);
+		}
+	}
+
+	@Override
+	public Rectangle getRec() {
+		return super.getRec();
+	}
+}

+ 29 - 0
src/main/java/com/sf/game/obj/WaringObj.java

@@ -0,0 +1,29 @@
+package com.sf.game.obj;
+import com.sf.game.utils.GameUtils;
+
+
+import java.awt.*;
+import com.sf.game.GameWin;
+
+public class WaringObj extends GameObj{
+	public WaringObj() {
+		super();
+	}
+
+	public WaringObj(Image img, int width, int height, int x, int y, double speed, GameWin frame) {
+		super(img, width, height, x, y, speed, frame);
+	}
+
+	public WaringObj(Image img, int x, int y, double speed) {
+		super(img, x, y, speed);
+	}
+
+	public WaringObj(int x, int y) {
+		super(x, y);
+	}
+
+	@Override
+	public void paintSelf(Graphics g) {
+		super.paintSelf(g);
+	}
+}

+ 81 - 0
src/main/java/com/sf/game/utils/GameUtils.java

@@ -0,0 +1,81 @@
+package com.sf.game.utils;
+
+import com.sf.game.obj.*;
+import java.awt.*;
+import java.util.ArrayList;
+import java.util.List;
+
+//这个类是游戏元素的父类
+public class GameUtils {
+	//获取背景图片
+	public static Image bdImg= Toolkit.getDefaultToolkit().getImage("imgs/bg.jpg");
+	//获取boss图片
+	public static Image bossImg= Toolkit.getDefaultToolkit().getImage("imgs/boss.png");
+	//获取爆炸图片
+	public static Image explodeImg= Toolkit.getDefaultToolkit().getImage("imgs/explode/e6.gif");
+	//获取我方飞机图片
+	public static Image planeImg= Toolkit.getDefaultToolkit().getImage("imgs/plane.png");
+	//获取我方飞机子弹的图片
+	public static Image shellImg= Toolkit.getDefaultToolkit().getImage("imgs/shell.png");
+	//获取敌方小飞机的图片
+	public static Image enemy1Img= Toolkit.getDefaultToolkit().getImage("imgs/enemy1.png");
+	//获取敌方大飞机的图片
+	public static Image enemy2Img= Toolkit.getDefaultToolkit().getImage("imgs/enemy2.png");
+	//获取敌方大飞机子弹的图片
+	public static Image enemy2bulletImg= Toolkit.getDefaultToolkit().getImage("imgs/enemy2bullet.png");
+	//获取敌方小boss1的图片
+	public static Image littleboss1Img= Toolkit.getDefaultToolkit().getImage("imgs/littleboss1.png");
+	//获取敌方小boss1的图片
+	public static Image littleboss2Img= Toolkit.getDefaultToolkit().getImage("imgs/littleboss2.png");
+	//获取敌方1号boss子弹的图片
+	public static Image littleBoss1BulletImg= Toolkit.getDefaultToolkit().getImage("imgs/littleboss1bullet.png");
+	//获取敌方2号boss子弹的图片
+	public static Image littleBoss2BulletImg= Toolkit.getDefaultToolkit().getImage("imgs/littleboss2bullet.png");
+	//获取补给的图片
+	public static Image giftImg= Toolkit.getDefaultToolkit().getImage("imgs/gift.png");
+	//获取二级子弹的图片
+	public static Image doubleShellImg= Toolkit.getDefaultToolkit().getImage("imgs/doubleshell.png");
+	//获取三级子弹的图片
+	public static Image tripleShellImg= Toolkit.getDefaultToolkit().getImage("imgs/tripleshell.png");
+	//获取boss子弹的图片
+	public static Image bossBulletImg= Toolkit.getDefaultToolkit().getImage("imgs/bossbullet.png");
+	//获取警示标志的图片
+	public static Image warningImg= Toolkit.getDefaultToolkit().getImage("imgs/warning.gif");
+
+
+	//创建我方飞机子弹的集合
+	public static List<ShellObj> shellObjList=new ArrayList<>();
+	//创建敌方小飞机的集合
+	public static List<Enemy1Obj> enemy1ObjList=new ArrayList<>();
+	//创建敌方大飞机的集合
+	public static List<Enemy2Obj> enemy2ObjList=new ArrayList<>();
+	//创建敌方大飞机子弹的集合
+	public static List<Enemy2BulletObj> enemy2BulletObjList=new ArrayList<>();
+	//所有元素集合
+	public static List<GameObj> gameObjList=new ArrayList<>();
+	//所有要移除的元素的集合
+	public static List<GameObj> removeList=new ArrayList<>();
+	//爆炸集合
+	public static List<ExplodeObj> explodeObjList=new ArrayList<>();
+	//1号boss子弹的集合
+	public static List<LittleBoss1Bullet> littleBoss1BulletList=new ArrayList<>();
+	//2号boss子弹的集合
+	public static List<LittleBoss2Bullet> littleBoss2BulletList=new ArrayList<>();
+	//补给的集合
+	public static List<GiftObj> giftObjList=new ArrayList<>();
+	//二级子弹的集合
+	public static List<DoubleShellObj> doubleShellObjList=new ArrayList<>();
+	//三级子弹的集合
+	public static List<TripleShellObj> tripleShellObjList=new ArrayList<>();
+	//boss子弹的集合
+	public static List<BossBullet> bossBulletList=new ArrayList<>();
+
+	//这个方法是用来绘制文字的
+	public static void drawWord(Graphics gImage,String str,Color color,int size,int x,int y){
+		gImage.setColor(color);
+		gImage.setFont(new Font("仿宋",Font.BOLD,size));
+		gImage.drawString(str,x,y);
+	}
+
+
+}

+ 68 - 0
src/main/java/com/sf/homework/CreditCard.java

@@ -0,0 +1,68 @@
+package com.sf.homework;
+
+/**
+ * 信用卡类
+ *
+ *  * (2)声明一个银行信用卡CreditCard类,继承储蓄卡类
+ *  * 增加属性:本月可透支总额度,本月已透支金额
+ *  * 重写public void withdraw(double money),可透支,
+ *  * 取款金额超过账户余额+本月还可透支额度,提示超过可透支额度
+ *  * 取款金额在账户余额范围内,不用透支
+ *  * 取款金额超过账户余额但在可透支范围内,需要透支
+ *  * 重写public void save(double money),
+ *  * 存款金额不能为负数,否则提示存款金额不能为负数
+ *  * 本次存款金额只够偿还部分已透支金额
+ *  * 本次存款金额除了偿还透支金额,还有剩余
+ *  * (3)在测试类中,分别创建两种卡对象,测试
+ *
+ */
+public class CreditCard extends DepositCard{
+   private double maxOverdraft;  //当月可最多透支额度
+   private double overdraft;   // 已经透支额度
+
+   public void setMaxOverdraft(double maxOverdraft){
+    this.maxOverdraft = maxOverdraft;
+   }
+
+   public double getMaxOverdraft(){
+    return maxOverdraft;
+   }
+
+   public void setOverdraft(double overdraft){
+    this.overdraft = overdraft;
+   }
+
+   public double getOverdraft(){
+    return overdraft;
+   }
+
+  @Override
+  public void withdraw(double money) {
+   if(money > getBalance()+maxOverdraft -overdraft){
+    System.out.println("超出可透支额度");
+   }
+   if(money <= getBalance()){
+    super.withdraw(money);
+   }
+   overdraft += money - getBalance();
+   setBalance(0);  //已经到透支   说明余额为0
+  }
+
+ @Override
+ public void save(double money) {
+  if(money < 0){
+   System.out.println("存款金额不能为负数");
+  }
+  if(money <= overdraft){//有透支  需要偿还部分透支
+   overdraft -= money;
+  }
+  //  透支已还完  还有剩余  存储到余额中
+  setBalance(getBalance()+(money - overdraft));
+ }
+
+
+ @Override
+ public String getInfo() {
+  return super.getInfo()+", 本月可透支总额度:"+maxOverdraft+",,本月以透支额度"+overdraft+"本月可透支"+(maxOverdraft-overdraft);
+ }
+}

+ 76 - 0
src/main/java/com/sf/homework/DepositCard.java

@@ -0,0 +1,76 @@
+package com.sf.homework;
+
+import java.text.BreakIterator;
+
+/**
+ * (2)声明一个银行信用卡CreditCard类,继承储蓄卡类
+ * 增加属性:本月可透支总额度,本月已透支金额
+ * 重写public void withdraw(double money),可透支,
+ * 取款金额超过账户余额+本月还可透支额度,提示超过可透支额度
+ * 取款金额在账户余额范围内,不用透支
+ * 取款金额超过账户余额但在可透支范围内,需要透支
+ * 重写public void save(double money),
+ * 存款金额不能为负数,否则提示存款金额不能为负数
+ * 本次存款金额只够偿还部分已透支金额
+ * 本次存款金额除了偿还透支金额,还有剩余
+ * (3)在测试类中,分别创建两种卡对象,测试
+ */
+
+/**
+ * 储蓄卡类
+ */
+public class DepositCard {
+    private String id;  //代表的是账户信息id
+    private double balance;   //代表的是余额
+
+    public String getId(){
+        return id;
+    }
+    public void setId(String id){
+        this.id = id;
+    }
+
+    public double getBalance(){
+        return balance;
+    }
+
+    public void setBalance(double balance){
+        this.balance = balance;
+    }
+
+    /**
+     * 取款方法
+     * @param money
+     */
+    public void withdraw(double money){
+        if(money < 0){
+            System.out.println("取款金额不能为负数!!!");
+        }
+        if(money > balance){
+            System.out.println("余额不足!!!");
+        }
+        //取钱
+        balance -= money;
+    }
+
+    /**
+     * 存款方法
+     * @param money
+     */
+    public void save(double money){
+        if(money < 0){
+            System.out.println("存款金额不能为负数");
+        }
+        balance += money;
+    }
+
+
+    /**
+     * 可以返回账户和余额
+     * @return
+     */
+    public String getInfo(){
+        return "账户:"+id+"  , 余额:"+balance;
+    }
+
+}

BIN
target/classes/com/sf/day03/ArrayWorker.class


BIN
target/classes/com/sf/day04/T.class


BIN
target/classes/com/sf/day04/T2.class


BIN
target/classes/com/sf/game/GameWin.class


BIN
target/classes/com/sf/game/obj/BgObj.class


BIN
target/classes/com/sf/game/obj/BossBullet.class


BIN
target/classes/com/sf/game/obj/BossObj.class


BIN
target/classes/com/sf/game/obj/DoubleShellObj.class


BIN
target/classes/com/sf/game/obj/Enemy1Obj.class


BIN
target/classes/com/sf/game/obj/Enemy2BulletObj.class


BIN
target/classes/com/sf/game/obj/Enemy2Obj.class


BIN
target/classes/com/sf/game/obj/ExplodeObj.class


BIN
target/classes/com/sf/game/obj/GameObj.class


BIN
target/classes/com/sf/game/obj/GiftObj.class


BIN
target/classes/com/sf/game/obj/LittleBoss1.class


BIN
target/classes/com/sf/game/obj/LittleBoss1Bullet.class


BIN
target/classes/com/sf/game/obj/LittleBoss2.class


BIN
target/classes/com/sf/game/obj/LittleBoss2Bullet.class


BIN
target/classes/com/sf/game/obj/PlaneObj$1.class


BIN
target/classes/com/sf/game/obj/PlaneObj.class


BIN
target/classes/com/sf/game/obj/ShellObj.class


BIN
target/classes/com/sf/game/obj/TripleShellObj.class


BIN
target/classes/com/sf/game/obj/WaringObj.class


BIN
target/classes/com/sf/game/utils/GameUtils.class


BIN
target/classes/com/sf/homework/CreditCard.class


BIN
target/classes/com/sf/homework/DepositCard.class