本人在读大学生一枚,在上个月自学了半个月的Java,现在寒假放假有空闲时间,用三天肝爆出一款之前爆火的小游戏,FlyBird,用的是IDEA开发环境。
参考了B站代码帝国的教学思路,在面向对象和构造方法中花费了不少功夫。废话不多说,以下是代码实现(素材和游戏演示视频在代码后面):
package Game;
//游戏入口主类
import java.io.IOException;
public class GameBegin {
public static void main(String[] dd) throws IOException{
GameFrame frame= new GameFrame();
frame.setVisible(true);
GamePanel panel=new GamePanel();
frame.add(panel);
}
}
package Game;
//小鸟类
import java.awt.image.BufferedImage;
import java.util.ArrayList;
import java.util.List;
public class Bird {
BufferedImage img;
int x;
int y;
int w;
int h;
//小鸟飞行轨迹
double v0;
double t;
double s;
double g;
List<BufferedImage> list;
public Bird(){
img=Tools.getImg("../img/bluebird0.png");
w=img.getWidth();
h=img.getHeight();
x=50;
y=150;
list=new ArrayList<BufferedImage>();
for(int i=0;i<4;i++){
list.add(Tools.getImg("../img/bluebird"+i+".png"));
}
v0=4;//初始化速度
t=0.21;//时间
s=0;//距离
g=0.8;//重力
}
//鸟的翅膀动起来
int index=0;
public void fly(){
if(index>=4){
index=0;
}
img=list.get(index);
index++;
}
//小鸟的落体运动
public void move(){
s=v0*t;
y=(int)(y-s);
double v2=v0-g*t;
v0=v2;
}
//小鸟向上运动
public void up(){
v0=12;
}
//小鸟与顶部碰撞或地面发生碰撞
public boolean hittop(){
if(y<=0||y>=559)
return true;
return false;
}
//小鸟和柱子之间发生碰撞
public boolean hit(Column column){
if(x>=column.x-w&&x<=column.x+column.w&&y>=column.y-h+1){
return true;
}
return false;
}
}
package Game;
import java.awt.image.BufferedImage;