java子弹追踪代码 子弹追踪模块

java飞机大战求实现让敌机打子弹的方法

首先创建四个类,敌机和英雄机子弹类,敌机类,英雄机类,类中定义各自的横竖x y坐标属性,值得注意的是,在写构造的时候,子弹的构造需要传入参数,因为子弹英雄机和敌机发出来的嘛。再定义两种子弹移动方法。移动方法很好写,子弹垂直方向发,x——就行了。再在main中调用就行了

成都网站建设公司更懂你!成都创新互联公司只做搜索引擎喜欢的网站!成都网站制作前台采用搜索引擎认可的DIV+CSS架构,全站HTML静态,H5响应式网站+CSS3网站,提供:网站建设,微信开发,成都微信小程序商城开发成都App定制开发,空间域名,服务器租售,网站代托管运营,微信公众号代托管运营。

编程如何设置追踪子弹

// x1,y1 追踪目标 x2,y2 追踪者 speed 追踪速度

FollowUpBullet(x1,y1,x2,y2,speed){undefined

var deltax = x1 - _x2

var deltay =y1 - y2

if (deltax == 0 ) {undefined

if( y1 = y2 ){undefined

deltax = 0.0000001

}else{undefined

deltax = -0.0000001

}

}

if (deltay == 0 ) {undefined

if( x1= x2 ){undefined

deltay = 0.0000001

}else{undefined

deltay = -0.0000001

}

}

var angle = 0

var π = 3.1415926

if( deltax0 deltay0 ){undefined

angle = Math.atan( Math.abs(deltay/deltax)) // 第一项限

}else if( deltax0 deltay0 ) {undefined

angle = π- Math.atan( Math.abs(deltay/deltax)) // 第二项限

}else if( deltax0 deltay0 ) {

angle = π+ Math.atan( Math.abs(deltay/deltax)) // 第三项限

}else{undefined

angle = 2*π- Math.atan( Math.abs(deltay/deltax)) // 第四项限

}

var x = speed * Math.cos(angle)

var y = speed * Math.sin(angle)

}

关于java中模拟抛物线轨迹的问题

看了这套题目感觉很有兴趣,就花了一个中午亲手给你写了一个类似的例子,相信可以帮助你对这个游戏有很好的理解,从右向左那个是僵尸,点一下鼠标就出现植物,我只是起到一个抛砖引玉的作用。代码如下(绝对可以用的代码):

import java.awt.Dimension;

import java.awt.Graphics;

import java.awt.event.MouseEvent;

import java.util.Vector;

import javax.swing.JFrame;

import javax.swing.event.MouseInputAdapter;

public class PlantsAndZombies extends JFrame {

private static final long serialVersionUID = 1L;

public static final int screenWidth=800;

public static final int screenHeight=600;

Printer printer;

Zombies zombies=new Zombies();

Thread T_Zombies;

Bullet bullet=new Bullet();

Thread T_Bullet;

public PlantsAndZombies(){

this.setSize(new Dimension(screenWidth,screenHeight));

this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

this.addMouseListener(new Shoot(this));

this.setVisible(true);

printer=new Printer( this.getGraphics());

printer.Add(zombies);

printer.Add(bullet);

T_Zombies=new Thread(zombies);

T_Zombies.start();

T_Bullet=new Thread(bullet);

T_Bullet.start();

}

public void Shoot(){

bullet.getTarget(zombies);

}

public static void main(String[] args){

PlantsAndZombies game=new PlantsAndZombies();

}

public void run() {

while(true){

}

}

}

interface Drawable{

void drawMe(Graphics g);

}

class Zombies implements Drawable,Runnable{

public boolean isLive=true;

public int x=PlantsAndZombies.screenWidth;

public int y=500;

public void run() {

while(true){

if(x10){

x-=20;

}else x=PlantsAndZombies.screenWidth;

try {

Thread.sleep(500);

} catch (InterruptedException e) {

e.printStackTrace();

}

}

}

public void drawMe(Graphics g){

g.drawRect(x,y,20,50);

}

}

class Bullet implements Drawable,Runnable{

private int x=0;

private int y=500;

private Zombies _z;

private float a,b,c;

private float step;

public void getTarget(Zombies z){

_z=z;

// 用三点确定一个抛物线的方法,计算弹道

int x1=0;

int y1=500;

int x2=(z.x-6*20)/2;

int y2=300;  // 抛物线高度200个像素

int x3=z.x-6*20; // 假设击中僵尸用3秒钟,在这3秒钟内僵尸向前移动了6*20个像素

int y3=500;

a=(float)((y2-y1)*(x3-x2)-(y3-y2)*(x2-x1))/(float)((x2*x2-x1*x1)*(x3-x2)-(x3*x3-x2*x2)*(x2-x1));

b=(float)((y2-y1)-a*(x2*x2-x1*x1))/(float)(x2-x1);

c=y1-a*x1*x1-b*x1;

step=(float)(x3-x1)/(float)(3*20);

}

public void run() {

while(true){

try {

x+=step;

y=(int)(a*x*x+b*x+c);

if(y500){

_z.isLive=false;

}

Thread.sleep(50);

} catch (InterruptedException e) {

e.printStackTrace();

}

}

}

public void drawMe(Graphics g) {

g.drawRect(x,y,20,20);

}

}

class Printer extends Thread{

private VectorDrawable v=new VectorDrawable();

private Graphics _g;

public Printer(Graphics g){

_g=g;

this.start();

}

public void Add(Drawable o){

v.add(o);

}

public void run(){

while(true){

_g.clearRect(0,0,PlantsAndZombies.screenWidth,PlantsAndZombies.screenHeight);

for(Drawable o:v){

o.drawMe(_g);

}

try {

Thread.sleep(500);

} catch (InterruptedException e) {

e.printStackTrace();

}

}

}

}

class Shoot extends MouseInputAdapter{

private PlantsAndZombies _adaptee;

public Shoot(PlantsAndZombies adaptee){

_adaptee=adaptee;

}

public void mouseClicked(MouseEvent e) {

_adaptee.Shoot();

}

}

var _gaq = _gaq || []; _gaq.push(['_setAccount', 'UA-16407365-1']);

var _gaq = _gaq || [];//定义一个数组,若_gaq不为空,则取自己的值,否则初始化为空

_gaq.push(['_setAccount', 'UA-16407365-1']);//push方法向数组中添加2个字符串元素_setAccount'和'UA-16407365-1'

(function(){})是一个闭包的用法,在javascript中用的很多也很重要,可以去好好学一下,闭包必定会被调用。

var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;//创建一个script元素,脚本类型为javasceipt,异步的类型

ga.src = ('https:' == document.location.protocol ? '' : '') + '.google-analytics.com/ga.js';//设定这个script的源代码为ga.js

var s = document.getElementsByTagName('script')[0]; //取得第一个tag名为script的元素,所谓tag名就是html中每一个元素的类型名字,比如div,img等

s.parentNode.insertBefore(ga, s);//在s前添加元素ga


文章名称:java子弹追踪代码 子弹追踪模块
文章URL:http://ybzwz.com/article/doipcoh.html