飞机躲子弹小游戏案例
如今的网络世界,各种各样的小游戏层出不穷,但随着游戏行业的发展,有的小游戏淡出了玩家们的视野,有的小游戏则被程序员们按照现在玩家的喜好更改为其他的形式,继续陪伴着玩家。虽然我对这些小游戏关注少了,但我童年的玩游记忆并没有淡出。关于这个案例,我记得我在小时候也玩过这样类似的飞机游戏,和我写的不同的是我的游戏里没有敌对飞机,只有子弹。子弹不会消失会在接触窗口最边缘后反弹,玩家必须操作飞机进行移动躲避,直到躲不了了,飞机会被消灭,代码会记住你得游玩时间,在你输了后弹出飞机的存活时间。
用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();
}
产生窗口,产生炮弹的实例,运行线程,运行键盘监听。
飞机躲子弹小游戏案例相关推荐
- C语言关于飞机躲子弹的游戏,团队项目(2.1) -- 飞机躲避小游戏
这个项目开始于2019年下半年,也就是大二上长学期的时候,当时申报了一个校级srtp项目,自拟题为"基于瞳孔检测的注意力检测方法研究",而这一部分是作为最后眼控展示的一个小平台.有 ...
- Java-实现飞机躲子弹游戏
飞机躲子弹游戏 cn.bjst.plane Bullet.java Explode.java GameObject.java Plane.java PlaneGameFrame.java cn.bjs ...
- Java窗体实现飞机躲子弹游戏
前几天做了Java窗体实现飞机躲子弹游戏,我觉得很有必要做个笔记方便以后自己和他人查阅. 主要功能是:在一个窗体里面,用方向键盘控制飞机图片移动来躲避满屏的子弹. 由于篇幅的关系,这里主要做一个整体的 ...
- c语言小程序飞机大战,飞机大战微信小游戏:经典像素飞机大战小程序,点开即玩...
50000+游戏爱好者已加入我们! 每天推荐好玩游戏! 关注我们,沐沐带你发现好游戏! <经典像素飞机大战>游戏小程序好玩吗? <经典像素飞机大战>小游戏怎么玩? 怎么进入&l ...
- 《uni-app》一个非canvas的飞机对战小游戏实现-碰撞检测的实现
这是一个没有套路的前端博主,热衷各种前端向的骚操作,经常想到哪就写到哪,如果有感兴趣的技术和前端效果可以留言-博主看到后会去代替大家踩坑的-接下来的几篇都是uni-app的小实战,有助于我们更好的去学 ...
- 《uni-app》一个非canvas的飞机对战小游戏实现(一)准备
这是一个没有套路的前端博主,热衷各种前端向的骚操作,经常想到哪就写到哪,如果有感兴趣的技术和前端效果可以留言-博主看到后会去代替大家踩坑的-接下来的几篇都是uni-app的小实战,有助于我们更好的去学 ...
- python打飞机躲子弹
打飞机躲子弹游戏极为简约,就是漫画式的竖版弹幕作品,游戏也不分什么模式,就是不停的打飞机,看谁的分数高,有两种增益状态随机出现,蓝色的是可以限时增强飞机子弹威力的道具,红色的则是全屏清敌的炸弹.敌机也 ...
- 基于LabVIEW的飞机大作战小游戏(可做毕设)
一.前言 Python是目前相当流行的一门编程语言,网上有人用Python做了一个<飞机大作战>的小游戏,并且出了一份视频教程,很有意思."基于Python的飞机大作战小游戏&q ...
- 初识JAVA:猜数字小游戏案例---系统产生一个1-100之间的随机数,猜出这个数是多少?
package com.pku.wuyu.io; import java.util.IllegalFormatCodePointException; import java.util.Random; ...
最新文章
- Linux shell 学习笔记(2)— 监测程序、磁盘空间和处理文件(ps -ef、top、kill、df、du 、grep、tar)
- 针对抓win2003系统密码的诡计
- C语言之prinf的用法
- TensorFlow学习笔记(一):数据操作指南
- EBS DBA指南笔记(一)
- Android实现侧滑抽屉菜单,android studio自带的抽屉侧滑菜单怎么设置点击事件?还头一回遇到,汗!...
- 图片不显示问题 图片url监测改变问题
- 开发之前需要哪些文档_为什么在开发之前总是应该做文档
- Cocos2d-x 多分辨率适配完全解析
- windows查看器无法打开图片_Win7自带图片查看器异常
- websocket 如何知道对方断开_在爱情里你知道该如何和对方相处吗?
- 纯Qt版中国象棋:实现双人对战、人机对战及网络对战
- 从零到一实现一个CNI
- 易懂 | 手把手教你编写你的第一个上位机
- 如何利用python准确预测双色球开奖结果
- 第三周 AVI、MP4、WAV文件格式
- 2017百度世界大会 | 爱奇艺创始人CEO龚宇演讲速记
- 使用时testng报错问题解决方案
- CSS实现div的嵌套居中显示的多种方式
- 基金投资从入门到精通
热门文章
- 运用Python抓取二手房价格与信息的两种常用方法
- win10修复引导工具怎么用【系统天地】
- 臻鑫永晖:1万存活期1年利息多少?附核算公式
- 给地震监视器添加Notification
- 全宇宙第一编辑器VS Code搭配Markdown打造云端笔记(二:MD语法速成)
- SimpleDraweeView圆角
- centos6.0 64位挂载ntfs分区
- Java语言中抽取word、pdf的四种方法
- 月饼电商“内卷”?看数据如何驱动营销,全链路精细化运营抢占C位!
- 再见,腾讯微博!仅比新浪晚8个月,用户超3亿,宣布即将关停