⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bullets.java

📁 j2me 是男人就撑20秒源代码 我
💻 JAVA
字号:
package fly;
import javax.microedition.lcdui.game.*;
import javax.microedition.lcdui.*;
import java.util.Random;

public class Bullets extends GameObject {//子弹类Bullets继承自GameObject
	private int [][] bullets;//子弹状态数组
	private int bulletstotal;//子弹总数,即数组的长度
	private Random rnd;//随机数

	public static final int BULLET_TYPE_LEFT=0;//子弹初始化的位置类型
	public static final int BULLET_TYPE_RIGHT=1;//0表示左,1表示右
	public static final int BULLET_TYPE_TOP=2;//2表示上,3表示下
	public static final int BULLET_TYPE_BOTTOM=3;

	private int width,height;//屏幕的宽和高,用于随机子弹位置

	public Bullets(Image img,int picwidth,int picheight,int bulletstotal,int width,int height){
		//子弹构造函数,用于初始化子弹
		super(img,picwidth,picheight);
		this.bulletstotal=bulletstotal;
		bullets=new int[bulletstotal][6];
		rnd=new Random();
		this.width=width;
		this.height=height;
	}//Bullets

	public void initBullets(){//初始化子弹状态数组
		for(int i=0;i<bullets.length;i++){
			initBullet(i);
		}//for
	}//initBullets

	private void initBullet(int i){//初始化第i号子弹
		bullets[i][0] = (rnd.nextInt() & 0x7fffffff)%4;//子弹的类型,有上、下、左、右四种,
		//分别表示子弹飞入屏幕前的四种位置
		bullets[i][5] = 1;//alive 1表示存活,0表示死去,即子弹的存活状态
		switch (bullets[i][0]) {
		case BULLET_TYPE_LEFT://左
			bullets[i][1]=-5;//子弹的x坐标
		    bullets[i][2]=(rnd.nextInt() & 0x7fffffff)%height;//子弹的y坐标
			bullets[i][3]=(rnd.nextInt() & 0x7fffffff)%3 + 2;//x方向速度
			bullets[i][4]=(rnd.nextInt())%3;//y方向速度
			break;
         case BULLET_TYPE_RIGHT://右
			 bullets[i][1]=width + 5;
		     bullets[i][2]=(rnd.nextInt() & 0x7fffffff)%height;
			 bullets[i][3]=((rnd.nextInt() & 0x7fffffff)%3 + 1)*-2;//x方向速度
			 bullets[i][4]=(rnd.nextInt())%3;//y方向速度
			 break;
         case BULLET_TYPE_TOP://上
			 bullets[i][1]=(rnd.nextInt() & 0x7fffffff)%width;
		     bullets[i][2]=-5;
			 bullets[i][3]=(rnd.nextInt())%3;
			 bullets[i][4]=(rnd.nextInt() & 0x7fffffff)%3 + 2;
			 break;

		 case BULLET_TYPE_BOTTOM://下
			 bullets[i][1]=(rnd.nextInt() & 0x7fffffff)%width;
		     bullets[i][2]=height + 5;
			 bullets[i][3]=(rnd.nextInt())%3;
			 bullets[i][4]=((rnd.nextInt() & 0x7fffffff)%3 + 1)*-2;
			 break;
		}//switch
}//initBullet

public void updata(int i){//根据速度更新i子弹下一桢的位置,碰壁反弹
	bullets[i][1]+=bullets[i][3];
	bullets[i][2]+=bullets[i][4];
	if(bullets[i][1]<-5 || bullets[i][1]>width+5){
		bullets[i][3]*=-1;
	}//if
	if(bullets[i][2]<-5 || bullets[i][2]>height+5){
		bullets[i][4]*=-1;
	}//if
}//updata

private void paint(Graphics g,int i){//绘画出第i个子弹
	updataspritepos(i);//更新位置
	sprite.paint(g);//绘画Sprite
}//paint

public void paint(Graphics g){//绘画整个子弹数组
	for(int i=0;i<bullets.length;i++){
		if(bullets[i][5]==0){//死去的子弹不绘画
			continue;
		}//if
		sprite.setPosition(bullets[i][1],bullets[i][2]);//更新位置
		sprite.paint(g);
	}//for
}//paint

public void refreshBullets(Sprite planesprite,boolean needcollision){
	//刷新子弹数组的状态,并作碰撞处理
	for(int i=0;i<bullets.length;i++){
		if(bullets[i][5]==0){//死去的子弹不更新
			continue;
		}//if
		if(needcollision){//如果需要碰撞检测
			if(isCollision(planesprite,i,9)){//如果碰撞,进行处理
				Navigate.mc.gameover = true;
				Navigate.mc.explosion.sprite.setPosition(bullets[i][1]-16,bullets[i][2]-16);
				bullets[i][5]=0;//杀死碰撞的子弹
				continue;
			}//if
		}//if
		updata(i);//更新状态
	}//for
}//refreshBullets

private boolean isCollision(Sprite sprite,int i,int range){//判断是否碰撞
	boolean result=false;
	int planeXCenter=sprite.getX()+12;
	int planeYCenter=sprite.getY()+12;
	int bulletXCenter=bullets[i][1]+3;
	int bulletYCenter=bullets[i][2]+3;

	if(Math.abs(planeXCenter-bulletXCenter)<range){
		//判断飞机x坐标与子弹x坐标的距离是否小于特定的值
		if(Math.abs(planeYCenter-bulletYCenter)<range){
			//判断飞机y坐标与子弹y坐标的距离是否小于特定的值
			result=true;
		}//if
	}//if
	return result;
}//isCollision

private void updataspritepos(int i){//将sprite更新到i子弹的位置
	sprite.setPosition(bullets[i][1],bullets[i][2]);
}//updataspritepos

public void killbullets(Sprite planesprite,int range){//杀死一定区域内的子弹
	for(int i=0;i<bullets.length;i++){
		if(bullets[i][5]!=0){
			if(isCollision(planesprite,i,range)){
				bullets[i][5]=0;
				initBullet(i);
			}//if
		}//if
	}//for
}//killbullets

}//Bullets

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -