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

📄 role.java

📁 在学校时写的一个游戏DEMO
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Image;

public class Role {
	int x;
	int y;
	int w;
	int h;
	static int HP; /*生命值*/
    int SP; /*能量值*/
    int leftStep = 0;
    final int maxHp = 80; /*主角的生命最大值,主角生命的固定上限*/
    static boolean isRight; /*主角的移动方向*/
    int actionIndex; //表示主角的哪个动作(站立、行走、攻击……)
    int frameIndex; //当前处于该动作下的第几帧
    boolean isDead;//标记主角是否死亡
    boolean islong;//判断是否跑步循环了一圈
    static final byte STEP = 5;//主角每次移动步长位5像素
    static byte curStatus; /*主角的状态表示,如同程序基本状态一样*/
    static final byte STATE_STAND1=0;//普通站立
    static final byte STATE_STAND2=1;//楼梯站立
    static final byte STATE_RUN=2;//跑
    static final byte STATE_RUNEND=3;//跑后停止
    static final byte STATE_QGO=4;//快速前进
    static final byte STATE_QBACK=5;//快速后退
    static final byte STATE_BEFOREDOW=6;//下蹲前序列动作
    static final byte STATE_DOWN=7;//下蹲状态
    static final byte STATE_DOWNUP=8;//下蹲后站起的序列动作
    static final byte STATE_BEFORJUMP=9;//跳跃前的序列动作
    static final byte STATE_JUMPUP=10;//跳跃空中的状态
    static final byte STATE_JUMPDOWN=11;//跳跃后下落空中状态
    static final byte STATE_JUMPOK=12;//跳跃落地序列动作
    static final byte STATE_HIT1=13;//地上受伤动作
    static final byte STATE_HIT2=14;//空中受伤动作
    static final byte STATE_DIE=15;//死亡状态
    static final byte STATE_STANDATTACK=16;//普通攻击状态
    static final byte STATE_DOWNATTACK1=17;//下蹲攻击状态
    static final byte STATE_JUMPATTACK=18;//跳跃攻击
    Engine engine;
    public Role(Engine GE){
    	 engine = GE;
    }
    protected void init() {
        isRight = true; //初始化主角的方向(面向)
        SP = 100; //初始化主角的能量值
        HP = maxHp; // 初始化主角生命值
        x = 50; //初始化主角位置
        y = 128;
        setStatus(STATE_STAND1); //初始化主角的状态,
        isDead = false;
        keyState=0;
    }
//  ***画主角
    public void setX(int x){
    	this.x=x;
    }
    public void setY(int y){
    	this.y=y;
    }
    protected void drawRole(Graphics g){
    	if(isDead){
    		engine.isook=true;
    		return;
    	}
        //这里注意:主角对应在动画数据中的编号为0
        Tools.drawNpcItemData(g,0,actionIndex,frameIndex,x,y,isRight);
//        g.drawRect(x-Map.leftTopX-7,y-Map.leftTopY-37+8,14,20);
//        g.drawRect(x-Map.leftTopX-7+5,y-Map.leftTopY-37,4,4);
//        g.drawRect(x-Map.leftTopX-7+4,y-Map.leftTopY-2,6,2);
//        for (int i = 0; i < engine.enemys.size(); i++)
//        {
//        	 Enemy enemy=null;
//             enemy=(Enemy)engine.enemys.elementAt(i);
//             if (enemy != null) {
//            	 g.drawRect(enemy.x-7-Map.leftTopX,enemy.y-30,enemy.w,enemy.h);
//             }
//               
//        } 
    }
    //****************以下为按键部分********************//
    int keyState;
    int keyCode;
    protected void keyPressed(int keys){   //按下
    	keyCode=keys;
    	switch(keys){
    	case Canvas.UP:
    		keyState|=Tools.KEY_UP;
    		break;
    	case Canvas.DOWN:
    		keyState|=Tools.KEY_DOWN;
    		break;
    	case Canvas.LEFT:
    		keyState|=Tools.KEY_LEFT;
    		break;
    	case Canvas.RIGHT:
    		keyState|=Tools.KEY_RIGHT;
    		break;
    	case Canvas.FIRE:
    		keyState|=Tools.KEY_FIRE;
    		break;
    	}
    	keyLogic();
    }
    protected void keyReleased(int keys){
    	leftStep = 0;
    	switch(keys){
    	case Canvas.UP:
    		keyState^=Tools.KEY_UP;
    		break;
    	case Canvas.DOWN:
    		keyState^=Tools.KEY_DOWN;
    		break;
    	case Canvas.LEFT:
    		keyState^=Tools.KEY_LEFT;
    		break;
    	case Canvas.RIGHT:
    		keyState^=Tools.KEY_RIGHT;
    		break;
    	case Canvas.FIRE:
    		keyState^=Tools.KEY_FIRE;
    		break;
    	}
    	keyLogic();
    }
    protected void keyLogic(){
    	switch (curStatus)
        {
        case STATE_STAND1:
        	if((keyState&Tools.KEY_UP)!=0){
        		setStatus(STATE_BEFORJUMP);
        	}
        	if((keyState&Tools.KEY_DOWN)!=0){
            	setStatus(STATE_BEFOREDOW);
        	}
        	if((keyState&Tools.KEY_LEFT)!=0){
        		isRight=false;
            	setStatus(STATE_RUN);
        	}
        	if((keyState&Tools.KEY_RIGHT)!=0){
        		isRight=true;
        		setStatus(STATE_RUN);
        	}
        	if((keyState&Tools.KEY_FIRE)!=0){
        		setStatus(STATE_STANDATTACK);
        	}
        	
        	break;
  	  	case STATE_STAND2:
  	  		break;
  	  	case STATE_RUN:
	  	  	if(keyState==0){
	  	  		if(islong){
	  	  			setStatus(STATE_RUNEND);
	  	  			islong=false;
	  	  		}else{
	  	  			setStatus(STATE_STAND1);
     	   }
	    	}
	  	  	if((keyState&Tools.KEY_FIRE)!=0){
	  	  		setStatus(STATE_STANDATTACK);
	  	  	}
	  	  	if((keyState&Tools.KEY_UP)!=0){
	  	  		setStatus(STATE_BEFORJUMP);
	  	  	}
  	  		break;
  	  	case STATE_RUNEND:
  	  		break;
  	  	case STATE_QGO:
  	  		break;
  	  	case STATE_QBACK:
  	  		break;
  	  	case STATE_BEFOREDOW:
  	  		if(keyState==0){
	  			setStatus(STATE_STAND1);
	  		}
  	  		break;
  	  	case STATE_DOWN:
	  	  	if((keyState&Tools.KEY_LEFT)!=0){
	    		isRight=false;
	    	}
	    	if((keyState&Tools.KEY_RIGHT)!=0){
	    		isRight=true;
	    	}	
  	  		if(keyState==0){
  	  			setStatus(STATE_DOWNUP);
  	  		}
	  	  	if((keyState&Tools.KEY_FIRE)!=0){
	  	  		setStatus(STATE_DOWNATTACK1);
	  	  	}
  	  		break;
  	  	case STATE_DOWNUP:
  	  		break;
  	  	case STATE_BEFORJUMP:
  	  		break;
  	  	case STATE_JUMPUP:
  	  	case STATE_JUMPDOWN:
  	  		if((keyState&Tools.KEY_LEFT)!=0){
	  	  		leftStep = STEP;
	    		isRight=false;
	    	}
	    	if((keyState&Tools.KEY_RIGHT)!=0){
	    		leftStep = STEP;
	    		isRight=true;
	    	}
	    	if((keyState&Tools.KEY_FIRE)!=0){
	  	  		setStatus(STATE_JUMPATTACK);
	  	  	}
  	  		break;
  	  	case STATE_JUMPOK:
  	  		break;
  	  	case STATE_HIT1:
  	  		break;
  	  	case STATE_HIT2:
  	  		break;
  	  	case STATE_DIE:
  	  		break;
  	  	case STATE_STANDATTACK:
	      	if((keyState&Tools.KEY_LEFT)!=0){
	      		if(frameIndex==8)
	          	setStatus(STATE_RUN);
	      	}
	      	if((keyState&Tools.KEY_RIGHT)!=0){
	      		setStatus(STATE_RUN);
	      	}
  	  		break;
  	  	case STATE_DOWNATTACK1:
  	  	
  	  		break;
        }
    }
//  ***以下为助教在各状态的帧的切换,移动,碰撞,逻辑处理部分
    int icout=0;
    protected void roleLogic(){
    	if(isDead) return;
    	isbyHit();
        switch (curStatus)
        {
        case STATE_STAND1:
        	
        	changeRoleFrameIndex(-1);
        	roleMove(0,2);
    		break;
    	case STATE_STAND2:
    		break;
    	case STATE_RUN:
    		 changeRoleFrameIndex(-1);
    		 if(aniIndex==9){
      		   islong=true;
      	   	  }
    		 roleMove(5,5);
    		break;
    	case STATE_RUNEND:
    		changeRoleFrameIndex(STATE_STAND1);
    		break;
    	case STATE_QGO:
    		break;
    	case STATE_QBACK:
    		break;
    	case STATE_BEFOREDOW:
    		changeRoleFrameIndex(STATE_DOWN	);
    		break;
    	case STATE_DOWN:
    		changeRoleFrameIndex(-2);
    		break;
    	case STATE_DOWNUP:
    		changeRoleFrameIndex(0);
    		break;
    	case STATE_BEFORJUMP:
    		changeRoleFrameIndex(STATE_JUMPUP);
    		if(aniIndex>=3){
    			setStatus(STATE_JUMPUP);
    		}    		
    		break;
    	case STATE_JUMPUP:
    		changeRoleFrameIndex(STATE_JUMPDOWN);
    		if (isRight)
                roleMove(leftStep,0);
         else
        	 	roleMove(leftStep,0);
    		roleMove(0,-7);
    		break;
    	case STATE_JUMPDOWN:
    		changeRoleFrameIndex(STATE_JUMPOK);
    		if (isRight)
    			roleMove(leftStep,0);
         else
        	 roleMove(leftStep,0);
    		roleMove(0,7);

⌨️ 快捷键说明

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