实例介绍
【实例简介】
【实例截图】
【核心代码】
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();
}
}
}
}
}
好例子网口号:伸出你的我的手 — 分享!
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明


网友评论
我要评论