📄 bullets.java
字号:
import javax.microedition.lcdui.*;
import javax.microedition.lcdui.game.*;
import java.util.*;
import java.lang.Math;
public class Bullets extends GameCanvas
{
private Sprite bulletSprite;//bullet精灵
private Random rnd;//随机数
public int bullets[][];//子弹状态的二维数组
public int width;
public int height;
public static final int BULLET_TYPE_LEFT = 0;//左0
public static final int BULLET_TYPE_RIGHT = 1;//右1
public static final int BULLET_TYPE_TOP = 2;//上2
public static final int BULLET_TYPE_BOTTOM = 3;//下3
public static final int BULLET_TYPE_TOTAL = 4;//总共类型4
public static final int BULLET_LIFE= 5;//生存状态
public static final int BULLET_X = 6;//所在横坐标位置
public static final int BULLET_Y = 7;//所在纵坐标位置
public static final int BULLET_VX = 8;//x轴分量的速度
public static final int BULLET_VY = 9;//y轴分量的速度
public Bullets(int width,int height)
{
super(true);
this.width=width;
this.height=height;
initBullets();
}
public int[][] initBullets()//子弹初始化
{
try
{
Image images = Image.createImage("/icon/bullet.png");//加入图像文件名,放入res文件
bulletSprite = new Sprite(images,6,6);
}
catch(Exception ex)
{
System.out.println("bullets"+ex);
}
bullets = new int[20][10];//实例化20个子弹的数组
rnd= new Random();//实例化随机数
for(int i=0;i<20;i++)
{
int direction = (rnd.nextInt()&0x7fffffff)%BULLET_TYPE_TOTAL;//随机生成在四个边框之一
bullets[i][BULLET_LIFE] = 1;//设定初始状态子弹都为生存
switch(direction)
{
case BULLET_TYPE_LEFT://设定左边框的子弹的x,y,vx,vy
bullets[i][BULLET_X]= 1;
bullets[i][BULLET_Y] = (rnd.nextInt()&0x7fffffff)%height;
bullets[i][BULLET_VX] = (rnd.nextInt()&0x7fffffff)%2+1;
bullets[i][BULLET_VY] = (rnd.nextInt())%2;
break;
case BULLET_TYPE_RIGHT://设定右边框的子弹的x,y,vx,vy
bullets[i][BULLET_X]= width-6;
bullets[i][BULLET_Y] = (rnd.nextInt()&0x7fffffff)%height;
bullets[i][BULLET_VX] = ((rnd.nextInt()&0x7fffffff)%2+1)*-1;
bullets[i][BULLET_VY] = (rnd.nextInt())%2;
break;
case BULLET_TYPE_TOP://设定上边框的子弹的x,y,vx,vy
bullets[i][BULLET_X]=(rnd.nextInt()&0x7fffffff)%width;
bullets[i][BULLET_Y] = 1;
bullets[i][BULLET_VX] = (rnd.nextInt())%2;
bullets[i][BULLET_VY] = (rnd.nextInt()&0x7fffffff)%2+1;
break;
case BULLET_TYPE_BOTTOM://设定下边框的子弹的x,y,vx,vy
bullets[i][BULLET_X]= (rnd.nextInt()&0x7fffffff)%width;
bullets[i][BULLET_Y] = height-6;
bullets[i][BULLET_VX] = (rnd.nextInt())%2;
bullets[i][BULLET_VY] = ((rnd.nextInt()&0x7fffffff)%2+1)*-1;
break;
}
// bullets[i][BULLET_VX]=(rnd.nextInt())%2+1;//可以统一设定,也可以分支设定
// bullets[i][BULLET_VY]=(rnd.nextInt())%2+1;
}
return bullets;
}
public void rebounseBullets(int i,int BULLET_VX,int BULLET_X)//子弹反弹
{
bullets[i][BULLET_VX]=-1*bullets[i][BULLET_VX];
bullets[i][BULLET_X]=bullets[i][BULLET_X]+bullets[i][BULLET_VX];
}
public void drawBullets(Graphics g)//子弹显示
{
for(int i=0;i<20;i++)
{
if(bullets[i][BULLET_LIFE]==1)//子弹生存时显示
{
if((bullets[i][BULLET_X]+bullets[i][BULLET_VX])<=0||(bullets[i][BULLET_X]+bullets[i][BULLET_VX])>=width)
{
rebounseBullets(i,BULLET_VX,BULLET_X);
}
else
bullets[i][BULLET_X]=bullets[i][BULLET_X]+bullets[i][BULLET_VX];
if((bullets[i][BULLET_Y]-bullets[i][BULLET_VY])<=0||(bullets[i][BULLET_Y]-bullets[i][BULLET_VY])>=height)
{
rebounseBullets(i,BULLET_VY,BULLET_Y);
}
else
bullets[i][BULLET_Y]=bullets[i][BULLET_Y]-bullets[i][BULLET_VY];
bulletSprite.setPosition(bullets[i][BULLET_X],bullets[i][BULLET_Y]);
bulletSprite.paint(g);
}
}
//放保险
/*int keyStates=getKeyStates();
if((keyStates&FIRE_PRESSED)!=0)
//需要检测keypressed和keyreleased
//这里运用的是锁的机制
{
if(num>0&&lock==false)
{
lock= true;
b_number.setFrame(num--);
for(int i=0;i<20;i++)
{ //保险 范围
if((currentX-bullets[i][BULLET_X])*(currentX-bullets[i][BULLET_X])+(currentY-bullets[i][BULLET_Y])*(currentY-bullets[i][BULLET_Y])<=2000)
{
bullets[i][BULLET_LIFE]= 0;//子弹消失
}
}
}
else if ((keyStates&FIRE_PRESSED)==0)
lock = false;
}*/
}
// public Sprite getBullets()
// {
// return bulletSprite;
// }
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -