package com.diao.flybird;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import javax.swing.ImageIcon;
public class FlyBirdClient extends Frame implements MouseListener {
private static final long serialVersionUID = 1L;
private int bird_X = 40, bird_Y = 50;
private int game_width = 300; // 背景图宽
private int game_heigth = 400; // 背景图高
private int land_heigth = 64; // 地面的高
private int grade = 0; // 分数
private static int bestGrade = 0; // 分数保存功能没完成
public static boolean flag = true;
public List<Pillar> pillarList = new ArrayList<Pillar>();
char[] gradeStr = null;
Thread birdThread = null;
Thread pillarThread = null;
private static boolean isgamebegin = false;
private static boolean isgameready = false;
private Image backgroundImage = null;
private static ImageIcon brid = new ImageIcon("images\\bird\\中.png");
private ImageIcon background = new ImageIcon("images\\background\\白天.png");
private ImageIcon land = new ImageIcon("images\\background\\地.png");
private ImageIcon begin = new ImageIcon("images\\other\\开始.png");
private ImageIcon ready = new ImageIcon("images\\ready\\中.png");
private ImageIcon gameover = new ImageIcon("images\\other\\gameover.png");
private ImageIcon restart = new ImageIcon("images\\other\\重来.png");
private ImageIcon rankinglist = new ImageIcon("images\\other\\排行榜.png");
private ImageIcon scoreboard = new ImageIcon("images\\other\\记分牌.png");
public void launchFrame() {
this.setBounds(100, 100, game_width, game_heigth + land_heigth);
this.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
setVisible(false);
System.exit(0);
}
});
this.addMouseListener(this);
this.setTitle("FlyBird");
this.setResizable(false);
this.setVisible(true);
}
@Override
public void update(Graphics g) {
// System.out.println("---------------ddd-----------");
// 1.得到缓冲图像
if (this.backgroundImage == null) {
this.backgroundImage = this.createImage(game_width, game_heigth
+ land_heigth);
}
// 2.得到缓冲图像的画笔
Graphics bufferg = this.backgroundImage.getGraphics();
// 3.绘制缓冲图像
bufferg.drawImage(background.getImage(), 0, 0, game_width, game_heigth,
null); // 背景
bufferg.drawImage(land.getImage(), 0, game_heigth, game_width,
land_heigth, null); // 地面
// 4.调用paint(),将缓冲图象的画笔传入
paint(bufferg);
// 5.再将此缓冲图像一次性绘到代表屏幕的Graphics对象,即该方法传入的“g”上
g.drawImage(backgroundImage, 0, 0, null);
}
@Override
public void paint(Graphics g) {
if (isgamebegin) {
for (Iterator<Pillar> i = pillarList.iterator(); i.hasNext();) {
Pillar p = i.next();
if (p.Pillar_x + p.PillarWitdh < 0) {
i.remove(); // 移除集合中的柱子对象
} else {
p.drawPillar(g);
p.Pillar_x -= 2;
if (p.Pillar_x == 40 || p.Pillar_x == 41) { // 因为鸟是不动的,所有当柱子的x坐标等于鸟的x坐标,则分数加一;
System.out.println(p.Pillar_x);
grade++;
}
}
}
gradeStr = (grade + "").toCharArray();
for (int i = 0; i < gradeStr.length; i++) {
g.drawImage(new ImageIcon("images\\number\\" + gradeStr[i]
+ ".png").getImage(), 148 + 27 * i, 80, 15, 25, null);
}
g.drawImage(brid.getImage(), bird_X, bird_Y, 30, 35, null); // 显示小鸟
bird_Y += 6;
} else if (isgameready) {
g.drawImage(ready.getImage(), 0, 0, game_width, game_heigth, null); // 显示开始图片
g.drawImage(land.getImage(), 0, game_heigth, game_width,
land_heigth, null); // 地面
isgameready = false;
} else {
g.drawImage(begin.getImage(), 0, 0, game_width, game_heigth, null); // 显示开始图片
g.drawImage(land.getImage(), 0, game_heigth, game_width,
land_heigth, null); // 地面
}
if (!flag) {
g.drawImage(gameover.getImage(), 50, 100, 200, 70, null); // 显示gameover图片
g.drawImage(scoreboard.getImage(), 50, 180, 200, 130, null); // 显示记分牌图片
if (grade > bestGrade) {
g.drawString(grade + "", 202, 282); // 显示最好分数
} else {
g.drawString(bestGrade + "", 202, 282); // 显示最好分数
}
g.drawString(grade + "", 198, 235); // 显示分数
g.drawImage(restart.getImage(), 35, 335, 100, 65, null); // 显示重来图片
g.drawImage(rankinglist.getImage(), 180, 335, 100, 65, null); // 显示排行榜图片
}
}
class PaintBridThread implements Runnable { // 控制鸟的线程
public void run() {
while (flag) {
if (bird_Y + 30 > game_heigth) {
flag = false;
}
for (Iterator<Pillar> i = pillarList.iterator(); i.hasNext();) {
Pillar p = i.next();
if (Rect.isRectIntersect(bird_X, bird_Y, bird_X + 25, // 碰撞检测
bird_Y + 25, p.Pillar_x, 0, p.Pillar_x
+ p.PillarWitdh, p.temp1)
|| Rect.isRectIntersect(bird_X, bird_Y,
bird_X + 25, bird_Y + 25, p.Pillar_x,
p.temp1 + p.PillarSpace, p.Pillar_x
+ p.PillarWitdh, game_heigth)) {
flag = false;
}
}
repaint();
try {
Thread.sleep(50);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
class PaintPillarThread implements Runnable { // 控制柱子生成的线程
public void run() {
while (flag) {
if (bird_Y + 30 > game_heigth) {
flag = false;
}
pillarList.add(new Pillar());
// System.out.println(pillarList);
try {
Thread.sleep(4000);
// System.out.println("pillarList"+pillarList.size());
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
@Override
public void mouseClicked(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mousePressed(MouseEvent e) {
// TODO Auto-generated method stub
if (flag) {
bird_Y = bird_Y - 45;
repaint();
}
}
@Override
public void mouseReleased(MouseEvent e) {
// TODO Auto-generated method stub
if (!isgamebegin) {
if (e.getX() > 35 && e.getX() < 130 && e.getY() > 335
&& e.getY() < 390) {
isgamebegin = true;
birdThread = new Thread(new PaintPillarThread());
pillarThread = new Thread(new PaintBridThread());
birdThread.start();
pillarThread.start();
}
}
}
@Override
public void mouseEntered(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub
}
public static void main(String[] args) {
FlyBirdClient tc = new FlyBirdClient();
tc.launchFrame();
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
java flyppybird源码
共40个文件
png:27个
class:6个
java:3个
需积分: 3 7 下载量 53 浏览量
2014-05-26
18:09:24
上传
评论
收藏 439KB ZIP 举报
温馨提示
flyppybird使用java来实现。将源码放于eclipse中就可以编译运行,flyppybird用java来实现的话,难点在于双缓冲和线程,由于时间问题做的并不是很精致和完整,但用于学习线程和双缓冲是很不错的源码。最后想手机游戏flyppybird致敬!
资源推荐
资源详情
资源评论
收起资源包目录
FlyBird0.2.zip (40个子文件)
FlyBird0.2
.project 386B
bin
com
diao
flybird
Rect.class 574B
FlyBirdClient$1.class 785B
Pillar.class 1KB
FlyBirdClient$PaintPillarThread.class 1KB
FlyBirdClient$PaintBridThread.class 2KB
FlyBirdClient.class 6KB
.settings
org.eclipse.jdt.core.prefs 598B
src
com
diao
flybird
FlyBirdClient.java 7KB
Pillar.java 932B
Rect.java 331B
images
ready
上.png 72KB
下.png 72KB
中.png 71KB
other
重来.png 5KB
排行榜.png 6KB
gameover.png 15KB
加载.png 27KB
开始.png 50KB
记分牌.png 10KB
bird
上.png 3KB
下.png 3KB
中.png 3KB
number
5.png 440B
3.png 471B
0.png 402B
4.png 459B
9.png 316B
score.bmp 68KB
7.png 328B
8.png 347B
6.png 385B
1.png 349B
2.png 455B
background
黑夜.png 38KB
地.png 2KB
白天.png 34KB
pillar
反.png 4KB
正.png 4KB
.classpath 301B
共 40 条
- 1
资源评论
diao000001
- 粉丝: 5
- 资源: 5
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功