FlappyBird—仅供娱乐
2015-12-02 10:07
597 查看
原文:FlappyBird—仅供娱乐
源代码下载地址:http://www.zuidaima.com/share/1710876338916352.htm
运行截图:
![](http://static.zuidaima.com/images/12391/201402/20140225111804229_324x510.jpg)
源代码下载地址:http://www.zuidaima.com/share/1710876338916352.htm
运行截图:
![](http://static.zuidaima.com/images/12391/201402/20140225111804229_324x510.jpg)
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, 0 , 0 , null ); |
111 | //绘制柱子 |
112 | column1.paint(g); |
113 | column2.paint(g); |
114 | //绘制地面 |
115 | ground.paint(g); |
116 | //绘制分数 |
117 | Font font = new Font(Font.MONOSPACED, 30 ); |
118 | g.setFont(font); |
119 | g.setColor(Color.white); |
120 | g.drawString(score+ "" , 30 , 50 ); |
121 | //绘制小鸟 |
122 | bird.paint(g); |
123 | //绘制结束状态 |
124 | if (gameOver){ |
125 | //g.drawString("Game |
126 | g.drawImage(gameoverImg, 0 , 0 , null ); |
127 | return ; |
128 | } |
129 | if (! start){ |
130 | //g.drawString("Start |
131 | g.drawImage(startImg, 0 , 0 , null ); |
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( 325 , 505 ); |
139 | frame.setResizable( false ); |
140 | frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); |
141 | frame.setLocationRelativeTo( null ); |
142 | frame.setVisible( true ); |
143 | world.action(); |
144 | } |
145 | } |
相关文章推荐
- 我是运营,我没有假期
- [原创]java局域网聊天系统
- java很神奇 用swing制作欢迎屏幕
- 每个 Linux 游戏玩家都绝不想要的恼人体验
- 在 Fedora 上使用 Steam play 和 Proton 来玩 Windows 游戏
- Steam 让我们在 Linux 上玩 Windows 的游戏更加容易
- 如何使用 Steam Play 在 Linux 上玩仅限 Windows 的游戏
- 新一代iPad适配应用之游戏篇
- VB实现的《QQ美女找茬游戏》作弊器实例
- C#实现洗牌游戏实例
- C#实现的算24点游戏算法实例分析
- C#实现简单的井字游戏实例
- C++编写简单的打靶游戏
- C++实现基于控制台界面的吃豆子游戏
- 纯javascript实现的小游戏《Flappy Pig》实例
- JavaScript实现俄罗斯方块游戏过程分析及源码分享
- JS小游戏之仙剑翻牌源码详解
- JS小游戏之宇宙战机源码详解
- Android基本游戏循环实例分析
- JavaScript游戏之优化篇