zoukankan      html  css  js  c++  java
  • 4.16Java游戏小项目之记时功能

    4.16Java游戏小项目之记时功能

    需求描述

    希望在玩游戏时看到自己完了多久

    核心点:
    • 时间计算:当前时刻 - 游戏结束的时刻---在游戏开始的时候创建一个时间的对象

    • 显示时间到窗口

    时间计算

    在初始化窗口时,保存一个起始时间。飞机死亡时,保存一个结束时间。在MyGameFrame中定义两个成员变量

    Date startTime = new Date(); //游戏开始时刻
    Date endTime;
    /*
    在飞机死亡的时候给endTime赋值,修改paint方法中的代码
    时间就是毫秒数,计算方法:
    1970年1月1日0时0刻开始
    1990年10月1日0时0刻结束
    二者做差
    */

    创建时间对象:

    把游戏经过的时间写到我们的上方:

        /*重写桌面绘制方法*/
       @Override
       public void paint(Graphics g){
           /*
           g本身带有颜色,形参对象是别人传过来的
           在下面来个g的颜色再别的地方再用g画笔就会直接更改
           所以有使用方法:
           用之前先保存,然后最后用完了再改回去---创建对象保存
           改字体的思想一样
            */
           /*改变子体颜色*/
           Color c = g.getColor();
    //       Color c = g.getColor();
    //       Font f = g.getFont();
    //
    //       /*画一条线,包括起点的坐标(横、纵坐标)和终点的(横、纵坐标)*/
    //       g.drawLine(100,100,300,300);
    //       /*画矩形的方法*/
    //       g.drawRect(100,100,300,300);
    //       /*画椭圆的方法*/
    //       g.drawOval(100,100,300,300);
    //       /*画实心的矩形*/
    //       g.fillRect(100,100,300,300);
    //       /*画字符串*/
    //       g.drawString("Lucifer",500,500);
    //       /*变颜色---这个Color是个静态的类,里面有些静态的变量,可以直接使用*/
    //       g.setColor(Color.BLUE);
    //       /*设置字体风格*/
    //       g.setFont(new Font("微软雅黑",Font.BOLD,50)); //形参为一个对象,实参也要创建一个对象去传入
    //       /*画出皮卡丘*/
    //       g.drawImage(Pkq,0,0,null);
    //       /*画出图片---Marks*/
    //       g.drawImage(Marks,MarksX,MarksY,null);
    //       MarksX++;
    //       MarksY++;
    //
    //       g.setColor(c);
    //       g.setFont(f);
           g.drawImage(Plane,40,40,null);
           //因为已经在对象里封装了方法,所以直接调用即可
    //       p.drawSelf(g);
    //       p2.drawSelf(g);
    //       p3.drawSelf(g);
           /*画出实心炮弹*/
    //       shell.draw(g); //传入参数g
           /*
           可以定义不同的对象
           后期可以把对象放进数组或者容器里
            */

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

               /*判断炮弹矩形是否与飞机矩形相碰*/
               boolean peng = shells[i].getRect().intersects(p.getRect()); //getRect是获得矩形,设置变量是否了好进行if判断

               /*进行if判断是否相碰,飞机和炮弹的碰撞检测*/
               if (peng){
    //               System.out.println("碰到了!!!");
                   p.live = false; //相碰死掉

    //               if (boom == null){
    //
    //                   /*创建爆炸对象*/
    //                   boom = new Explode(p.x,p.y); //传入飞机的坐标,飞机在哪里爆炸就传入那个坐标
    //                   /*
    //                   没有if判断的话飞机的矩形在和小球的矩形碰撞的时候
    //                   小球在飞机的矩形上方一直运动,一直建立对象,总是一个小图片,就看不到效果。
    //                   直到飞出飞机的矩形外才会停止建立对象
    //                     */
    //               }
    //
    //               /*画出爆炸效果图*/
    //               boom.draw(g);

                   /*结束时刻创建对象*/
                   endTime = new Date();

                   /*时间计算*/
                   period = (int) ((endTime.getTime() - startTime.getTime())/1000); //startTime和endTime都是对象,里面有一个getTime的方法
              }

          }

           /*判断飞机死亡*/
           if (!p.live){
               /*设置字体颜色*/
               g.setColor(Color.YELLOW);

               /*改变字体大小等*/
               Font f = new Font("宋体",Font.BOLD,30);

               /*画出游戏时长*/
               g.drawString("时间" + period + "秒", (int) p.x, (int) p.y);
          }

           /*改回字体颜色*/
           g.setColor(c);

      }

    涉及了绝大多数知识,最细拆分项目

    理论很重要,但是理论和实践是一起走的,要深刻的理解理论,来回调试代码加深基础功底

    It's a lonely road!!!
  • 相关阅读:
    centos7内存处理
    MySQl分析工具之mysqltuner.pl及mysqlslap
    Mycat-web 安装
    【NOI2001】【Luogu P2704】【POJ1185】炮兵阵地
    【OpenJudge 7834】分成互质组
    Assignment(单调队列)
    OO’s Sequence
    【注意】邻接表
    20190405模拟测试
    【USACO2010open】时间旅行
  • 原文地址:https://www.cnblogs.com/JunkingBoy/p/14668779.html
Copyright © 2011-2022 走看看