实例介绍
【实例截图】
【核心代码】
package cn.ucai.game; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.image.BufferedImage; import java.io.IOException; import javax.imageio.ImageIO; import javax.swing.JPanel; /** * 本类继承jpanel 实现画板类 * */ public class BirdGame extends JPanel { public int state;//声明游戏状态的变量 public int score;//声明分数变量 /*游戏状态有三种,开始状态,运行状态,游戏结束*/ public static final int START =0;//游戏开始状态常量值的声明 public static final int RUNNING = 1;//游戏运行时状态的常量值声明 public static final int GAMEOVER = 2;//游戏结束状态常量值声明 /*声明图片变量 * BufferedImage * */ public BufferedImage backgroundImage = null; public BufferedImage startImage = null; public BufferedImage overImage = null; /* * 声明对象 * */ Bird bird;//小鸟 Column column1;//管道1 Column column2;//管道2 Ground ground;//地面 public BirdGame() throws IOException{ state = START;//游戏开始状态 score = 0;// 游戏分数为0 //ImageIO.read方法 的意思就是找到本类的同级目录下的图片资源 backgroundImage = ImageIO.read(getClass().getResource("bg.png")); startImage = ImageIO.read(getClass().getResource("start.png")); overImage = ImageIO.read(getClass().getResource("gameover.png")); bird = new Bird(); column1 = new Column(1); column2 = new Column(2); ground = new Ground(); } //重写画图方法 @Override public void paint(Graphics g) { // TODO Auto-generated method stub super.paint(g); /*绘制游戏的背景图片 * 参数一: 图片 参数二三:图片放置的位置 参数三:背景颜色 不需要就设置为null * */ g.drawImage(backgroundImage, 0, 0, null); //创建字体对象 Font font = new Font(Font.SANS_SERIF,Font.BOLD,40); //给笔修改字体 g.setFont(font); //设置分数显示成白色 g.setColor(Color.white); //在画布上画分数 g.drawString(score "", 40, 60); //创建画布旋转的对象 Graphics2D Graphics2D g2D = (Graphics2D) g; //利用Graphics2D对象进行画布的旋转 //第一个参数旋转的角度,第二第三个参数:定义旋转的中心点 g2D.rotate(-bird.rad, bird.x, bird.y); //绘制小鸟 g.drawImage(bird.image, bird.x-bird.width/2, bird.y-bird.height/2, null); //将画布转正 g2D.rotate(bird.rad, bird.x,bird.y); //绘制管道 g.drawImage(column1.image, column1.x-column1.width/2, column1.y-column1.height/2, null); g.drawImage(column2.image, column2.x-column2.width/2, column2.y-column2.height/2, null); //绘制地面 g.drawImage(ground.image, ground.x, ground.y, null); //绘制游戏状态,不同的游戏状态显示不同的图片! if(state==START){ g.drawImage(startImage, 0, 0, null);//绘制游戏开始的状态 }else if(state == GAMEOVER){ g.drawImage(overImage, 0, 0, null);//绘制游戏结束的图片 } } //创建动作方法,使游戏动起来 public void action(){ //声明鼠标监听对象 MouseListener mouseListenser = new MouseAdapter() { //重写鼠标点击事件 @Override public void mousePressed(MouseEvent e) { // TODO Auto-generated method stub super.mousePressed(e); switch(state){ case START: state=RUNNING;//鼠标点击之后,状态改成运行时状态 break; case RUNNING: bird.flyUp();//运行时,让小鸟飞起来 break; case GAMEOVER: state = START; score = 0; try { bird = new Bird(); column1=new Column(1); column2 = new Column(2); ground = new Ground(); } catch (IOException e1) { e1.printStackTrace(); } break; } } }; this.addMouseListener(mouseListenser); //为了连续的点击,创建死循环 while(true){ switch(state){ case START: bird.fly(); break; case RUNNING: ground.step(); bird.fly(); column1.step(); column2.step(); bird.step(); //判断得分 if(bird.x==column1.x||bird.x==column2.x){ score ; } //碰撞处理 if(bird.hit(column1)||bird.hit(column2)||bird.hit(ground)){ state = GAMEOVER; } break; } repaint();//重新画图,实现动画的效果! try { Thread.sleep(1000/60); } catch (InterruptedException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } } } }
标签:
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
网友评论
我要评论