基本信息
源码名称:java 愤怒的小鸟(flybird)源码
源码大小:6.81M
文件格式:.zip
开发语言:Java
更新时间:2020-06-15
   友情提示:(无需注册或充值,赞助后即可获取资源下载链接)

     嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):813200300

本次赞助数额为: 2 元 
   源码介绍

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();
		        }
			}
		}
	 }
}