小恐龙快跑

该项目是书本上的一个例子,然后自己完成了编程实现。下面分享一些创作的难度和相关技术点。
项目是用java的一些基本操作组成,比如线程的概念,实现动画效果,
学会使用AWT绘制游戏画面,Rectangle类实现碰撞检测,学会使用javax.sound包实现播放声音.

1.线程
项目中线程是关键的一个部分,因为在实现恐龙奔跑的过程中其实就是不断的重复和重新绘制图片,那么这个过程的控制必须要用到线程的概念,通过线程才能更好的去控制相关的过程。比如说,实现恐龙奔跑的样子,实际上就是三张恐龙图片不断的绘制,视觉上达到了奔跑的效果(做的比较简陋,如果有绘图基础的同学,可以和我一起完善一下界面效果)。在FreshThead类下就是游戏中的刷新帧线程类,该类继承与Thread线程类,并且在线程的主方法中无限循环,每过一定时间重新绘制游戏面板,也就是repaint()方法。每次重绘前会先执行用户输入的指令,这样每次绘制的画面就不一样,在极短的时间内切换画面就实现了动画的效果。

2.AWT绘图
游戏主界面就是游戏的核心,先是创建了一个JFrame的一个框,然后在上面绘制了背景图片,背景图片其实就是一张图片轮流播放,定义两张一样的照片,然后定义起始位置,每一次左移一点点,然后再在后面接上一张图片,然后检测当前一张图片到尾了自动清除,然后将它绘制到紧接着他的后面。比如面板宽度800,那么第一张图片起始位置为0,第二张图片起始位置是800,每一次让它左移5,就是减5,这样当第一张图片坐标是-800的时候,整个图片就已经离开面板了,然后重新赋值,让它的坐标为800,这样便实现了背景的滚动效果。
还有就是恐龙的类和障碍的类,这是利用了图片叠加的原理,先绘制背景图片,然后绘制恐龙和障碍,那么这样就实现了游戏的界面。运动的效果其实就是x坐标的不断变化,恐龙的跳跃就是y坐标的不断变化。

public BackgroundImage() {try {image1=ImageIO.read(new File("image/99.jpg"));image2=ImageIO.read(new File("image/99.jpg"));} catch (Exception e) {e.printStackTrace();}image=new BufferedImage(800, 400,BufferedImage.TYPE_INT_RGB);g2=image.createGraphics();                            //获取主图片绘图对象x1=0;x2=800;g2.drawImage(image1,x1,0,null);}public void roll() {x1-=SPEED;                                     //第一幅图片左移x2-=SPEED;                                     //第二幅图片左移if(x1<=-800) {x1=800;}if(x2<=-800) {x2=800;}g2.drawImage(image1, x1, 0,null);g2.drawImage(image2, x2, 0,null);}

3.Rectangle的碰撞检测

if(o.getBounds().intersects(golden.getFootBounds())||o.getBounds().intersects(golden.getHeadBounds())) {Sound.hit();                              gameOver();}

o是障碍的边框,golden是恐龙的边框,如果碰撞,那么播放hit声音,然后执行gameover;游戏逻辑便建立起来了。

4.javax.sound包实现播放声音
这对我来说应该是最复杂的一部分了,而且因为java格式限制,只能用几类格式的音乐,比如wav和MP3等,而且音乐的裁剪也很复杂,背景的素材也很难找(有相关资料的同学可以找我一起完善这个项目)。
原理就是

byte[] auBuffer=new byte[1024*128];                  //创建128k缓冲区do {AudioInputStream audioinputstream=null;          //创建音频输入流对象SourceDataLine auline=null;                      //混频器源数据行try {//从音乐文件中获取音频输入流audioinputstream=AudioSystem.getAudioInputStream(soundFile);AudioFormat format=audioinputstream.getFormat();       //获取音频格式//按照源数据行类型和指定音频格式创建数据行对象DataLine.Info info=new DataLine.Info(SourceDataLine.class, format);//利用音频系统类获得与指定line.info对象中匹配的行对象auline=(SourceDataLine)AudioSystem.getLine(info);auline.open(format);                             //按照指定格式打开源数据行auline.start();                                  //源数据行开启读写活动int byteCount=0;                                 //记录音频输入流读出的字节数 while(byteCount!=-1) {                           //如果音频输入流中读取的字节数不为-1byteCount=audioinputstream.read(auBuffer, 0, auBuffer.length);//从音频数据流中读取128k的数据if(byteCount>=0) {                                            //如果读出有效数据auline.write(auBuffer, 0, byteCount);                     //将有效数据写入数据行中}}} catch (Exception e) {e.printStackTrace();}finally {try {auline.flush();} catch (Exception e2) {System.out.println("666");}auline.drain();auline.close();}} while (circulate);                //根据循环标志判断是否循环播放

然后通过判断等来播放相应的音乐!

5.游戏运行相关截图


上传不了文件夹,需要文件的或者有兴趣的朋友可以私信我。

本人在校大学生,菜鸟学习中,欢迎大佬指导,欢迎大家点赞关注!

学完java制作的一个恐龙跑酷小游戏相关推荐

  1. 谷歌恐龙游戏HTML,谷歌浏览器自带的恐龙跑酷小游戏

    Chrome浏览器,以及一些chromium内核的浏览器在断网时打开网页其实有一个小彩蛋. 这个时候如果你敲一下空格键(手机用户则是按一下触摸屏),就会发现小恐龙动起来啦~(不同的浏览器可能不是小恐龙 ...

  2. 使用Python开发一个恐龙跳跳小游戏,玩起来

    相信很多人都玩过 chrome 浏览器上提供的恐龙跑跑游戏,在我们断网或者直接在浏览器输入地址"chrome://dino/"都可以进入游戏 今天我们就是用 Python 来制作一 ...

  3. java入门经典 贴吧_学完Java经典入门 后就想编游戏了

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 回复 @windsun_ul : this is 代码: image=new BufferedImage(1000,600,BufferedImage.T ...

  4. 使用JAVA开发了一个雷霆战机小游戏^_^

    本程序使用Myeclipse开发,编码为UTF-8. 本程序实现的主要功能有玩家飞机的控制.玩家飞机子弹发射.敌机移动.敌机子弹发射.boss飞机的折线运动.boss飞机的子弹发射.玩家飞机和boss ...

  5. 学完java后学编译原理_一个资深程序员对Java初学者的学习思维路线建议

    如何学习Java,学完后尽快成为一个可以参加工作的Java开发者.现在还在待业期间,如何准备转行学习Java.相信很多初学java者都在考虑这个问题. 如果你是在校学生,务必要在学好基础(比如计算机系 ...

  6. 学完Java,可以从事什么工作

    "听说程序员 工资很高 "听说程序员工资很高,想学Java语言,但不知道它到底能做什么?" 如果你是一个Java初学者,你可能对Java应用在什么地方感到困惑.除了&qu ...

  7. Java能做什么?学完Java可以从事什么工作呢?

    如果你是一个Java初学者,你可能对Java应用在什么地方感到困惑.除了"马里奥""贪吃蛇"等经典游戏,其他领域好像也找不到Java的踪迹,那么Java究竟能做 ...

  8. 学完Java后只能做Java程序员吗 求职方向有哪些呢

    现如今Java技术已经无处不在,无论是手机软件.手机Java游戏还是电脑软件等,只要你使用到电子产品就会碰到和Java有关的东西,更多的企业正采用Java语言开发网站. 那么问题来了!学完Java后你 ...

  9. 学完Java后可从事的十大领域!

    Java是时下非常流行的语言,这意味着有很多很多不同的工作可供选择.Java软件工程师入行1-3年,年薪已达到10-15万,而且在IT行业工作经验越多,薪资待遇越高. 工作选择多,薪资待遇好,成了许多 ...

最新文章

  1. mysql 字段扩容_解决DB2事物日志满、扩充表字段长度和表空间的命令
  2. 用户体验设计常犯10个逻辑谬误
  3. 大厂围城:千辛万苦杀进来,为何他们选择出逃?
  4. FPGA之道(60)时空变换之空域优化
  5. 云计算,大数据,5G和人工智能
  6. 【Python】分享几个好用到爆的Python内置模块
  7. windows安装python库_Windows安装Python机器学习包
  8. 凸优化第六章逼近与拟合 6.2 最小范数问题
  9. 栈的应用 算术表达式转换为后缀表达式
  10. ExtJS 可视化开发工具大全
  11. STM32开发笔记03---Bit-Banding
  12. AI产业链的划分,主要可分为基础层、技术层和应用层
  13. 计算机毕设(附源码)JAVA-SSM快递代收系统
  14. 复现Transformer架构主干网络过程中的心路历程和个人感悟
  15. 日“隼鸟二号”首次降落“龙宫”取样
  16. bake lightmap in unity 2
  17. 苹果cms如何手动更换主题
  18. 计算机辅助绘图中级,计算机辅助设计CAD绘图员(中级)技能鉴定③评分标准
  19. 在谷歌浏览器Chrome中写的静态网页的<div class=“ad“>不显示,但把它放到别的浏览器中打开都能正常显示。
  20. Python实现图片中文字提取(OCR)

热门文章

  1. 安装adobe系列软件提示已损坏无法打开,如何解决?
  2. 【听】语言本能,语言进化本质探索
  3. 榕树群群聊记录01 (群号1326585)
  4. 免拆诊断 | 2018 款奥迪 A6L 车偶尔加速不良
  5. 48V/50A开关电源整流模块主电路设计
  6. QT——安装QT5.4.1 时发生Found unsuitable Qt version “” from NOTFOUND, this code requires Qt 4.x 错误的解决方法
  7. 思科CCNA EIGRP
  8. 【转】喜报|科大讯飞摘取Cityscapes评测桂冠,刷新世界记录!
  9. OLED显示温湿度(AHT20)及姓名学号
  10. 【网络技术】Qos服务质量详解!