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

📄 roleman.java

📁 恶魔城-晓月圆舞曲 JAVA手機遊戲
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
					if(b.hp <= 0)
					{
						exp += b.getExp();
						b.dead();
					}
				}
				SpEffect bEffect = new SpEffect(hitX,hitY,SpEffect.BRUISE$BLOOD,SpEffect.BRUISE_1);
				SpEffect bFont = new SpEffect((short)(e.roleX+10),(short)(e.roleY+20),SpEffect.FONT$BLOOD,SpEffect.REDUCE);
				bFont.setEffect((byte)0);
				bFont.setLoseBlooad(brHp);
				CastleCanvas.effect.addElement(bEffect);
				CastleCanvas.effect.addElement(bFont);
			}
		}
	}
	private void tickAll(Graphics g)
	{
		tickEffect(g);
		tickBlood(g);
		tickBullet(g);
		tickResume();
		tickLife();
//		tickEnemy(g);TODO
	}
	private void tickLife() {
		if(backHp == 0)
		{
			dead();
		}
	}
	private void tickResume() {//恢复MP
		if(!isResume)
		{
			isResume = true;
			mpTimeStart = System.currentTimeMillis();
		}
		if(System.currentTimeMillis()-mpTimeStart>=reMpTime && backMp<=maxMp)
		{
			isResume = false;
			for(byte i=0;i<=($int/4) && backMp<maxMp;i++)
			{
				backMp++;
			}
		}

	}
	/****判断怪物是否攻击的到主角,和伤害其他处理****/
	private boolean isEnemyAttRole(Graphics g)
	{
		Enumeration v = CastleCanvas.enemy.elements();
		while(v.hasMoreElements())
		{		
			if(System.currentTimeMillis()-sAphal>=1500)
			{
				aphal = true;
			}
			Enemy e = (Enemy)v.nextElement();
			if(e.attack() && aphal)
			{
					if(e instanceof BrawnMan)
					{
						BrawnMan b = (BrawnMan)e;
						short brHp = (short)(b.att-CastleCanvas.soma.getDef());
						if(brHp<1)
							brHp = 1;
						backHp -= brHp;
						if(backHp<=0)
						{
							backHp = 0;
							fCount = 0;
						};
						SpEffect r = new SpEffect(SpEffect.FONT$BLOOD,SpEffect.REDUCE);
						r.setEffect((byte)1);
						r.setLoseBlooad(brHp);
						CastleCanvas.effect.addElement(r);
					}
					sAphal = System.currentTimeMillis();
					aphal = false;
					if(dir)
					{
						if(e.x+e.ox>=this.x+this.ox)
						{
							direction = 0;//FORE
						}
						else 
						{
							direction = 1;//BACK
						}
					}
					else
					{
						if(e.x+e.mirx>=this.x+this.mirx)
						{
							direction = 1;//BACK
						}
						else 
						{
							direction = 0;//FORE
						}
					}
					return true;
			}
		}
		return false;
	}
//	private void tickEnemy(Graphics g) {
//		Enumeration v =  Castle.enemy.elements();
//		while(v.hasMoreElements())
//		{
//			Enemy e  = (Enemy)v.nextElement();
//			if(e.isDead())
//			{
//				Castle.enemy.removeElement(e);
//			}
//		}
//	}
	private void tickBullet(Graphics g)
	{
		Enumeration v = shot.elements();
		while(v.hasMoreElements())
		{
			Bullet b = (Bullet)v.nextElement();
			if(b.isDead())
				shot.removeElement(b);
			b.paint(g);
			Enumeration ev = CastleCanvas.enemy.elements();
			while(ev.hasMoreElements())
			{
				Enemy e = (Enemy)ev.nextElement();
				if(b.attEnemy(e))
				{
					short brHp = 0;
					if(e instanceof Corpse)
					{
						Corpse c = ((Corpse)e);
						brHp = (short)($int+currMainMagic.getPower()-c.def);//int+magic的att-c.def
						if(brHp<=0)
							brHp = 1;
						c.hp -= brHp;
						if(c.hp <= 0)
						{//TODO
							c.dead();
						}
					}
					else if(e instanceof BrawnMan)
					{
						BrawnMan c = ((BrawnMan)e);
						brHp = (short)($int+currMainMagic.getPower()-c.def);//int+magic的att-c.def
						if(brHp<=0)
							brHp = 1;
						c.hp -= brHp;
						if(c.hp <= 0)
						{//TODO
							c.dead();
						}
					}
					else if(e instanceof Bat)
					{
						Bat c = ((Bat)e);
						brHp = (short)($int+currMainMagic.getPower()-c.def);//int+magic的att-c.def
						if(brHp<=0)
							brHp = 1;
						c.hp -= brHp;
						if(c.hp <= 0)
						{//TODO
							c.dead();
						}
					}
					SpEffect bEffect = new SpEffect(e.roleX,e.roleY,SpEffect.BRUISE$BLOOD,SpEffect.BRUISE_1);
					SpEffect bFont = new SpEffect((short)(e.roleX+10),(short)(e.roleY+20),SpEffect.FONT$BLOOD,SpEffect.REDUCE);
					bFont.setEffect((byte)0);
					bFont.setLoseBlooad(brHp);
					CastleCanvas.effect.addElement(bEffect);
					CastleCanvas.effect.addElement(bFont);
				}
			}
		}
	}
	private void tickEffect(Graphics g)
	{
		Enumeration v = CastleCanvas.effect.elements();
		while(v.hasMoreElements())
		{
			SpEffect s = (SpEffect)v.nextElement();
			s.paint(g);
			if(s.getDelete())
				CastleCanvas.effect.removeElement(s);
		}
	}
	private void tickBlood(Graphics g)
	{//TODO
		g.setClip(8,20,101,29);
		g.drawImage(CastleCanvas.itemEnum,8-68,20,CastleCanvas.imgLT);
		g.setClip(37,26,64*getCurrentHpRatio()/100,3);//画HP
		g.drawImage(CastleCanvas.itemEnum,37-71,26-32,CastleCanvas.imgLT);//画MP
		g.setClip(37,31,64*getCurrentMpRatio()/100,3);
		g.drawImage(CastleCanvas.itemEnum,37-71,31-37,CastleCanvas.imgLT);
		short lb = 0;
		byte count = 0;
		lb = hp;
		do
		{
			byte n = (byte)(lb%10);
			g.setClip(23-count*6,26,8,8);
			g.drawImage(CastleCanvas.itemEnum,23-(139+n*8)-count*6,26-43,CastleCanvas.imgLT);
			count++;
		}
		while((lb/=10)!=0);
		if(hp>backHp)
		{
			hp--;
		}
		else if(hp<backHp)//等于就不用修正
		{
			hp++;
		}
		if(mp>backMp)
		{
			mp--;
		}
		else if(mp<backMp)//等于就不用修正
		{
			mp++;
		}
	}
	private boolean hitEnemy()
	{
		Enumeration v = CastleCanvas.enemy.elements();
		while(v.hasMoreElements())
		{
			if(System.currentTimeMillis()-sAphal>=1500)
			{
				aphal = true;
			}
			Enemy e = (Enemy)(v.nextElement());
			if(e.hit(this) && aphal)
			{//TODO
				short brHp = 0;
				if(e instanceof Corpse)
				{
					Corpse c  = (Corpse)e;
					brHp = (short)(c.att-def);	
				}
				else if(e instanceof BrawnMan)
				{
					BrawnMan c  = (BrawnMan)e;
					brHp = (short)(c.att-def);	
				}
				else if(e instanceof Bat)
				{
					Bat c = (Bat)e;
					brHp = (short)(c.att-def);
				}
				backHp = (short)(backHp - brHp);
				if(backHp<=0)
				{
					backHp = 0;
					fCount = 0;
				}
				SpEffect r = new SpEffect(SpEffect.FONT$BLOOD,SpEffect.REDUCE);
				r.setEffect((byte)1);
				r.setLoseBlooad(brHp);
				CastleCanvas.effect.addElement(r);
				sAphal = System.currentTimeMillis();
				aphal = false;
				if(dir)
				{
					if(e.x+e.ox>=this.x+this.ox)
					{
						direction = 0;//FORE
					}
					else 
					{
						direction = 1;//BACK
					}
				}
				else
				{
					if(e.x+e.mirx>=this.x+this.mirx)
					{
						direction = 1;//BACK
					}
					else 
					{
						direction = 0;//FORE
					}
				}
				return true;
			}
		}
		return false;
	}
	public boolean getAphal()
	{
		return aphal;
	}
	public void hitFlick()
	{
		byte hStandard = 2;
		if(fCount<hStandard)
		{
			roleY -= speed;
			fCount++;
			mapY = CastleCanvas.map.getPosY();
			y = (short)(roleY-mapY);
		}
		if(direction == 0)
		{
			switch(roleState)
			{
			case RIGHT_AIR_HIT:
				dir = false;
				move();
				if(fCount>=hStandard)
				{
					if(drop())
					{
						changState(RIGHT_DOWN_GROUND);
						fCount = 0;
						dir = true;
					}
				}
				break;
			case LEFT_AIR_HIT:
				dir = true;
				move();
				if(fCount>=hStandard)
				{
					if(drop())
					{
						changState(LEFT_DOWN_GROUND);
						fCount = 0;
						dir = false;
					}
				}
				break;
			}
		}
		else
		{
			switch(roleState)
			{
			case LEFT_AIR_BACK_HIT:
				dir = false;
				move();
				if(fCount>=hStandard)
				{
					if(drop())
					{
						changState(LEFT_DOWN_GROUND);
						fCount = 0;
					}
				}
				break;
			case RIGHT_AIR_BACK_HIT:
				dir = true;
				move();
				if(fCount>=hStandard)
				{
					if(drop())
					{
						changState(RIGHT_DOWN_GROUND);
						fCount = 0;
					}
				}
				break;
			}
			
		}
	}
	public void initJump()
	{
		curY = 0;
		vY = speedY;
	}
	protected void dead()
	{//DEAD TODO
		if(dir)
		{
			if(roleState!=RIGHT_DEAD)
				changState(RoleMan.RIGHT_DEAD);
			roleX --;
		
		}
		else
		{
			roleX ++;
			if(roleState!=LEFT_DEAD)
				changState(RoleMan.LEFT_DEAD);
		}
		fCount++;
		if(fCount<25)
			roleY--;
		else
			roleY++;
		mapX = CastleCanvas.map.getPosX();
		mapY = CastleCanvas.map.getPosY();
		x = (short)(roleX-mapX);
		y = (short)(roleY-mapY);
	}
	public void paint(Graphics g)
	{
		switch(roleState)
		{
		case LEFT_STAND:
			drawLeftStand(g);
			if(!isTouchGroud())
				changState(RoleMan.LEFT_CONTINUANCE_DROP);
			if(hitEnemy() || isEnemyAttRole(g))
			{
				switch(direction)
				{
				case 0://FORE
					this.changState(LEFT_GROUND_LIGHTHIT);
					break;
				case 1://BACK
					this.changState(LEFT_G_BACK_LIGHTHIT);
					break;
				}
			}
			break;
		case RIGHT_STAND:
			drawRightStand(g);
			if(!isTouchGroud())
				changState(RoleMan.RIGHT_CONTINUANCE_DROP);
			if(hitEnemy() || isEnemyAttRole(g))
			{
				switch(direction)
				{
				case 0://FORE
					this.changState(RIGHT_GROUND_LIGHTHIT);
					break;
				case 1://BACK
					this.changState(RIGHT_G_BACK_LIGHTHIT);
					break;
				}
			}
			break;
		case L_TO_R_FRO:
			drawLTOR(g);
			if(hitEnemy() || isEnemyAttRole(g))
			{
				this.changState(RIGHT_GROUND_LIGHTHIT);
			}
			break;
		case R_TO_L_FRO:
			drawRTOL(g);
			if(hitEnemy() || isEnemyAttRole(g))
			{
				this.changState(LEFT_GROUND_LIGHTHIT);
			}
			break;
		case LEFT_WALK:
			drawLeftWalk(g);
			if(!isTouchGroud())
			{
				changState(RoleMan.LEFT_CONTINUANCE_DROP);//如要完善,需要替换
			}
			if(hitEnemy() || isEnemyAttRole(g))
			{
				switch(direction)
				{
				case 0://FORE
					this.changState(LEFT_GROUND_LIGHTHIT);
					break;
				case 1://BACK
					this.changState(LEFT_G_BACK_LIGHTHIT);
					break;
				}
			}
			break;
		case RIGHT_WALK:
			drawRightWalk(g);
			if(!isTouchGroud())
				changState(RoleMan.RIGHT_CONTINUANCE_DROP);
			if(hitEnemy() || isEnemyAttRole(g))
			{
				switch(direction)
				{
				case 0://FORE
					this.changState(RIGHT_GROUND_LIGHTHIT);
					break;
				case 1://BACK
					this.changState(RIGHT_G_BACK_LIGHTHIT);
					break;
				}
			}
			break;
		case LEFT_TO_STOP:
			drawLeftStop(g);
			if(hitEnemy() || isEnemyAttRole(g))
			{
				switch(direction)
				{
				case 0://FORE
					this.changState(LEFT_GROUND_LIGHTHIT);
					break;
				case 1://BACK
					this.changState(LEFT_G_BACK_LIGHTHIT);
					break;
				}
			}
			break;
		case RIGHT_TO_STOP:
			drawRightStop(g);
			if(hitEnemy() || isEnemyAttRole(g))
			{
				switch(direction)
				{
				case 0://FORE
					this.changState(RIGHT_GROUND_LIGHTHIT);
					break;
				case 1://BACK
					this.changState(RIGHT_G_BACK_LIGHTHIT);
					break;
				}
			}
			break;
		case LEFT_READY_RELEASE:
			drawLeftReadyMagic(g);
			if(hitEnemy() || isEnemyAttRole(g))
			{
				switch(direction)
				{
				case 0://FORE
					this.changState(LEFT_GROUND_LIGHTHIT);
					break;
				case 1://BACK
					this.changState(LEFT_G_BACK_LIGHTHIT);
					break;
				}
			}
			break;
		case RIGHT_READY_RELEASE:
			drawRightReadyMagic(g);
			if(hitEnemy() || isEnemyAttRole(g))
			{
				switch(direction)
				{
				case 0://FORE
					this.changState(RIGHT_GROUND_LIGHTHIT);
					break;
				case 1://BACK
					this.changState(RIGHT_G_BACK_LIGHTHIT);
					break;
				}
			}
			break;
		case LEFT_ORIGIN_JUMP:
			drawLeftOriJump(g);
			if(originJump())
			{
				vY = speedY;
				this.changState(RoleMan.LEFT_CONTINUANCE_DROP);
			}
			if(hitEnemy() || isEnemyAttRole(g))
			{
				switch(direction)
				{
				case 0://FORE
					this.changState(LEFT_AIR_HIT);
					break;
				case 1://BACK
					this.changState(LEFT_AIR_BACK_HIT);
					break;
				}
				initJump();
			}
			break;
		case RIGHT_ORIGIN_JUMP:
			drawRightOriJump(g);
			if(originJump())
			{
				vY = speedY;
				this.changState(RoleMan.RIGHT_CONTINUANCE_DROP);
			}
			if(hitEnemy() || isEnemyAttRole(g))
			{
				switch(direction)
				{
				case 0://FORE
					this.changState(RIGHT_AIR_HIT);
					break;
				case 1://BACK
					this.changState(RIGHT_AIR_BACK_HIT);
					break;
				}
				initJump();
			}
			break;
		case LEFT_JUMP:
			drawLeftJump(g);
			if(originJump())
			{
				vY = speedY;
				this.changState(RoleMan.LEFT_CONTINUANCE_DROP);
			}
			if(hitEnemy() || isEnemyAttRole(g))
			{
				switch(direction)
				{
				case 0://FORE
					this.changState(LEFT_AIR_HIT);
					break;
				case 1://BACK
					this.changState(LEFT_AIR_BACK_HIT);
					break;
				}
				initJump();
			}
			break;
		case RIGHT_JUMP:
			drawRihgtJump(g);
			if(originJump())
			{
				vY = speedY;
				this.changState(RoleMan.RIGHT_CONTINUANCE_DROP);
			}
			if(hitEnemy() || isEnemyAttRole(g))
			{
				switch(direction)
				{
				case 0://FORE
					this.changState(RIGHT_AIR_HIT);
					break;
				case 1://BACK
					this.changState(RIGHT_AIR_BACK_HIT);
					break;
				}
				initJump();
			}
			break;
		case LEFT_START_DROP:
			drop();
			drawLeftStartDrop(g);
			if(hitEnemy() || isEnemyAttRole(g))
			{
				switch(direction)
				{
				case 0://FORE
					this.changState(LEFT_AIR_HIT);
					break;

⌨️ 快捷键说明

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