zoukankan      html  css  js  c++  java
  • 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);
          }

     

    It's a lonely road!!!
  • 相关阅读:
    Ajax函数
    javascript 重定向和打开新窗口(ZZ)
    asp.net 学习
    dojo杂谈
    Deciding between COALESCE and ISNULL in SQL Server
    从 Twitter 运维技术经验可以学到什么
    重新安装ASP.NET命令
    SQL Server 2008中新增的变更数据捕获(CDC)和更改跟踪
    SQL Server 2005/2008/2012中应用分布式分区视图
    数据库运维原则
  • 原文地址:https://www.cnblogs.com/JunkingBoy/p/14659762.html
Copyright © 2011-2022 走看看