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日