在好例子网,分享、交流、成长!
您当前所在位置:首页Java 开发实例Java游戏开发 → java 愤怒的小鸟(flybird)源码

java 愤怒的小鸟(flybird)源码

Java游戏开发

下载此实例
  • 开发语言:Java
  • 实例大小:6.81M
  • 下载次数:8
  • 浏览次数:153
  • 发布时间:2020-06-15
  • 实例类别:Java游戏开发
  • 发 布 人:qq1236484
  • 所需积分:2
 相关标签: bird fly

实例介绍

【实例简介】

【实例截图】

from clipboard

【核心代码】

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

标签: bird fly

实例下载地址

java 愤怒的小鸟(flybird)源码

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
;
报警