📄 gunandaim.java
字号:
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Image;
import javax.microedition.lcdui.game.GameCanvas;
import javax.microedition.lcdui.game.Sprite;
import java.util.Random;
public class GunAndAim {
public static final int GA_NORMAL = 0; //正常状态
public static final int GA_FIRE = 1; //开火
public static final int GA_STATE_NUM = 2;
int fire=0;
int flag1=0; //控制子弹1不偏转
int flag2=0; //控制子弹2不偏转
int Ax=0;
int Ay=0;
int Bx1=0;
int Bx2=0;
private int m_nState = GA_NORMAL;
public Sprite m_AimSp; //准心图像
public Sprite m_GunSp; //手枪图像
private Sprite m_cloudSp[]=new Sprite[4];//白云彩
public Sprite m_playerSp[]=new Sprite[2];//飞机
public Sprite m_bulletSp[]=new Sprite[2];//子弹
public Sprite m_bombSp; //爆炸现象
private int m_nTime; //开火后需要停顿的时间
// private MainCanvas m_Canvas;
public GunAndAim(int scrWidth, int scrHeight){
try{
//读取手枪图像
Image img = Image.createImage("/gun.png");
m_GunSp = new Sprite(img, 40, 32);
int x = scrWidth / 2;
int y = scrHeight - m_GunSp.getHeight();
m_GunSp.setPosition(x, y);
//读取准心图像
img = null;
img = Image.createImage("/aim.png");
m_AimSp = new Sprite(img, 11,11);
m_AimSp.setPosition(x - 5, y - 40);
img = Image.createImage("/cloud.png");
for( int n = 0; n <m_cloudSp.length; n ++ )
m_cloudSp[n] = new Sprite(img, 16, 16);
m_cloudSp[0].setPosition(x - 100, y - 120);
m_cloudSp[1].setPosition(x - 30, y - 70);
m_cloudSp[2].setPosition(x + 30, y - 110);
m_cloudSp[3].setPosition(x + 70, y - 80);
img = Image.createImage("/player.png");
for( int m = 0; m <m_playerSp.length;m++)
m_playerSp[m]=new Sprite(img,30,30);
m_playerSp[0].setTransform(Sprite.TRANS_ROT90);
m_playerSp[0].setPosition(x - 100, y - 250);
m_playerSp[1].setTransform(Sprite.TRANS_ROT270);
m_playerSp[1].setPosition(x + 70, y -220);
img = Image.createImage("/bullet.png");
for(int m = 0; m <m_bulletSp.length;m++)
m_bulletSp[m]=new Sprite(img,15,15);
m_bulletSp[0].setPosition(x - 100, y - 250);
m_bulletSp[1].setPosition(x + 70, y -220);
img = Image.createImage("/bomb.png");
m_bombSp=new Sprite(img,65,65);
m_bombSp.setFrame(0);
}
catch(Exception exception){}
}
//获取当前状态
public int getState(){
return m_nState;
}
//设置当前状态
public void setState( int state){
if(state < 0 || state >= GA_STATE_NUM )
return;
m_nState = state;
switch( m_nState ){
case GA_NORMAL:
m_nTime = 5;
break;
}
}
// int Ax = m_AimSp.getX();
// int Ay = m_AimSp.getY();
//处理按键输入,参数keyStates为按键状态
//scrWidth、scrHeight分别是屏幕的宽和高
public void Input(int keyStates, int scrWidth, int scrHeight,int isCol){
int Cx1= m_cloudSp[0].getX();
int Cx2= m_cloudSp[1].getX();
int Cx3= m_cloudSp[2].getX();
int Cx4= m_cloudSp[3].getX();
int Cy1= m_cloudSp[0].getY();
int Cy2= m_cloudSp[1].getY();
int Cy3= m_cloudSp[2].getY();
int Cy4= m_cloudSp[3].getY();
int Px1= m_playerSp[0].getX();
int Px2= m_playerSp[1].getX();
int Py1= m_playerSp[0].getY();
int Py2= m_playerSp[1].getY();
int Gx = m_GunSp.getX();
int Gy = m_GunSp.getY();
if(flag1==0)
Bx1= Px1;
else
Bx1= m_bulletSp[0].getX();
if(flag2==0)
Bx2= Px2;
else
Bx2= m_bulletSp[1].getX();
flag1=1;
flag2=1;
int By1= m_bulletSp[0].getY();
int By2= m_bulletSp[1].getY();
if(isCol==0)
{
Ax = m_AimSp.getX();
Ay = m_AimSp.getY();
}
else
{
Ax=Gx;
Ay=Gy;
}
if(fire==0)
{
Ax=Gx;
Ay=Gy;
}
Random rdm1=new Random();
int speed1=(rdm1.nextInt()>>>1)%15;
Random rdm2=new Random();
int speed2=(rdm2.nextInt()>>>1)%15;
if(speed1<6)
speed1*=3;
if(speed2<6)
speed2*=3;
if(Px1>=scrWidth)
Px1=0;
else
Px1+=speed1;
if(Px2<=0)
Px2=scrWidth;
else
Px2-=speed2;
if(Cy1==scrHeight) //判断白云1是否到屏幕最下端,否则继续向下移动
Cy1=0;
else
Cy1++;
if(Cy2==scrHeight) //判断白云2是否到屏幕最下端,否则继续向下移动
Cy2=0;
else
Cy2++;
if(Cy3==scrHeight) //判断白云3是否到屏幕最下端,否则继续向下移动
Cy3=0;
else
Cy3++;
if(Cy4==scrHeight) //判断白云4是否到屏幕最下端,否则继续向下移动
Cy4=0;
else
Cy4++;
if(By1>=scrHeight)
{
By1=Py1;
flag1=0;
}
else
By1+=5;
if(By2>=scrHeight)
{
By2=Py2;
flag2=0;
}
else
By2+=5;
int nDis = 10;
//设置手枪及准心的位置
if( ( keyStates & GameCanvas.LEFT_PRESSED ) != 0 ){
if( Ax > 0 ){
Ax -= nDis;
Gx -= nDis;
}
}
if( ( keyStates & GameCanvas.RIGHT_PRESSED ) != 0 ){
if( Ax < scrWidth ){
Ax += nDis;
Gx += nDis;
}
}
if( ( keyStates & GameCanvas.UP_PRESSED ) != 0 ){
if( Ay > 0 )
Ay -= nDis;
Cy1-= nDis;
Cy2-= nDis;
Cy3-= nDis;
Cy4-= nDis;
}
if( ( keyStates & GameCanvas.DOWN_PRESSED ) != 0 ){
if( Ay < scrHeight )
Ay += nDis;
Cy1+= nDis;
Cy2+= nDis;
Cy3+= nDis;
Cy4+= nDis;
}
if((Ay>0)&&(fire==1))
Ay-=40;
m_AimSp.setPosition(Ax, Ay);
m_GunSp.setPosition(Gx, Gy);
m_cloudSp[0].setPosition(Cx1,Cy1);
m_cloudSp[1].setPosition(Cx2,Cy2);
m_cloudSp[2].setPosition(Cx3,Cy3);
m_cloudSp[3].setPosition(Cx4,Cy4);
m_playerSp[0].setPosition(Px1,Py1);
m_playerSp[1].setPosition(Px2,Py2);
m_bulletSp[0].setPosition(Bx1,By1);
m_bulletSp[1].setPosition(Bx2,By2);
m_bombSp.setPosition(-300,-300);
//开火
if( ( keyStates & GameCanvas.FIRE_PRESSED ) != 0 )
{//连续开火需要有一定的时间间隔
fire=1;
if((isCol==1)||(Ay<=0))
{
fire=0;
// Ax=Gx;
// Ay=Gy;
}
// m_Canvas.Collision();
// for( int n = 0; n < m_aEnemy.length; n ++ )
// if(m_AimSp.collidesWith( m_aEnemy[n], true ) )
// break;
if( m_nTime <= 0 ){
setState(GA_FIRE);
SoundPlayer.getInstance().playFireSound();
}
}
}
//逻辑
public void Logic(){
switch( m_nState ){
case GA_NORMAL:
m_nTime --;
break;
case GA_FIRE:
setState(GA_NORMAL);
break;
}
}
//显示图像
public void Paint(Graphics g){
m_GunSp.paint(g);
for( int n = 0; n <m_playerSp.length;n++)
m_playerSp[n].paint(g);
for( int m = 0; m < m_bulletSp.length; m ++ ){
m_bulletSp[m].paint(g);
}
m_AimSp.paint(g);
for( int m = 0; m < m_cloudSp.length; m ++ ){
m_cloudSp[m].paint(g);
}
m_bombSp.paint(g);
}
public void bomb(int height,int width){
m_bombSp.setPosition(height,width);
m_bombSp.nextFrame();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -