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

📄 bullets.java

📁 手机飞机游戏:在toolkit上编译运行
💻 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 + -