FlappyBird—仅供娱乐

11 篇文章 0 订阅

原文:FlappyBird—仅供娱乐

源代码下载地址:http://www.zuidaima.com/share/1710876338916352.htm

运行截图:

FlappyBird—仅供娱乐

001 package com.tarena.bird;
002  
003 import java.awt.Color;
004 import java.awt.Font;
005 import java.awt.Graphics;
006 import java.awt.Graphics2D;
007 import java.awt.RenderingHints;
008 import java.awt.event.KeyAdapter;
009 import java.awt.event.KeyEvent;
010 import java.awt.event.MouseAdapter;
011 import java.awt.event.MouseEvent;
012 import java.awt.image.BufferedImage;
013 import java.io.IOException;
014  
015 import javax.imageio.ImageIO;
016 import javax.swing.JFrame;
017 import javax.swing.JPanel;
018  
019 public class World extends JPanel {
020      
021     Column column1;
022     Column column2;
023     Bird bird;
024     Ground ground;
025     BufferedImage background;
026     BufferedImage gameoverImg;
027     BufferedImage startImg;
028      
029     boolean start;
030     int score;
031     boolean gameOver;
032  
033     public World() throws IOException {
034         background = ImageIO.read(getClass().getResource("bg.png"));
035         gameoverImg = ImageIO.read(getClass().getResource("gameover.png"));
036         startImg = ImageIO.read(getClass().getResource("start.png"));
037         start();
038     }
039     public void start(){
040         try {
041             start = false;
042             gameOver = false;
043             bird = new Bird();
044             ground = new Ground(400);
045             column1 = new Column(320 100);
046             column2 = new Column(320 100 180);
047             score = 0;
048         catch (Exception e) {
049             e.printStackTrace();
050         }
051     }
052     public void action() throws Exception{       
053         addMouseListener(new MouseAdapter() {
054             @Override
055             public void mousePressed(MouseEvent e) {
056                 if (gameOver) {
057                     start();
058                     return;
059                 }
060                 start = true;
061                 bird.flappy();
062             }
063         });
064         requestFocus();
065         addKeyListener(new KeyAdapter() {
066             @Override
067             public void keyPressed(KeyEvent e) {
068                 if(e.getKeyCode()==KeyEvent.VK_SPACE){
069                     if(gameOver){
070                         start();
071                         return;
072                     }
073                     start = true;
074                     bird.flappy();
075                 }
076             }
077         });
078         //主循环, 时间间隔是 1/60 秒
079         while(true){
080             if(start && !gameOver){
081                 bird.step();
082                 column1.step();
083                 column2.step();
084                 //检查是否通过柱子了
085                 if(bird.pass(column1, column2)){
086                     score++;
087                 }
088                 if(bird.hit(column1, column2, ground)){
089                     start = false;
090                     gameOver = true;
091                 }
092             }
093             ground.step();
094             repaint();
095             Thread.sleep(1000/60);
096         }
097                  
098     }
099     @Override
100     public void paint(Graphics g) {
101         //抗锯齿代码
102         Graphics2D g2 = (Graphics2D)g;
103         RenderingHints qualityHints = new RenderingHints(
104                 RenderingHints.KEY_ANTIALIASING,
105                 RenderingHints.VALUE_ANTIALIAS_ON);
106         qualityHints.put(RenderingHints.KEY_RENDERING,
107                 RenderingHints.VALUE_RENDER_QUALITY);
108         g2.setRenderingHints(qualityHints);
109         //绘制背景
110         g.drawImage(background, 00null);
111         //绘制柱子
112         column1.paint(g);
113         column2.paint(g);
114         //绘制地面
115         ground.paint(g);
116         //绘制分数
117         Font font = new Font(Font.MONOSPACED, Font.BOLD, 30);
118         g.setFont(font);
119         g.setColor(Color.white);
120         g.drawString(score+""3050);
121         //绘制小鸟
122         bird.paint(g);
123         //绘制结束状态
124         if(gameOver){
125             //g.drawString("Game Over!", 70 , 190);
126             g.drawImage(gameoverImg, 00null);
127             return;
128         }
129         if(! start){
130             //g.drawString("Start >>>", bird.x+35, bird.y);
131             g.drawImage(startImg, 00null);
132         }
133     }
134     public static void main(String[] args) throws Exception {
135         JFrame frame = new JFrame("飞扬小鸟");
136         World world = new World();
137         frame.add(world);
138         frame.setSize(325505);
139         frame.setResizable(false);
140         frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
141         frame.setLocationRelativeTo(null);
142         frame.setVisible(true);
143         world.action();
144     }
145 }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值