4.14Java游戏小项目之产生炮弹

4.14Java游戏小项目之产生炮弹

炮弹类基本设计

实现思想:

  • 炮弹为实心黄色椭圆

  • 炮弹方向随机,遇到边界反弹

实现逻辑:

  • 在窗口的某一个位置随机生成一个炮弹

  • 方向也是随机的

  • 遇到边界以后就会反弹弹回来---要有角度

    • 左、右边界

      • 左:x < 0,右:x > 窗口宽度

    • 上、下边界

      • 上:y < 0,下:y > 窗口宽度

    • 这时候发现窗口的高度和宽度是常量,所以设计一个常量类

    • package com.lucifer.game;

      /**
      * 存放常量的类
      * @author Lucifer
      */
      public class Constant {
         public static final int GAME_WIDTH = 600;
         public static final int GAME_HEIGHT = 600;
      }
  • 角度是一个随机的值---大小在0~2PI之间

示例代码:

package com.lucifer.game;

import java.awt.*;
import java.util.concurrent.CopyOnWriteArrayList;

/**
* 炮弹类
* @author Lucifer
*/
public class Shell extends GameObject{

   /*继承之后增加我们自己的属性*/
   double degree; //这是一个角度变量

   /*构造方法构造一个随机数*/
   public Shell(){
       x = 200; //这里的x,y继承了GameObject类,所以是double类型的数
       y = 200; //所以下面用到x,y的时候要进行强制转型
       width = 10;
       height = 10;
       speed = 3;
       /*希望是一个随机的值,希望生成随机角度*/
       degree = Math.random() * Math.PI * 2;
  }

   /*将炮弹画出*/
   public void draw(Graphics g){
       /*黄色、实心、圆,三个条件*/
       Color c = g.getColor(); //先保存原来的颜色

       /*将颜色设置为黄色*/
       g.setColor(Color.YELLOW);
       /*填充一个炮弹*/
       g.fillOval((int)x,(int)y,width,height);
       /*修改x,y的坐标,按照所想的方向去移动,利用初中三角函数来表示*/
       //想让炮弹沿任意角度飞行
       x += speed * Math.cos(degree); //x轴长度
       y += speed * Math.sin(degree); //y轴长度

       /*
       进行实心点反弹的判定
        */
       if (x < 0 || x > Constant.GAME_WIDTH - width){
           degree = Math.PI - degree; //反射的算法,如果根据延长线做y轴的翻转
      }

       if (y < 30 || y > Constant.GAME_HEIGHT - height){
           degree = - degree; //反射的算法,按照纵坐标进行反转
      }

       g.setColor(c); //将原先的颜色归还
  }
}
        /*画出实心炮弹*/
       shell.draw(g); //传入参数g

产生一堆炮弹

实现思路:数组、容器

  • 先创建数组,定义数组的大小

  • 利用循环生成50个炮弹---遍历数组

  • 在利用循环画出50个炮弹---遍历数组

实例:

创建数组、利用遍历的方法生成50发炮弹

    /*
   用数组实现多炮弹
   窗口刚画的时候就给他生成50发炮弹
    */
   Scanner scn = new Scanner(System.in); //监听键盘输入数
   int n = scn.nextInt(); //将输入的数赋值与变量n
   Shell[] shells = new Shell[n]; //shell数组的声明,给玩家想要多少发

利用遍历的方法画出50发炮弹

        //利用遍历的方法画出n发炮弹
       for (int i =0; i < shells.length; i++){
           shells[i].draw(g);
      }

 

posted @ 2021-04-14 20:34  俊king  阅读(99)  评论(0编辑  收藏  举报