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

📄 npc_west.java

📁 j2me 横版过关游戏工程。(demo).可以参考下
💻 JAVA
字号:
import java.util.Stack;

import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Image;

/*
 * 创建日期 2006-1-17
 *
 * TODO 要更改此生成的文件的模板,请转至
 * 窗口 - 首选项 - Java - 代码样式 - 代码模板
 */

/**
 * @author admin
 *
 * TODO 要更改此生成的类型注释的模板,请转至
 * 窗口 - 首选项 - Java - 代码样式 - 代码模板
 */
public class Npc_West extends Sprite{
	
	int num ;
	int littleId;
	int speed;
	int npcState;
	private int preNpcState;//2石头在地上 4石头在手上 8石头在空中
	private int playerMidX;
	private int npcMidX;
	private int count;
	private int up,down;
	int hp;
	
	   GameDataSimple data  = WestGameCanvas.data;
	/**
	 * @param id
	 * @param image
	 * @param frameWidht
	 * @param frameHeight
	 */
	public Npc_West(int id,int littleId,int num, Image image, int frameWidht, int frameHeight) {
		super(id, image, frameWidht, frameHeight);
		this.num = num;
		hp = 10;
		this.littleId = littleId;
		count = 0;
		if(!(id==1&&(littleId==4||littleId==3)))
				setPosition(data.getNpcPosition()[num][2]+WestGameCanvas.mapX,data.getNpcPosition()[num][3]+WestGameCanvas.mapY);
		if(id==0||id == 3||(id == 1&&(littleId==1||littleId==2))){
			preNpcState =npcState = 2;
			if(id==0||id == 3)
				setCurrSequence(0,4);
			switch(id){
			case 0:
				speed = data.getNpcKind()[littleId][3];
				break;
			case 3:
				speed = data.getBossKind()[littleId][3];
				break;
			case 1:
				speed = data.getCloundKind()[littleId][3];
				if(littleId==2){
					for(int i = data.getUnDownRange().length-1;i>=0;i--){
						if(data.getUnDownRange()[i][0]==num){
							up = data.getUnDownRange()[i][2];
							down = data.getUnDownRange()[i][1];
							break;
						}
					}
				}
				break;
			}
		}
		if(id == 4){
			preNpcState =npcState = 2;
		}
		if(id==2){
			int[] useFrameSequence = { data.getNpcPosition()[num][1]};
			setFrameSequence(useFrameSequence);
		}
	}
	//TODO moveSelf
	void moveSelf(Player_West player){
		if(id==1&&(littleId==4||littleId==5)){
			count++;
			if(count>30|| x < -srcFrameWidth || x > WestGameCanvas.screenWidth) {
				num = -1;
				return;
			}
		}
		else if((-WestGameCanvas.mapX+WestGameCanvas.screenWidth<data.getNpcPosition()[num][4]
			||-WestGameCanvas.mapX>data.getNpcPosition()[num][5]+srcFrameWidth)&&id!=2){
			num = -1;
			return;
		}
		if(id==0||id == 3){
		    if(hp<=0&&(preNpcState&4)!=0&&getFrame()==frameSequence.length-1){
				if(x-WestGameCanvas.mapX>data.getNpcPosition()[num][5]){
					npcState=(1|npcState);
					x = data.getNpcPosition()[num][5] + WestGameCanvas.mapX;
				}
				else if(x-WestGameCanvas.mapX<data.getNpcPosition()[num][4]){
					npcState=npcState - (1&npcState);
					x = data.getNpcPosition()[num][4] + WestGameCanvas.mapX;
				}
		    	if(id == 3){
		    				WestGameCanvas.gameState=2;
		    	}
		       return;
		    }
		    npcMidX = (srcFrameWidth>>1)+x;
			nextFrame();
			if((4&preNpcState)!=0&&getFrame()==0)
				setFrame(frameSequence.length-1);
			if(hp<=0){
			    npcState = (1&preNpcState)+4;
			}
			if(preNpcState!=npcState){
				switch(254&npcState){
					case 2:
						if(id==0)
						speed = data.getNpcKind()[littleId][3];
						if(id==3)
						speed = data.getBossKind()[littleId][3];
						setCurrSequence(0,4);
						count = 0;
						break;
					case 4:
						speed = 0;
						setCurrSequence(12,4);
						count = 1;
						WestGameCanvas.score += data.getNpcKind()[littleId][6];
						break;
					case 8:
						speed = 0;
						setCurrSequence(4,5);
						count = getFrameSequenceLength() - 1;
						break;
					case 16:
						speed = 0;
						setCurrSequence(9,3);
						count = getFrameSequenceLength() - 1;
						break;
					case 32:
						if(id==0)
							speed = -data.getNpcKind()[littleId][3];
						if(id==3)
							speed = -data.getBossKind()[littleId][3];
						setCurrSequence(0,4);
						if((254&preNpcState)!=32)
							count = 3;
						break;
				}
				preNpcState = npcState;
			}
		}
		if((id==0||(id==1&&littleId==1)||id == 3)){
			x+=speed;
			
			if(x-WestGameCanvas.mapX>=data.getNpcPosition()[num][5]||x-WestGameCanvas.mapX<=data.getNpcPosition()[num][4]){
				if((2&preNpcState)!=0){
					if(x-WestGameCanvas.mapX>data.getNpcPosition()[num][5]){
						npcState=(1|npcState);
						x = data.getNpcPosition()[num][5] + WestGameCanvas.mapX;
					}
					else if(x-WestGameCanvas.mapX<data.getNpcPosition()[num][4]){
						npcState=npcState - (1&npcState);
						x = data.getNpcPosition()[num][4] + WestGameCanvas.mapX;
					}
					if(id == 1){
						speed = -speed;
					}
				}
				if((32&preNpcState) != 0)
					speed = 0;
			}
		}
		if(id==1&&littleId==2){
			y += speed;
			if(y-WestGameCanvas.mapY>=up||y-WestGameCanvas.mapY<=down){
				speed = -speed;
			}
		}
		if(id==0||id==3){
			if(player.x-WestGameCanvas.mapX<data.getNpcPosition()[num][5]
				&&player.x-WestGameCanvas.mapX>data.getNpcPosition()[num][4]){
				playerMidX = data.getPlayerRec()[player.frameSequence[player.getFrame()]][4]+player.x;
				if(id==0)
					npcMidX = data.NpcFrame(littleId)[frameSequence[getFrame()]][4]+x;
				if(id==3)
					npcMidX = data.BossFrame(littleId)[frameSequence[getFrame()]][4]+x;
				if((4&npcState)==0){
					if(playerMidX>npcMidX){
						npcState = (254&npcState);
					}else{
						npcState = (1|npcState);
					}
				}
				if(Math.abs(playerMidX-npcMidX)<=20&&(2&preNpcState)!=0){
					npcState = 8+(1&preNpcState);
				}
				if((56&preNpcState)!=0){
					if(count<0){
						if((48&preNpcState)!=0)
							npcState = 2+(1&preNpcState);
						if((8&preNpcState)!=0)
							npcState = 32+(1&preNpcState);
					}
					count --;
				}
			}else{
				if((56&npcState)!=0){
					npcState = 2+(1&preNpcState);
				}
			}
		}
		if(id == 4){//2石头在地上 4石头在手上 8石头在空中){
			if(npcState==8){
				move(data.getStoneKind()[0][3],data.getStoneKind()[0][4]);
			}
			if(npcState==9){
				move(-data.getStoneKind()[0][3],data.getStoneKind()[0][4]);
			}
			if((8&npcState)!=0){
				if(y>=data.getNpcPosition()[num][3]+WestGameCanvas.mapY){
					y = data.getNpcPosition()[num][3]+WestGameCanvas.mapY;
					npcState = 2;
				}
				if(x-WestGameCanvas.mapX<=data.getNpcPosition()[num][4]){
					x = data.getNpcPosition()[num][4] + WestGameCanvas.mapX;
				}
				if(x-WestGameCanvas.mapX>=data.getNpcPosition()[num][5]){
					x = data.getNpcPosition()[num][5] + WestGameCanvas.mapX;
				}
			}
		}
			
	}
	
	void paintSelf(Graphics g){
	    if(id==0||id==3){
	        g.setClip(0,0,WestGameCanvas.screenWidth,WestGameCanvas.screenHeight);
	        g.setColor(0xff0000);
	        if(npcMidX>0)//屏掉变量为0在屏幕上显示的状况
	        	g.fillRect(npcMidX-20,y-3,hp<<2,3);
	    }
		if(!(id==1&&(littleId==4||littleId==5)
				&&count>20&&(1&count)==0))
		paint(g);
	}
	
	/**
	 * 设置动画序列
	 * 
	 * @param imgIndex
	 *            从第几张图片开始
	 * @param totalNum
	 *            连续设置多少张
	 */
	private void setCurrSequence(int imgIndex, int totalNum) {
		
		int array[] = new int[totalNum];
		for (int i = 0; i < totalNum; i++) {
			if ((1&npcState)==0)
				array[i] = data.getNpcFrame()[imgIndex + i] + 9;
			else{
				array[i] = data.getNpcFrame()[imgIndex + i];
				if(i == 0)
					speed = -speed;
			}
		}
		setFrameSequence(array);
	
	} 

}

⌨️ 快捷键说明

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