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

📄 actor.java

📁 一个j2me游戏代码
💻 JAVA
📖 第 1 页 / 共 4 页
字号:
	boolean checkSandmanInRange()
	{
		byte[] pColBox = Player.m_prince.getColBox();
		return Player.m_prince.curState != Def.PRINCE_DIE &&
			   (Player.m_prince.m_posY>>8) + pColBox[3] >= (m_posY>>8) + getColBox()[1] &&
			   (Player.m_prince.m_posY>>8) + pColBox[1] < (m_posY>>8) + getColBox()[3];
	}
	boolean checkSandmanGoback()
	{
		if (m_start1 != 0) // go back to guard
		{
			if (m_start2 != 0)
			{
				setAction(Def.SANDMAN_HM_GUARD, 1);
				setFlipX(Player.m_prince.m_posX < m_posX);
			}
			else if (m_start1 != m_posX)
			{
				if (m_actionIDNow == Def.SANDMAN_HM_WALK)
					return false;
				setAction(Def.SANDMAN_HM_WALK, 1);
				setFlipX(m_start1 < m_posX);
			}
			else
			{
				setAction(Def.SANDMAN_HM_WAIT, 1);
				setFlipX(Player.m_prince.m_posX < m_posX);
			}
			return true;
		}
		return false;
	}
	void blockPrince()
	{
        if (Player.m_prince.m_actionIDNow == Def.PRINCE_DIE)
            return;
        if (Player.m_prince.m_vX == 0 && Player.m_prince.m_actionIDNow != Def.PRINCE_HANG &&
            (m_actionIDNow == Def.SANDMAN_HM_WALK || m_actionIDNow == Def.SANDMAN_HM_THRUST || m_actionIDNow == Def.SANDMAN_HM_STRIKE))
        {
            Player.m_prince.checkActorBox(this);
        }
        int x;
        int oldX = Player.m_prince.m_posX;
        if (Math.abs(m_posY - Player.m_prince.m_posY) > ((m_colBoxNow[3] - m_colBoxNow[1]) << 8)) return;
        if (m_posX > Player.m_prince.m_posX)
        {
            x = m_posX + ((m_colBoxNow[0] - Player.m_prince.getColBox()[2]) << 8);
            if (Player.m_prince.m_posX > x)
            {
                if (Player.m_prince.m_actionIDNow == Def.PRINCE_HANG)
                {
                    if (m_flag[0] && Player.m_prince.m_flag[0])
                        m_posX = Player.m_prince.m_posX + ((Player.m_prince.getColBox()[2] - m_colBoxNow[0]) << 8);
                }
                else
                {
                    if (Player.m_prince.m_phbLeft >= Def.PHB_BOX)
                    {
                        checkActorBox(Player.m_prince);
                    }
                    else if (Player.m_prince.m_posX - x > 0x0800)
                        Player.m_prince.m_posX -= 0x0800 + Player.m_prince.m_vX;
                    else
                        Player.m_prince.m_posX = x;
                }
            }
        }
        else
        {
            x = m_posX + ((m_colBoxNow[2] - Player.m_prince.getColBox()[0]) << 8);
            if(Player.m_prince.m_posX < x)
            {
                if (Player.m_prince.m_actionIDNow == Def.PRINCE_HANG)
                {
                    if (!m_flag[0] && !Player.m_prince.m_flag[0])
                        m_posX = Player.m_prince.m_posX + ((Player.m_prince.getColBox()[0] - m_colBoxNow[2]) << 8);
                }
                else
                {
                    if (Player.m_prince.m_phbRight >= Def.PHB_BOX)
                    {
                        checkActorBox(Player.m_prince);
                    }
                    else if (x - Player.m_prince.m_posX > 0x0800)
                         Player.m_prince.m_posX += 0x0800 - Player.m_prince.m_vX;
                    else
                         Player.m_prince.m_posX = x;
                 }
            }
		}
        //blocked by sandman
        if (oldX != Player.m_prince.m_posX)
        {
            Player.m_prince.blocked = true;
        }
	}
	boolean princeCanUseDagger()
	{
		if (m_parameters[0] >= 0) // use dagger automatic
		{
			//GE.m_blockKey = true;
            Player.m_prince.noJump = false;
			GE.resetKey();
			GE.m_input[Def.KEY_ATTACK] = Def.Dn_Instant;
		}
		if (GE.m_input[Def.KEY_ATTACK] != Def.Dn_Instant)//if (GE.m_input[Def.KEY_ATTACK] < Def.Dn_Instant)
           return false;
		if (Player.m_prince.m_posY > m_posY + 0x0400 || Player.m_prince.m_posY < m_posY - 0x0400)
           return false;
		if (Player.m_prince.m_actionIDNow > Def.PRINCE_RUN &&
			(Player.m_prince.m_actionIDNow != Def.PRINCE_STRIKE || Player.m_prince.m_frameIDNow != 0))
           return false;
        int xRange = m_colBoxNow[2] - m_colBoxNow[0];
		int xDiff = (m_posX >> 8) + ((m_colBoxNow[2] + m_colBoxNow[0]) >> 1) - (Player.m_prince.m_posX >> 8);
		if (Player.m_prince.m_flag[0]) // face left
			xDiff = -xDiff;
		if (m_parameters[0] < 0 && (xDiff < -xRange/2/*nearest*/ || xDiff > xRange*2/*farthest*/))
           return false;
        Player.m_prince.setAction(Def.PRINCE_LASTSTRIKE, 1);
        Player.m_prince.stopAction(false);
		Player.m_prince.m_vX = ((xDiff-xRange) << 8)/3;
		if (Player.m_prince.m_flag[0])
		    Player.m_prince.m_vX = -Player.m_prince.m_vX;
		return true;
	}
	void aiSandman()
	{
		boolean hurtPrince = Player.m_prince.intersectAttackBox(this);
		if (hurtPrince)
			Player.m_prince.postMessage(Def.MSG_HURT, this);
		switch(m_actionIDNow)
		{
			case Def.SANDMAN_BM_GUARD:
				blockPrince();
				stopAction(false);
				if (checkSandmanDamage())
					break;
                if (Math.abs(m_posY - Player.m_prince.m_posY) <= (50<<8))
                {
                    setFlipX(m_posX > Player.m_prince.m_posX);
                    if (checkSandmanPrinceInVision() && m_relativeMisc != null && !m_relativeMisc.m_flag[3])
                    {
                        //if (m_start1 == 0) // no crouch
                        setAction(Def.SANDMAN_BM_FIRE, 1);
                        //else // switch guard and crouch
                        //	setAction((Def.SANDMAN_BM_FIRE2+Def.SANDMAN_BM_FIRE) - (m_actionIDNow+1), true);
                    }
                }
				break;
			case Def.SANDMAN_BM_FIRE:
				blockPrince();
				if (checkSandmanDamage())
					break;
				if (m_actionOver)
				{
					//GE.playSound(Def.SOUND_SHOOTARROW_MID, 1);
					m_relativeMisc.m_flag[3] = true;
					m_relativeMisc.setFlipX(m_flag[0]); // same as bowman
					m_relativeMisc.m_posX = m_posX + m_relativeMisc.m_vX;
					m_relativeMisc.m_start1 = m_posX;
					m_relativeMisc.m_posY = m_posY + ((getColBox()[1] + 8) << 8);
					m_relativeMisc.setAction(Def.SANDMAN_ARROW, 1);
					setAction(m_actionIDNow-1, 1);
				}
				break;
			case Def.SANDMAN_ARROW:
				if (m_phbLeft >= Def.PHB_SOLID || m_phbRight >= Def.PHB_SOLID || hurtPrince ||
					checkArrowSendBack() || ((m_posX - m_start1)>>8) > Def.PF_WIDTH )
					setAction(Def.SANDMAN_BROKEN, 1);
				break;
			case Def.SANDMAN_BROKEN:
				if (m_actionOver)
					m_flag[3] = false;
				break;
			// Hammer Man
			case Def.SANDMAN_HM_WAIT:
				blockPrince();
				if (checkSandmanDamage())
					break;
				if(checkSandmanPrinceInVision())
				{
					setAction(Def.SANDMAN_HM_GUARD, 1);
				}
				break;
			case Def.SANDMAN_HM_WALK:
				blockPrince();
				if (checkSandmanDamage())
					break;
                if (checkSandmanPrinceInVision())
				{
                    if (Math.abs(m_posX - Player.m_prince.m_posX) <= (50<<8))
                    {
                        if (Player.m_prince.m_actionIDNow == Def.PRINCE_LASTSTRIKE)
                        {
                            setAction(Def.SANDMAN_HM_GUARD, 1); // dead
                        }
                        else
                        {
                            setFlipX(m_posX > Player.m_prince.m_posX);
                            setAction(m_counter == 1 ? Def.SANDMAN_HM_THRUST : Def.SANDMAN_HM_STRIKE, 1);
                            //GE.playSound(Def.SOUND_HAMMERSTRIKE_MID, 1);
                        }
                        break;
                    }
				}
				else if (checkSandmanGoback())
					break;
				if (checkGround(m_flag[0]) > 0 ||
					m_flag[0] && m_phbLeft >= Def.PHB_SOLID ||
					!m_flag[0] && m_phbRight >= Def.PHB_SOLID)
					setFlipX(!m_flag[0]);
				break;
			case Def.SANDMAN_HM_GUARD:
			case Def.SANDMAN_HM_THRUST:
			case Def.SANDMAN_HM_STRIKE:
				blockPrince();
				if (checkSandmanDamage())
					break;
				if (m_actionIDNow == Def.SANDMAN_HM_STRIKE && m_frameIDNow == (m_anim.nFrame[m_actionIDNow] - 1))
				{
					Player.m_shakeCamera += 2;
				}
				if(m_actionOver)
				{
					if (checkSandmanPrinceInVision())
					{
						if (Math.abs(m_posX - Player.m_prince.m_posX) <= (50<<8) )
						{
							if (m_start1 != 0) // suporior guard hammerman,
								m_counter = 1 - m_counter;
							setAction(m_counter == 1 ? Def.SANDMAN_HM_THRUST : Def.SANDMAN_HM_STRIKE, 1);
							//GE.playSound(Def.SOUND_HAMMERSTRIKE_MID, 1);
						}
						else if (m_start1 != 0 && m_start2 != 0)
							setAction(Def.SANDMAN_HM_GUARD, 1);
						else
							setAction(Def.SANDMAN_HM_WALK, 1);
					}
					else if (!checkSandmanGoback())
						setAction(Def.SANDMAN_HM_WALK, 1);
				}
				break;

			case Def.SANDMAN_BM_HURT:
				blockPrince();
				if(m_actionOver)
				{
					if (m_flag[0] != (m_posX > Player.m_prince.m_posX))
					{
						setFlipX(!m_flag[0]);
						m_actionOver = false;
					}
					else
					    setAction(Def.SANDMAN_BM_FIRE, 1); // strick, fire, fire2
				}
				break;
			case Def.SANDMAN_HM_HURT:
				blockPrince();
				if(m_actionOver)
				{
					if (m_flag[0] != (m_posX > Player.m_prince.m_posX))
					{
						setFlipX(!m_flag[0]);
						m_actionOver = false;
					}
					else
					    setAction(Def.SANDMAN_HM_STRIKE, 1); // strick, fire, fire2
				}
				break;
			case Def.SANDMAN_BM_LYING:
                if (m_actionOver)
                {
                    drawMsg(m_parameters[0]);
                    if (GE.m_playHint == 0)
					    m_parameters[0] = -1;
                    setAction(Def.SANDMAN_BM_LIE, 1); // lie
                }
				break;
			case Def.SANDMAN_HM_LYING:
				if (m_actionOver)
				{
                    drawMsg(m_parameters[0]);
                    if (GE.m_playHint == 0)
					    m_parameters[0] = -1;
					setAction(Def.SANDMAN_HM_LIE, 1); // lie
				}
				break;
			case Def.SANDMAN_BM_LIE:
				if (Player.m_prince.m_actionIDNow == Def.PRINCE_LASTSTRIKE2)
				{
					if (intersectAttackBox(Player.m_prince))
						setAction(Def.SANDMAN_BM_DEAD, 1); // dead
				}
				else if (princeCanUseDagger())
				{
					//GE.playSound(Def.SOUND_DAGGERHIT_MID, 1);
				}
				else if (m_start2 == 0 && Player.m_prince.m_actionIDNow != Def.PRINCE_LASTSTRIKE)
				{
                    m_counter--;
                    if (m_counter <= 0)
                    {
                        m_hp = m_maxhp;
                        setFlipX(m_posX > Player.m_prince.m_posX);
                        setAction(Def.SANDMAN_BM_HURT, 1); // hurt
                        blockPrince();
                    }
				}
				else
				{
					setAction(Def.SANDMAN_BM_DEAD, 1); // dead
				}
				break;
			case Def.SANDMAN_HM_LIE:
				if (Player.m_prince.m_actionIDNow == Def.PRINCE_LASTSTRIKE2)
				{
					if (intersectAttackBox(Player.m_prince))
						setAction(Def.SANDMAN_HM_DEAD, 1); // dead
				}
				else if (princeCanUseDagger())
				{
					//GE.playSound(Def.SOUND_DAGGERHIT_MID, 1);
				}
				else if (m_start2 == 0 && Player.m_prince.m_actionIDNow != Def.PRINCE_LASTSTRIKE)
				{
                    m_counter--;
                    if (m_counter <= 0)
                    {
                        m_hp = m_maxhp;
                        setFlipX(m_posX > Player.m_prince.m_posX);
                        setAction(Def.SANDMAN_HM_HURT, 1); // hurt
                        blockPrince();
                    }
				}
				else
				{
					setAction(Def.SANDMAN_HM_DEAD, 1); // dead
				}
				break;
            case Def.SANDMAN_BM_DEAD:
            case Def.SANDMAN_HM_DEAD:
                //if (m_parameters[0] >= 0)
                //{
                //    GE.m_blockKey = true;
				//}
                if (Player.m_prince.m_actionIDNow != Def.PRINCE_LASTSTRIKE
                    && Player.m_prince.m_actionIDNow != Def.PRINCE_LASTSTRIKE2)
                {
                    if (m_start2 == 0)
                    {
                        m_counter = RECOVER_TIME;
                        setAction(m_actionIDNow-1, 1); // lie
                    }
                }
                //else if (m_actionOver)
                //{
                //    GE.resetKey();
                //   Player.m_prince.setAction(Def.PRINCE_NORMAL, 1);
                //}
                if (m_actionOver)
                {
                    Player.m_prince.setAction(Def.PRINCE_NORMAL, 1);
                    setAction(Def.SANDMAN_SMOKE, 1);
                }
				break;

            case Def.SANDMAN_SMOKE:
				if (m_actionOver)
					m_flag[3] = false;
				break;
		}
		if (m_actionIDNow == Def.SANDMAN_HM_HURT && checkGround(!m_flag[0]) > 0)
		{
			m_vX = 0;
		}
	}

	void aiSaw()
	{
		if (Player.m_prince.intersectAttackBox(this))
			Player.m_prince.postMessage(Def.MSG_HURT, this);
		switch(m_actionIDNow)
		{
			case Def.SAW_MOVELEFT:
				if(m_start1 >= m_posX)
					setAction(Def.SAW_MOVERIGHT, 1);
				break;
			case Def.SAW_MOVERIGHT:
				if(m_start2 <= m_posX)
					setAction(Def.SAW_MOVELEFT, 1);
				break;
			case Def.SAW_MOVEUP:
				if(m_start1 >= m_posY)
					setAction(Def.SAW_MOVEDOWN, 1);
				break;
			case Def.SAW_MOVEDOWN:
				if(m_start2 <= m_posY)
					setAction(Def.SAW_MOVEUP, 1);
				break;
			case Def.SAW_CRASH:
				if(m_actionOver)
					m_flag[3] = false;
				break;
		}
	}
}

⌨️ 快捷键说明

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