package game;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.image.BufferedImage;
import javax.imageio.ImageIO;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class BirdGame extends JPanel{
/**
*
*/
private static final long serialVersionUID = 1L;
BufferedImage background;
BufferedImage startImage;
BufferedImage gameOverImage;
Ground ground;
Column column1,column2;
Bird bird;
//初始化分数
int score;
//初始化状态
int state;
public static final int START=0;//开始
public static final int RUNNING=1;//运行
public static final int GAME_OVER=2;//状态
public BirdGame() throws Exception{
//初始化背景图片
background=ImageIO.read(getClass().getResource("/resources/bg.png"));
startImage=ImageIO.read(getClass().getResource("/resources/start.png"));
gameOverImage=ImageIO.read(getClass().getResource("/resources/gameover.png"));
//初始化地面
ground = new Ground();
//初始化柱子
column1 = new Column(1);
column2 = new Column(2);
//初始化小鸟
bird = new Bird();
// 初始化分数
score = 0;
// 初始化状态
state = START;
}
public void paint(Graphics g) {
// 绘制背景
g.drawImage(background, 0, 0, null);
// 绘制地面
g.drawImage(ground.image, ground.x, ground.y, null);
// 绘制柱子
g.drawImage(column1.image, column1.x - column1.width / 2, column1.y - column1.height / 2, null);
g.drawImage(column2.image, column2.x - column2.width / 2, column2.y - column2.height / 2, null);
// 绘制小鸟(旋转坐标系)
Graphics2D g2 = (Graphics2D) g;
g2.rotate(-bird.alpha, bird.x, bird.y);
g.drawImage(bird.image, bird.x - bird.width / 2, bird.y - bird.height / 2, null);
g2.rotate(bird.alpha, bird.x, bird.y);
// 绘制分数
//Font字体类
Font f = new Font(Font.SANS_SERIF, Font.BOLD, 40);
g.setFont(f);
g.drawString("" + score, 40, 60);
g.setColor(Color.WHITE);
g.drawString("" + score, 40 - 3, 60 - 3);
// 绘制开始与结束界面
switch (state) {
case START:
g.drawImage(startImage, 0, 0, null);
break;
case GAME_OVER:
g.drawImage(gameOverImage, 0, 0, null);
break;
}
}
// 开始游戏
public void action() throws Exception {
//鼠标监听器MouseListener
//添加鼠标事件的时候,用适配器mouseAdapter可以不用实现所有的方法。只需要写自己需要的方法即可
MouseListener l = new MouseAdapter() {
// 鼠标按下事件
public void mousePressed(MouseEvent e) {
try {
switch (state) {
case START:
// 在开始状态,按下鼠标则转为运行状态。
state = RUNNING;
break;
case RUNNING:
// 在运行状态,按下鼠标则小鸟向上飞行。
bird.flappy();
break;
case GAME_OVER:
// 在结束状态,按下鼠标则重置数据,再次转为开始态。
column1 = new Column(1);
column2 = new Column(2);
bird = new Bird();
score = 0;
state = START;
break;
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
};
// 将***添加到当前的面板上
addMouseListener(l);
// 不断的移动与重绘
while (true) {
switch (state) {
case START:
// 小鸟做出飞行动作
bird.fly();
// 地面向左移动一步
ground.step();
break;
case RUNNING:
// 地面向左移动一步
ground.step();
// 柱子向左移动一步
column1.step();
column2.step();
// 小鸟做出飞行动作
bird.fly();
// 小鸟上下移动一步
bird.step();
// 计算分数
if (bird.x == column1.x || bird.x == column2.x) {
score++;
}
// 检测是否发生碰撞
if (bird.hit(ground) || bird.hit(column1) || bird.hit(column2)) {
state = GAME_OVER;
}
break;
}
// 重新绘制界面
repaint();
// 休眠 1000/60 毫秒
Thread.sleep(1000 / 60);
}
}
/**
* 启动方法
*/
public static void main(String[] args) throws Exception {
//JFrame类编程窗口,类似一个容器
JFrame frame = new JFrame();
BirdGame game = new BirdGame();
frame.add(game);
frame.setTitle("FlyBird");
frame.setSize(440, 670);//设置窗体尺寸大小
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);//可视化
game.action();//程序主入口,由此进入
}
}
最近下载更多
微信网友_7556339099734016 LV3
6月16日
微信网友_6191697646571520 LV6
2022年10月27日
迷迭香 LV10
2022年9月22日
zxy135201 LV5
2022年9月16日
agjbvfhjbg LV6
2022年9月9日
jackzhang123 LV2
2022年9月3日
cuijunjie LV3
2022年7月2日
java代写 LV7
2022年6月4日
Yj1009 LV2
2022年6月2日
牛牛最棒哈哈 LV3
2022年5月31日

最近浏览