网络

教育改变生活

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 886|回复: 0
打印 上一主题 下一主题

Java项目实战之天天酷跑(七)

[复制链接]

271

主题

284

帖子

1243

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1243

最佳新人活跃会员热心会员突出贡献优秀版主

跳转到指定楼层
楼主
发表于 2021-2-24 19:36:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
障碍物五、金币
在此,暂且先不写金币的动态效果。
  1. package cn.sqc.runday.model;

  2. import java.awt.Graphics;
  3. import java.awt.Image;
  4. import java.io.File;
  5. import java.io.IOException;
  6. import java.util.Random;

  7. import javax.imageio.ImageIO;

  8. import cn.sqc.runday.view.GameFrame;

  9. /**
  10. * @author Huey
  11. *2020-11-30  下午03:44:51
  12. *金币障碍物类
  13. *
  14. */
  15. public class Barrs_5 {
  16.                 private Image image;//当前显示图片
  17.                 public static final int WIDTH = 30;
  18.                 public static final int HEIGHT = 30;
  19.                 private int x,y;
  20.                 private int speed;
  21.                 Random random = new Random();
  22.                 public Barrs_5() {
  23.                         try {
  24.                                 image = ImageIO.read(new File("Image/"+(random.nextInt(6) + 21) + ".png"));
  25.                         } catch (IOException e) {
  26.                                 // TODO Auto-generated catch block
  27.                                 e.printStackTrace();
  28.                         }
  29.                         x = GameFrame.WIDTH + 10;
  30.                         y = random.nextInt(600);
  31.                         speed = 20;
  32.                 }
  33.                
  34.                 public void step(){
  35.                         x -= speed;
  36.                 }
  37.                
  38.                 public void paintBarrs(Graphics g){
  39.                         g.drawImage(image, x, y, WIDTH, HEIGHT, null);
  40.                 }
  41.                 public boolean outofBounds() {
  42.                         return this.x<=-WIDTH;
  43.                 }

  44.                 public Image getImage() {
  45.                         return image;
  46.                 }

  47.                 public void setImage(Image image) {
  48.                         this.image = image;
  49.                 }

  50.                 public int getX() {
  51.                         return x;
  52.                 }

  53.                 public void setX(int x) {
  54.                         this.x = x;
  55.                 }

  56.                 public int getY() {
  57.                         return y;
  58.                 }

  59.                 public void setY(int y) {
  60.                         this.y = y;
  61.                 }

  62.                 public int getSpeed() {
  63.                         return speed;
  64.                 }

  65.                 public void setSpeed(int speed) {
  66.                         this.speed = speed;
  67.                 }

  68.                 public Random getRandom() {
  69.                         return random;
  70.                 }

  71.                 public void setRandom(Random random) {
  72.                         this.random = random;
  73.                 }

  74.                 public static int getWidth() {
  75.                         return WIDTH;
  76.                 }

  77.                 public static int getHeight() {
  78.                         return HEIGHT;
  79.                 }

  80. }
复制代码

4、玩家和障碍物的碰撞逻辑
以玩家与导弹的碰撞举例:
  1. for(int i = 0;i<barrs3.length;i++){
  2.                 if(person.getX() + Person.WIDTH >= barrs3[i].getX() &&
  3.                 person.getX() <= barrs3[i].getX()         + Barrs_3.WIDTH  &&
  4.                 person .getY() +Person.getHeight() >= barrs3[i].getY() &&
  5.                 person.getY()        <= barrs3[i].getY () + Barrs_3.HEIGHT){
  6.                         if(person.getX() + Person.WIDTH <= barrs3[i].getX() + Barrs_3.WIDTH){//玩家的宽度(120px)是比障碍物小的
  7.                                 //左碰撞
  8.                                 person.setX(barrs3[i].getX()  - Barrs_3.WIDTH);
  9.                         }else{
  10.                                 //右碰撞
  11.                                 person.setX(barrs3[i].getX()+ Barrs_3.WIDTH        );
  12.                         }        
  13.                 }
  14.         }
复制代码

以下动图演示了玩家从右边与障碍物b发生碰撞和从左边碰撞的逻辑,上下碰撞同理。
上下左右碰撞的逻辑代码,在动图下方:
5、暂停、继续逻辑
在监听键盘按键的方法中。
代码如下:
此处的 flag 来源于上面程序启动的方法中,不难看出只要按了空格键,就能实现生成、移动、绘制方法的暂停,也就相当于画面的静止、游戏的暂停!
6、结束逻辑
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

WEB前端

QQ|手机版|小黑屋|金桨网|助学堂  咨询请联系站长。

GMT+8, 2024-4-20 12:05 , Processed in 0.054973 second(s), 22 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表