From 87e39c258a7390f01d9d6e024dd85d826ddc8d2d Mon Sep 17 00:00:00 2001 From: ppz6le8u7 <3580438051@qq.com> Date: Sun, 25 Jun 2023 15:27:21 +0800 Subject: [PATCH] ADD file via upload --- Bird.java | 76 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 Bird.java diff --git a/Bird.java b/Bird.java new file mode 100644 index 0000000..2c3d22f --- /dev/null +++ b/Bird.java @@ -0,0 +1,76 @@ +package com; + +import javax.imageio.ImageIO; +import java.awt.image.BufferedImage; +import java.io.IOException; + +public class Bird { + int x, y; + int width, height; + BufferedImage bird_image; // 小鸟图片 + + BufferedImage[] images; // 小鸟所有状态的图片 + + public Bird() { + images = new BufferedImage[8]; + // 循环将小鸟所有图片存入数组 + for (int i = 0; i < images.length; i++) { + try { + images[i] = ImageIO.read(Bird.class.getResourceAsStream(i + ".png")); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + + bird_image = BirdGame.bird_img; + width = BirdGame.bird_img.getWidth(); + height = BirdGame.bird_img.getHeight(); + x = 110; + y = 240; + } + + int index; + + // 小鸟飞的方法 + public void fly() { + bird_image = images[index % images.length]; + index++; + } + + int g = 6; // 重力加速度 + double t = 0.15; // 下落时间0.18 + double v = 0; // 初速度 + double h = 0; // 下落的距离 + + // 小鸟下落一次 + public void down() { + h = v * t + g * t * t / 2; // 下落的距离 + v = v + g * t; // 末速度 + y = y + (int) h; + } + + // 小鸟向上飞 + public void up() { + v = -26; // 向上飞给一个初速度 + } + + // 小鸟撞地面的方法 + public boolean hitGround(Ground ground) { + boolean isHit = this.y + this.height >= ground.y + 30; + return isHit; + } + + // 小鸟撞柱子的方法 + public boolean hitColumn(Column column) { + // 撞水平方向的柱子 + boolean b1 = this.x + this.width >= column.x; + boolean b2 = this.x <= column.x + column.width; + // 撞垂直方向的柱子 + boolean b3 = this.y + 25 <= column.y + column.height / 2 - column.gap / 2; + boolean b4 = this.y - 30 + this.height >= column.y + column.height / 2 + column.gap / 2; + // 满足b1,b2 证明水平方向与柱子相撞 + // b1 b2 b3 同时满足 撞的是上面的柱子 + // b1 b2 b4 同时满足 撞的是下面的柱子 + return b1 && b2 && (b3 || b4); + } +}