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);

  }

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

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

posted @   俊king  阅读(269)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示