package com.qiku.bard;import javax.imageio.ImageIO;
import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.image.BufferedImage;
import java.io.IOException;/*** 游戏启动类* 通过extends关键字,继承JPanel画板类==> 于是Birdgame就具备了画板类的功能*/
public class Birdgame extends JPanel {static BufferedImage bg= null;//背景图片static BufferedImage ground_image =null;//地面图片static BufferedImage bird_image =null;//小鸟背景static BufferedImage column_image =null;//柱子背景//静态代码块  一般用于加载静态资源(视频,音频,图片等)static {//将本地的图片bg,png读取到  程序中的bgtry {bg = ImageIO.read(Birdgame.class.getResourceAsStream("bg.png"));ground_image = ImageIO.read(Birdgame.class.getResourceAsStream("ground.png"));bird_image = ImageIO.read(Birdgame.class.getResourceAsStream("0.png"));column_image = ImageIO.read(Birdgame.class.getResourceAsStream("column.png"));} catch (IOException e) {e.printStackTrace();}}Ground ground;//声明地面bird Bird;//声明小鸟Column Colum1;//声明柱子1Column Colum2;//声明柱子2//BirdGame的构造方式public Birdgame(){ground = new Ground();//创建地面对象Bird = new bird();//创建小鸟对象Colum1 = new Column();//创建柱子对象1Colum2 = new Column();//创建柱子对象2Colum2.x = Colum1.x + Colum1.distance;//柱子2的坐标=柱子1的坐标的基础上加上244(保持水平间距)}/*** 用于在画板上绘制内容的方法:想在画板上显示什么,在这个方法里面写就行了* @param g  画笔*/@Overridepublic void paint(Graphics g) {g.drawImage(bg,0,0,null);g.drawImage(column_image,Colum1.x,Colum1.y,null);g.drawImage(column_image,Colum2.x,Colum2.y,null);//g.setColor(Color.BLACK);//将画笔颜色设置为黑色;//g.fillRect(0,0,432,644);g.drawImage(ground_image,ground.x,ground.y,null);//话地面g.drawImage(Bird.image,Bird.x,Bird.y,null);}//游戏控制流程的方法public void action()throws Exception{//给当前对象(画板)添加鼠标单击事件this.addMouseListener(new MouseAdapter() {@Overridepublic void mouseClicked(MouseEvent e) {//小鸟往上飞Bird.up();}});//死循环:{}内部的代码 会一直反复的执行while (true){ground.step();//地面一直一直移动Colum1.step();Colum2.step();Bird.fly();Bird.down();// System.out.println(ground.x);repaint();//重画 即重新执行 paint方法Thread.sleep(10);}}//main方法 —程序的入口(即:有main方法,程序才能运行)public static void main(String[] args) throws Exception{//创建画框对象(即:从Java提供的资源中 获取JFrame)JFrame frame = new JFrame();Birdgame game = new Birdgame();//创建画板对象frame.setSize(432,644);//设置宽高frame.setLocationRelativeTo(null);//居中显示frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置关闭窗口的同时使程序结束frame.setVisible(true); //设置可见性frame.add(game);//将画板放在画框上//调用actiongame.action();}
}
package com.qiku.bard;import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.IOException;public class bird {int x ;//小鸟坐标int y ;int width ; //小鸟宽高int height ;BufferedImage image ;//小鸟当前状态图片BufferedImage []images ;//小鸟所有状态的图片public bird(){images = new BufferedImage[8] ;//初始化数组容量 该数组能一下保存8张图片for(int i = 0 ; i < images.length;i ++){try {images[i] = ImageIO.read(bird.class.getResourceAsStream( i+".png"));} catch (IOException e) {e.printStackTrace();}}image = Birdgame.bird_image;width = image.getWidth();height = image.getHeight();x = 200;y = 200;}//小鸟飞翔的方法int index = 0 ;public void fly(){image = images[index % images.length];index ++;}int g = 6 ;//重力加速度double t = 0.18 ;//下落时间double v = 0 ;//初速度double h = 0 ;//下落距离//小鸟下落一次public void down(){h = v * t + g * t * t / 2 ;//具体下落的距离v = v + g * t ;//末速度=当前速度+重力加速度*时间y= y + (int)h ;}public void up(){//给一个负方向的初速度即可v = -30 ;}
}
package com.qiku.bard;
/*** 柱子*/import java.awt.image.BufferedImage;public class Column {int x ;int y ;int width ;int height ;BufferedImage image ;int gap ;//上下柱子之间的间隙int distance ;//左右柱子之间的间距int  min = -(1200 / 2 - 144 / 2);int  max = 644 - 146 - 144 / 2 - 1200 / 2;public Column(){image = Birdgame.column_image;width = image.getWidth();height = image.getHeight();y = (int)( Math.random() * (max - min)+min);x = 432  ;gap = 144;distance= 244;}public  void step(){x = x -1 ;if(x <= - width){x = 432;//重新随机纵坐标y = (int)(Math.random() *(max - min) + min);}}
}
package com.qiku.bard;import java.awt.image.BufferedImage;/*** 地面类*/
public class Ground {int x ;//地面坐标int y ;int width ; //地面宽高int height ;BufferedImage image ;//地面图片public Ground(){image = Birdgame.ground_image ;x = 0 ;y = Birdgame.bg.getHeight()-image.getHeight() ;width = image.getWidth();height = image.getHeight();}/*** 地面走一步的方法*/public  void step(){x = x - 1;if(x <= 432 - width ){x = 0 ;}}
}

简单易懂的小游戏(不来试试吗?)相关推荐

  1. 微信html5切水果游戏,推荐这3个切水果的小游戏,打开微信小程序试试吧!

    现在正值夏日,想不想体验切爆水果的感觉?顺便体验体验夏日的清凉?在现实中可能无法做到的,今天在这3个小程序中让你体验,小编给你推荐3个切水果的微信小游戏,想试试的小伙伴们赶紧去搜索玩起来吧! 切水果大 ...

  2. 计算机图形学跳一跳_“跳一跳”刷不到第一?试试这几个微信小游戏!

    阅读本文前,请您先点击上面的蓝色字体,再点击"关注",这样您就可以继续免费收到文章了.每天都有分享,完全是免费订阅,请放心关注. 注:本文转载自网络,如有侵权,请联系删除谢谢. & ...

  3. Python小游戏,练手一定得试试,看似简单练习确实很实用

    前言 大家好,我是辣条 记得很久之前有发布过这么一篇: 30个Python小游戏,上班摸鱼我能玩一天[内附源码]不能说是爆火,只能说是口口相传了.不过终究还是有不少刚开始接触Python的人还是一脸蒙 ...

  4. 【机器视觉案例】(6) AI视觉,距离测量,自制AI小游戏,附python完整代码

    各位同学好,今天和大家分享一下如何使用 opencv + mediapipe 创建一个AI视觉小游戏,先放图看效果. 游戏规则,用手按下屏幕上的圆形按钮,每按一次后松开,按钮就随机出现在屏幕上的一个位 ...

  5. Python游戏开发,pygame模块,Python实现打砖块小游戏

    前言: 本期我们将利用python制作一个打砖块小游戏,废话不多说,让我们愉快地开始吧~ 效果展示 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RdjcY4gn-16 ...

  6. 我的名片能运行Linux和Python,还能玩2048小游戏,成本只要20元

    晓查 发自 凹非寺  量子位 报道 | 公众号 QbitAI 猜猜它是什么?印着姓名.职位和邮箱,看起来是个名片.可是右下角有芯片,看起来又像是个PCB电路板. 其实它是一台超迷你的ARM计算机,不仅 ...

  7. python写一个游戏多少代码-使用50行Python代码从零开始实现一个AI平衡小游戏

    集智导读: 本文会为大家展示机器学习专家 Mike Shi 如何用 50 行 Python 代码创建一个 AI,使用增强学习技术,玩耍一个保持杆子平衡的小游戏.所用环境为标准的 OpenAI Gym, ...

  8. python小游戏源码-导弹发射小游戏——Python源代码

    导弹发射小游戏 # 导弹发射小游戏完整源代码 # Designed by Mcoblack 公众号pythonwanyuxue import turtle import random # 设置屏幕画布 ...

  9. python编程小游戏-python趣味入门——写几个常玩的游戏

    文档介绍 利用python写"猜数字","猜词语","谁是卧底"这三个游戏,从而快速掌握python编程的入门知识,包括python语法/列 ...

最新文章

  1. php solr 更新数据类型,Solr更新文档数据
  2. r语言 调用c windows,R:window()函数
  3. 接口自动化-发送get请求-1
  4. SQL Server查询中特殊字符的处理方法
  5. oracle用分号拼接函数,ORACLE以逗号分隔连接列的值   函数名:wmsys.wm_concat
  6. matlab调用com组件出现错误求解决,matlab在生成COM组件编译时出现错误
  7. 区块链智能合约及形式化验证平台 VaaS 讲解
  8. 世界上第一块商用微型处理器4004
  9. ajax传参中文乱码问题解决
  10. linux rescue救援模式,Linux_linux中使用rescue救援模式,很多人都不知道Linux有一个救 - phpStudy...
  11. 自由技艺 (Liberal arts)
  12. NUC10 i7 黑苹果Big Sur 11.4 + win10 双系统安装指南
  13. uniapp遮罩_uni-app 遮罩模板
  14. 一种基于蜂窝信令数据的数据驱动型OD矩阵构建的方法:以里昂地区(法国)作为研究...
  15. Shiro @RequiresPermissions注解是如何运转的?
  16. CAD文件低版本怎么转换高版本
  17. iOS 16.2 的7个惊人变化
  18. 【从RL到DRL】深度强化学习基础(五)离散控制与连续控制——确定策略梯度方法(DPG)、使用随机策略进行连续控制
  19. ubuntu18 软件源替换成清华源
  20. SAP MM内向交货单的凭证流

热门文章

  1. 用一行CSS代码快速实现镂空邮票、优惠券效果
  2. 气相色谱几种定量方法的优缺点分析
  3. 全国计算机信息高新技术考试 办公软件应用 考试大纲 doc,全国计算机信息高新技术操作员-办公软件应用模块高级操作员级考试大纲.doc...
  4. HybVIO: 突破实时视觉惯性里程计的极限
  5. 【每日早报】2019/07/11
  6. 【部署】SpringBoot 打包部署/共享依赖包(分布式开发集中式部署微服务)精简jar包
  7. python 列表 元祖 字典 集合_python基础知识之列表、元祖、字典、集合、字符串。...
  8. Oauth2整合gitee
  9. 斗鱼VS虎牙:用户、定位、内容到资本的较量
  10. 心若天地宽,放眼尽欢颜