您的位置:首页 > 移动开发

FlappyBird—仅供娱乐

2015-12-02 10:07 597 查看
原文:FlappyBird—仅供娱乐

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

运行截图:





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,
Font.BOLD,
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
Over!",70 ,190);
126
g.drawImage(gameoverImg,
0
,
0
,
null
);
127
return
;
128
}
129
if
(!
start){
130
//g.drawString("Start
>>>",bird.x+35,bird.y);
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
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息