java愤怒的小鸟代码_java 愤怒的小鸟(flybird)源码

【实例简介】

【实例截图】

03b2e0597f286fd9e471a034c3be693f.png

【核心代码】

package game;

import java.awt.Color;

import java.awt.Font;

import java.awt.Graphics;

import java.awt.event.MouseAdapter;

import java.awt.event.MouseEvent;

import java.awt.image.BufferedImage;

import java.io.IOException;

import java.util.Random;

import javax.imageio.ImageIO;

import javax.swing.JPanel;

/**

* 画板类

* @author Mr.yi

*

*/

public class GamePanel extends JPanel{

//声明一个变量用于存放背景图片

BufferedImage bg;

//声明一个变量用于存放地面对象

Ground ground;

//声明一个变量用于存放第一根管子对象

Column column1;

//声明一个变量用于存放第二根管子对象

Column column2;

//声明一个变量存放小鸟对象

Bird bird;

//声明一个变量存放导弹对象

Guided guided;

//声明游戏的准备状态对象

boolean start;

//声明游戏结束状态

boolean gameover;

//声明分数对象

int score;

//构造器

public GamePanel(){

//设置背景色

setBackground(Color.PINK);

//设置背景图片

try {

bg = Tools.getimg("../img/bg.png");

} catch (IOException e) {

e.printStackTrace();

}

//初始化地面对象

ground=new Ground();

//初始化第一根管子对象

column1=new Column(1,ground.h);

//初始化第二根管子对象

column2=new Column(2,ground.h);

//初始化鸟对象

bird=new Bird();

//初始化导弹对象

guided=new Guided(ground.h);

//初始化游戏开始状态

start=false;

//初始化游戏结束状态

gameover=false;

//设置初始分数

score=0;

//创建鼠标监听器

MouseAdapter adapter = new MouseAdapter() {

//鼠标点击事件

@Override

public void mouseClicked(MouseEvent e) {

if(start == false){

//将游戏状态改变为游戏开始状态

start = true;

//启动

start();

//刷新

repaint();

}else if(gameover==true){

//切换到游戏准备状态

start = false;

gameover=false;

//重新初始化所有属性

//初始化地面对象

ground=new Ground();

//初始化第一根管子对象

column1=new Column(1,ground.h);

//初始化第二根管子对象

column2=new Column(2,ground.h);

//初始化鸟对象

bird=new Bird();

//初始化导弹对象

guided=new Guided(ground.h);

//初始化分数

score =0;

//刷新

repaint();

}

//小鸟上移

bird.moveup();

}

};

//将监听器适配到画板中

this.addMouseListener(adapter);

}

/**

* 画图的方法

* g就相当于画笔

*/

@Override

public void paint(Graphics g) {

//绘制背景图片

g.drawImage(bg,0,0,null);//0,0表示起始坐标x,y在左上角

//绘制第一根管子图片

g.drawImage(column1.bg2,column1.x,column1.y,column1.w,column1.h,null);

//绘制第二根管子图片

g.drawImage(column2.bg2,column2.x,column2.y,column2.w,column2.h,null);

//绘制地面图片

g.drawImage(ground.img,ground.x,ground.y,ground.w,ground.h,null );

//绘制鸟图片

g.drawImage(bird.bg3,bird.x,bird.y,bird.w,bird.h,null );

//绘制导弹图片

g.drawImage(guided.bg4,guided.x,guided.y,guided.w,guided.h,null );

if(start == false){

try {

g.drawImage(Tools.getimg("../img/start.png"),0,0,null);

} catch (IOException e) {

e.printStackTrace();

}

}

if(gameover){

try {

g.drawImage(Tools.getimg("../img/gameover.png"),0,0,null);

} catch (IOException e) {

e.printStackTrace();

}

}

//创建字体

Font font = new Font("楷体", Font.BOLD, 30);

//将字体设置到画笔中

g.setFont(font);

//设置画笔颜色

g.setColor(Color.red);

//设置分数字符串

g.drawString("分数" score, 30, 30);

}

//游戏启动方法

public void start(){

//创建线程工作流对象

MyThread thread = new MyThread();

//将任务放到线程对象中

Thread t = new Thread(thread);

//启动线程

t.start();//将线程纳入线程调度

//MyThread2 t2 = new MyThread2();

//t2.start();

}

//线程另一种创建方式

//public class MyThread2 extends Thread{

//@Override

//public void run() {

//while(true){

//ground.move();

//.......}}}}

//内部类创建一个线程

public class MyThread implements Runnable{

@Override

public void run() {

while(true){

ground.move();//地面移动

column1.move(ground.h);//管子1移动

column2.move(ground.h);//管子2移动

column1.moveUD(ground.h);//管子1上下移动

column2.moveUD(ground.h);//管子2上下移动

//小鸟飞行

bird.fly();

//小鸟下落

bird.drop();

//导弹移动

guided.move(ground.h);

//检测小鸟是否撞击顶部

boolean boo = bird.hitUp();

//检测小鸟是否撞击地面

boolean boo2 =bird.hitdown(ground.h);

//检测小鸟是否撞击管子1

boolean boo3 =bird.hit(column1);

//检测小鸟是否撞击管子2

boolean boo4 =bird.hit(column2);

//检测小鸟是否撞击导弹

boolean boo5 =bird.hitguided(guided);

//判断游戏是否结束

if(boo || boo2 || boo3 || boo4 || boo5){

//结束游戏

gameover=true;

//终止游戏运行

return;

}

//计分

if(bird.x == column1.x column1.w || bird.x == column2.x column2.w){

score ;

}

try{

//休眠

if(score<2){

Thread.sleep(20);

}else if(score<3){

Thread.sleep(15);

}else if(score<4){

Thread.sleep(10);

}

Thread.sleep(7);

//刷新

repaint();

} catch (InterruptedException e){

e.printStackTrace();

}

}

}

}

}

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值