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

📄 gamestart.java

📁 最近弄的一个跨栏小游戏
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
			}
			break;
		case pressKey:
            if(gs.getGameAction(keyCode)==Canvas.FIRE || keyCode==Canvas.KEY_NUM5){
            	state = readyForRace;
            	init();
		    }
			break;
		case raceBegin:{
			if(gplayer[selected].getTripState() || gplayer[selected].getSpeed()==0){    //如果碰到栏
				if(key==Canvas.KEY_NUM6){   // 按6键恢复
					gplayer[selected].changeActSequence(GamePlayer.runAct);
					gplayer[selected].changeTripState(false);
					gplayer[selected].changeSpeed(gplayer[selected].getPower()/3);
				}
			}else{
				if(key==Canvas.KEY_NUM6){   // 按6键提速
					if(time++>=2){
					    speedUp(selected,gplayer[selected].getPower()/3);
					    time = 0;
					}
				}
				
				if(key==Canvas.KEY_NUM5){  // 5键起跳
					gplayer[selected].changeActSequence(GamePlayer.jumpAct);
					gplayer[selected].changeJumpState(true);
				}
			}
		}
		case readyForRace:
			// 5键起跑
			// 判断是否抢跑
			if(keyCode==Canvas.KEY_NUM6){
				if(gplayer[selected].getReadyState()){
				    gplayer[selected].changeActSequence(GamePlayer.takeoff);
				    gplayer[selected].changeReadyState(false);
				    gplayer[selected].changeSpeed(gplayer[selected].getMaxSpeed());    // 以最大速度起步
				    state = raceBegin;
				}else if(state==readyForRace){
					time = 0;
					isError = true;
				}
			}
			if(keyCode==-7){
				selectIndex = 0;
				state = pause;
				init();
			}
			break;
		case raceEnd:
			if(showWinner){   // 任意键跳出领奖画面
				showWinner = false;
			}
			break;
		case reTry:
			if(keyCode==-6){
				state = readyForRace;
				init();
			}
			if(keyCode==-7)
				gs.setGameState(GameScreen.MAINMENU);
			break;
		case pause:
			if(gs.getGameAction(keyCode)==Canvas.UP || keyCode==Canvas.KEY_NUM2)
				selectIndex--;
			if(gs.getGameAction(keyCode)==Canvas.DOWN || keyCode==Canvas.KEY_NUM8)
				selectIndex++;
			if(gs.getGameAction(keyCode)==Canvas.FIRE || keyCode==Canvas.KEY_NUM5){
				if(selectIndex==0){
					state = raceBegin;
				}
				if(selectIndex==1){
					gs.setGameState(GameScreen.MAINMENU);
				}
				if(selectIndex==2){
					gs.setGameState(GameScreen.QUIT);
				}
			}
			break;
		case inputName:
			if(gs.getGameAction(keyCode)==Canvas.UP ||keyCode==Canvas.KEY_NUM2)
				name[selectIndex]--;
			if(gs.getGameAction(keyCode)==Canvas.DOWN ||keyCode==Canvas.KEY_NUM8)
				name[selectIndex]++;
			if(gs.getGameAction(keyCode)==Canvas.LEFT ||keyCode==Canvas.KEY_NUM4)
				selectIndex--;
			if(gs.getGameAction(keyCode)==Canvas.RIGHT ||keyCode==Canvas.KEY_NUM6)
				selectIndex++;
			if(keyCode==-6)   //确认
				isDone = true;
			break;
		}
	}
	
	//提速
	private void speedUp(int id,int speed) {
		gplayer[id].changeSpeed(gplayer[id].getSpeed()+speed);
	}

//  逻辑判断	
	public void doLogic(){
		switch(state){
		case loading:
			if(percent==100)
				state = playerSelect;
			break;
		case playerSelect:
			if(selectIndex<0)
				selectIndex = allPlayer-1;
			if(selectIndex>=allPlayer)
				selectIndex = 0;
			time++;
			break;
		case pressKey:
			break;
		case readyForRace:
			setup();
			smartCheck();
			break;
		case raceBegin:
			updateTime();
			playerRun();
			smartCheck();   //智能判断 
			collistionCheck();
			update();
			break;
		case raceEnd:
			// 判断名次
			if(!showWinner){
				rm = new RecordManager("hurdlerace");
				addRecord();
				if(notSoGood)
					state = reTry;
			}else{
				
			// 积分榜排名
			// 询问是否再次游戏
			}
			break;
		case reTry:
			break;
		case pause:
			if(selectIndex<0)
				selectIndex = 2;
			if(selectIndex>=3)
				selectIndex = 0;
			break;
		case inputName:
			if(isDone){
				addRecord();
				isDone = false;
				gs.setGameState(GameScreen.HIGHTSCORE);
			}
			if(selectIndex>=name.length)
				selectIndex = name.length-1;
			if(selectIndex<0)
				selectIndex = 0;
			if(name[selectIndex]<'A')
				name[selectIndex] = 'Z';
			if(name[selectIndex]>'Z')
				name[selectIndex] = 'A';
			break;
		}
	}
	
	private void addRecord() {
		try {
			if(isDone){
				rm.addRecord(new String(name), gplayer[selected].getScore());
				return;
			}
			if(winner[winner.length-1]!=selected && rm!=null && rm.isNewRecord(gplayer[selected].getScore())){
				state = inputName;
				selectIndex = 0;
			}else{
				notSoGood = true;
			}
		} catch (RecordStoreNotOpenException e) {
			e.printStackTrace();
		} catch (RecordStoreFullException e) {
			e.printStackTrace();
		} catch (RecordStoreException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	private void setup() {
		if(isError && time>6){    // 如果违例,等待5
			isError = false;
			time = 0;
			init();
		}else{
			for(int i=0; i<gplayer.length; i++){
				if(time==11)
				    gplayer[i].changeFrame();
				if(time>21){
					gplayer[i].changeReadyState(true);
				}
			}
			time++;	
		}
	}

//  AI
	private void smartCheck() {
		if(state==readyForRace){
			for(int i=0; i<gplayer.length; i++){
				if(i!=selected && gplayer[i].getReadyState()){
					if(gplayer[i].getSkill()+gplayer[i].getTime()>=3){     //如果技能值+时间>=3,起跑
						gplayer[i].changeActSequence(GamePlayer.takeoff);
						gplayer[i].changeReadyState(false);
						gplayer[i].changeSpeed(gplayer[i].getMaxSpeed());   //起步速度
						state = raceBegin;
					}
				}
			}
		}
		
		if(state==raceBegin){
			for(int i=0; i<gplayer.length; i++){
				int col = gplayer[i].getX()/22;
				int block = gmap.getBlock(i,col+1);
				if(i!=selected){
					if(block==0 && ((rmd.nextInt()>>>1)%(12-gplayer[i].getSkill())==1)){
						if(!(gplayer[i].getJumpState())){
						    gplayer[i].changeActSequence(GamePlayer.jumpAct);
						    gplayer[i].changeJumpState(true);
					    }
					}
				}
				if(block==-2 && !gplayer[i].getFinishState()){     // 冲刺
					System.out.println(i);
					gplayer[i].changeActSequence(GamePlayer.sprint);
					gplayer[i].changeFinishState(true);
					score = second*100+millis;    //记录冲刺时间
					if(GamePlayer.getFinishNum()<winner.length){      // 统计名次
					    winner[GamePlayer.getFinishNum()] = i;
					    gplayer[i].setScore(score);
					}
				}
			}	
		}
	}

//  数据更新
	private void update() {
		for(int i=0; i<gplayer.length; i++){
			if(i!=selected && !gplayer[i].getFinishState()){
				if(gplayer[i].getTripState() && gplayer[i].comeBack()){
					gplayer[i].changeActSequence(GamePlayer.runAct);
					gplayer[i].changeTripState(false);
					gplayer[i].changeSpeed(2);                           //摔倒后的起身速度
				}else
			        speedUp(i,1);
			}
		}
		//速度减慢
		if(time2++>3){
			speedUp(selected,-1);
			time2 = 0;
		}
		if(gplayer[selected].getSpeed()==0){
			gplayer[selected].changeActSequence(GamePlayer.stopAct);
		}
		// 检测是否所有运动员都完成了比赛
		if(GamePlayer.getFinishNum()==gplayer.length){
			// 游戏结束
			state = raceEnd;
			showWinner = true;
			initPic();
		}
	}

//  碰撞检测
	private void collistionCheck() {
		for(int i=0; i<gplayer.length; i++){
			int col = gplayer[i].getX()/22;
			int block = gmap.getBlock(i,col);
			if(block==0 
			  && (gplayer[i].getY()+gplayer[i].getCileH())>=GameMap.runwayWidth*(i+1)+93 
			  &&!(gplayer[i].getTripState())){
				if(!gplayer[i].getJumpState()){
				    gplayer[i].changeActSequence(GamePlayer.tripAct);
				    gplayer[i].changeTripState(true);
				}
				gmap.setBlock(i,col,1);
			}
		}
	}

	private void playerRun() {
		for(int i=0; i<gplayer.length; i++){
			gplayer[i].move(gplayer[i].getSpeed());
			gplayer[i].run();	
		}
	}

//  资源释放
	public void releaseRes() {
		bg_img = null;
		cp_img = null;
		text_img = null;
		step_img = null;
		winner_img = null;
		for(int i=0; i<athlete_img.length; i++)
			athlete_img[i] = null;
		System.gc();
	}

	public void selected(int id){
		selected = 1;//id%playerNum;
		sequence[1] = id%playerNum;
		sequence[0] = (sequence[1]+1)%playerNum;
		sequence[2] = (sequence[0]+1)%playerNum;
		sequence[3] = (sequence[2]+1)%playerNum;
	}
	
	private void updateTime() {
		millis+=5;
	    if(millis>=100){
	    	second++;
	    	millis = 0;
	    }
	    if(second>=60){
	    	minute++;
	    	second = 0;
	    }
	}

	private GameScreen gs = null;
	private GamePlayer gplayer[];
	private Image athlete_img[];
	private int sequence[];   // 序列
	private int millis;
	private int second;
	private int minute;
	private int state;
	private int selected;
	private int playerNum;
	private int allPlayer;
	private int percent;
	//map
	private GameMap gmap;
	//
	private int time;  //时间控制器
	private int time2;
	private int winner[] = new int[4];
	private Random rmd = new Random();
	// race End
	private int score;
	private int selectIndex;
	private boolean isError;
	private boolean showWinner;
	private Image bg_img;
	private Image pause_img;
	private Image lp_img;
	private Image rp_img;
	private Image step_img;
	private Image cp_img;
	private Image text_img;
	private Image winner_img;
	//RMS
	private RecordManager rm;
	private boolean notSoGood;
	private int key;
    private char name[] = {'A','A','A'};  //存储玩家姓名
    private boolean isDone;
}

⌨️ 快捷键说明

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