如今的网络世界,各种各样的小游戏层出不穷,但随着游戏行业的发展,有的小游戏淡出了玩家们的视野,有的小游戏则被程序员们按照现在玩家的喜好更改为其他的形式,继续陪伴着玩家。虽然我对这些小游戏关注少了,但我童年的玩游记忆并没有淡出。关于这个案例,我记得我在小时候也玩过这样类似的飞机游戏,和我写的不同的是我的游戏里没有敌对飞机,只有子弹。子弹不会消失会在接触窗口最边缘后反弹,玩家必须操作飞机进行移动躲避,直到躲不了了,飞机会被消灭,代码会记住你得游玩时间,在你输了后弹出飞机的存活时间。

用JFrame窗口实现游戏,放上背景图片、飞机图片,再生成炮弹

通过线程睡眠、重画,产生动画。

对飞机的操作

public void drawSelf(Graphics g) {

if(live) {

g.drawImage(img, (int)x, (int)y, null);

if(left) {

x -=speed;

}

if(right) {

x +=speed;

}

if(top) {

y -=speed;

}

if(down) {

y +=speed;

}

}else {

}

}

修改坐标值,进行重画的时候,飞机位置会发生改变。

通过操作键盘改变坐标值。

在主函数中定义监听键盘的内部类:

//定义键盘监听的内部类

class  KeyMonitor extends KeyAdapter{

@Override

public void keyPressed(KeyEvent e) {

pon.addDirection(e);

}

@Override

public void keyReleased(KeyEvent e) {

pon.minusDirection(e);

}

}

Pon是飞机类的一个实例,内部类中引用了它的两个方法,针对键盘不同状态时,对飞机坐标的改变。

VK_LEFT指的是键盘上的左方向键,UP则对应上,DOWN为下,RIGHT为右

public void addDirection(KeyEvent e) {

switch(e.getKeyCode()) {

case KeyEvent.VK_LEFT:

left = true;

break;

case KeyEvent.VK_UP:

top = true;

break;

case KeyEvent.VK_RIGHT:

right = true;

break;

case KeyEvent.VK_DOWN:

down = true;

break;

}

}

public void minusDirection(KeyEvent e) {

switch(e.getKeyCode()) {

case KeyEvent.VK_LEFT:

left = false;

break;

case KeyEvent.VK_UP:

top = false;

break;

case KeyEvent.VK_RIGHT:

right = false;

break;

case KeyEvent.VK_DOWN:

down = false;

break;

}

}

通过这些代码可以实现,按下键盘飞机动,抬起键盘飞机停

炮弹飞行角度,和触碰到尽头时炮弹返回的效果

double degree;

public shell() {

x = 200;

y = 200;

width = 10;

height  =10;

speed = 3;

degree =Math.random()*Math.PI*2;

}

public void draw(Graphics g) {

// TODO Auto-generated method stub

Color c =g.getColor();

g.setColor(Color.YELLOW);

g.fillOval((int)x, (int)y, width, height);

x +=speed*Math.cos(degree);

y +=speed*Math.sin(degree);

if(x<0||x>Constant.GAME_WIDTH-width) {

degree = Math.PI-degree;

}

if(y<30||y>Constant.GAME_HIGHT-height) {

degree =-degree;

}

}

实现炮弹反弹,当炮弹运行到窗口的最端时,比如上端或下端,将炮弹运行速度y变为它的相反值,左端或右端相同的改变运行速度x的值。关于这个角度,在声明时Math.random()*Math.PI*2 大概意思是在角度360度中取随机值。在炮弹撞墙改变轨迹时,比如 炮弹碰到上端了,然后为了使炮弹反弹回去就把炮弹运行的角度取了它自己的相反数,

就比如说炮弹本来是向左上飞的,那么他飞行的角度就在180度 到 90度之间,在它碰上端的时候,角度取相反值,那么它飞行的角度就在-180度到-90度之间了变成向左下飞了。若是碰到了左端,那么它飞行的角度就变成了0度到90度之间了,变成了向右上飞。

public void paint(Graphics g) {

Color c =g.getColor();

Font f =g.getFont();

g.drawImage(bull,0,0, null);

pon.drawSelf(g);

for(int i=0;i<shes.length;i++) {

shes[i].draw(g);

peng = shes[i].getRect().intersects(pon.getRect());

if(peng) {

pon.live = false;

if(bao == null) {

bao = new Explode(pon.x, pon.y);

endTime = new Date();

period =(int)((endTime.getTime()-startTime.getTime())/1000);

}

bao.draw(g);

}

if(!pon.live) {

g.setColor(Color.red);

Font f1 =new Font("宋体",Font.BOLD,25);

g.setFont(f1);

g.drawString("时间 : "+period+"秒",(int)pon.x,(int)pon.y);

}

}

g.setColor(c);

g.setFont(f);

}

bull 指的是背景。 pon 则是已经声明了的飞机的类,调用draw将飞机画在了窗口里。shes 是炮弹类的对象数组,遍历调用使炮弹出现在窗口上。

peng = shes[i].getRect().intersects(pon.getRect()); 判断炮弹是否与飞机相撞,相撞则返回true,返回飞机的坐标,在飞机坐标的位置,遍历爆炸的图片,产生爆炸效果。飞机在与炮弹相撞后死亡,在飞机死亡的位置,跳出游戏时间。

class  PaintThread  extends  Thread  {

@Override

public void run() {

while(true){

repaint(); //重画

try {

Thread.sleep(24);    //1s=1000ms

} catch (InterruptedException e) {

e.printStackTrace();

}

}

}

}

通过while(true)不停的使用 repaint(),每调用一次休眠24毫秒,炮弹和飞机会不停的在窗口上打印,随着它们坐标的变动,动画效果就出现了

public void launchFrame() {

this.setTitle("抄写");

this.setVisible(true);

this.setSize(500, 500);

this.setLocation(300, 300);

this.addWindowListener(new WindowAdapter() {

@Override

public void windowClosing(WindowEvent e) {

System.exit(0);

}

});

new PaintThread().start();

addKeyListener(new KeyMonitor());

for(int i=0;i<shes.length;i++) {

shes[i] = new shell();

}

}

public static void main(String[] args) {

MyGameFile mygamefile = new MyGameFile();

mygamefile.launchFrame();

}

产生窗口,产生炮弹的实例,运行线程,运行键盘监听。

飞机躲子弹小游戏案例相关推荐

  1. C语言关于飞机躲子弹的游戏,团队项目(2.1) -- 飞机躲避小游戏

    这个项目开始于2019年下半年,也就是大二上长学期的时候,当时申报了一个校级srtp项目,自拟题为"基于瞳孔检测的注意力检测方法研究",而这一部分是作为最后眼控展示的一个小平台.有 ...

  2. Java-实现飞机躲子弹游戏

    飞机躲子弹游戏 cn.bjst.plane Bullet.java Explode.java GameObject.java Plane.java PlaneGameFrame.java cn.bjs ...

  3. Java窗体实现飞机躲子弹游戏

    前几天做了Java窗体实现飞机躲子弹游戏,我觉得很有必要做个笔记方便以后自己和他人查阅. 主要功能是:在一个窗体里面,用方向键盘控制飞机图片移动来躲避满屏的子弹. 由于篇幅的关系,这里主要做一个整体的 ...

  4. c语言小程序飞机大战,飞机大战微信小游戏:经典像素飞机大战小程序,点开即玩...

    50000+游戏爱好者已加入我们! 每天推荐好玩游戏! 关注我们,沐沐带你发现好游戏! <经典像素飞机大战>游戏小程序好玩吗? <经典像素飞机大战>小游戏怎么玩? 怎么进入&l ...

  5. 《uni-app》一个非canvas的飞机对战小游戏实现-碰撞检测的实现

    这是一个没有套路的前端博主,热衷各种前端向的骚操作,经常想到哪就写到哪,如果有感兴趣的技术和前端效果可以留言-博主看到后会去代替大家踩坑的-接下来的几篇都是uni-app的小实战,有助于我们更好的去学 ...

  6. 《uni-app》一个非canvas的飞机对战小游戏实现(一)准备

    这是一个没有套路的前端博主,热衷各种前端向的骚操作,经常想到哪就写到哪,如果有感兴趣的技术和前端效果可以留言-博主看到后会去代替大家踩坑的-接下来的几篇都是uni-app的小实战,有助于我们更好的去学 ...

  7. python打飞机躲子弹

    打飞机躲子弹游戏极为简约,就是漫画式的竖版弹幕作品,游戏也不分什么模式,就是不停的打飞机,看谁的分数高,有两种增益状态随机出现,蓝色的是可以限时增强飞机子弹威力的道具,红色的则是全屏清敌的炸弹.敌机也 ...

  8. 基于LabVIEW的飞机大作战小游戏(可做毕设)

    一.前言 Python是目前相当流行的一门编程语言,网上有人用Python做了一个<飞机大作战>的小游戏,并且出了一份视频教程,很有意思."基于Python的飞机大作战小游戏&q ...

  9. 初识JAVA:猜数字小游戏案例---系统产生一个1-100之间的随机数,猜出这个数是多少?

    package com.pku.wuyu.io; import java.util.IllegalFormatCodePointException; import java.util.Random; ...

最新文章

  1. Linux shell 学习笔记(2)— 监测程序、磁盘空间和处理文件(ps -ef、top、kill、df、du 、grep、tar)
  2. 针对抓win2003系统密码的诡计
  3. C语言之prinf的用法
  4. TensorFlow学习笔记(一):数据操作指南
  5. EBS DBA指南笔记(一)
  6. Android实现侧滑抽屉菜单,android studio自带的抽屉侧滑菜单怎么设置点击事件?还头一回遇到,汗!...
  7. 图片不显示问题 图片url监测改变问题
  8. 开发之前需要哪些文档_为什么在开发之前总是应该做文档
  9. Cocos2d-x 多分辨率适配完全解析
  10. windows查看器无法打开图片_Win7自带图片查看器异常
  11. websocket 如何知道对方断开_在爱情里你知道该如何和对方相处吗?
  12. 纯Qt版中国象棋:实现双人对战、人机对战及网络对战
  13. 从零到一实现一个CNI
  14. 易懂 | 手把手教你编写你的第一个上位机
  15. 如何利用python准确预测双色球开奖结果
  16. 第三周 AVI、MP4、WAV文件格式
  17. 2017百度世界大会 | 爱奇艺创始人CEO龚宇演讲速记
  18. 使用时testng报错问题解决方案
  19. CSS实现div的嵌套居中显示的多种方式
  20. 基金投资从入门到精通

热门文章

  1. 运用Python抓取二手房价格与信息的两种常用方法
  2. win10修复引导工具怎么用【系统天地】
  3. 臻鑫永晖:1万存活期1年利息多少?附核算公式
  4. 给地震监视器添加Notification
  5. 全宇宙第一编辑器VS Code搭配Markdown打造云端笔记(二:MD语法速成)
  6. SimpleDraweeView圆角
  7. centos6.0 64位挂载ntfs分区
  8. Java语言中抽取word、pdf的四种方法
  9. 月饼电商“内卷”?看数据如何驱动营销,全链路精细化运营抢占C位!
  10. 再见,腾讯微博!仅比新浪晚8个月,用户超3亿,宣布即将关停