QuickHit

QuickHit 游戏考验你键盘输入的速度和准确性。
根据输入速度和正确率将玩家分为不同级别,级别越高,一次显示的字符数就越多,玩家
正确输入一次的得分也越高。如果玩家在规定时间内完成规定次数的输入,正确率达到
规定要求,则玩家升级(为了简单起见,规定用户错误输入一次,游戏结束)。玩家最
高级别为六级,初始级别一律为一级。
/*
总结

如果自己分析的话,估计要弄很久才会理清思路,感觉代码的运行顺序不是很理解,一种到达瓶颈的感觉,方法的调用不是很理解,关键是做的题以及看的题不够多。
*/
import java.util.*;
class Player {
	private int levelNo;//级别
	private long startTime;//开始时间
	private int score;//积分
	private long elapseTime;//持续时间
	
	public void setLevelNo(int levelNo){		
		this.levelNo = levelNo;	
	}	
	public void setScore(int score){		
		this.score = score;
	}	
    public void setStartTime(long time){		
		this.startTime = time;
	}
    public void setElapseTime(long elapse){	
	    this.elapseTime = elapse;
    }
    public int getLevelNo(){   	
    	return this.levelNo;
    }   
    public int getScore(){    	
    	return this.score;
    }
    public long getStartTime(){ 	
 	     return this.startTime;
    } 
    public long getElapseTime(){	
 	     return this.elapseTime;
    }   
    public void play(){
    	Game game = new Game(this);
    	Scanner input = new Scanner(System.in);
		//开始游戏
    	for(int i = 0; i < LevelInitial.levelsArr.length; i++){
			//晋级
    		levelNo += 1;
			//开始时间
    		startTime = System.currentTimeMillis();
    		for(int j = 0; j < LevelInitial.levelsArr[levelNo -1].getStrTime();j++){
				//生成字符串
    			String out = game.printStr();
				//输入字符串
    			String in = input.next();
				//比较
    			game.result(out, in);    			
    		}   		
    	}    	
    }
}

class Game{
	private Player player;
	public Game(Player player){
		
		this.player = player;
	}
	public String printStr(){
		int levelNo = player.getLevelNo() - 1;
		int strlen = LevelInitial.levelsArr[levelNo].getStrlength();
		Random random = new Random();
		StringBuffer buffer = new StringBuffer();
		//通过循环生成要输出的额字符串
		for(int i = 0; i < strlen; i++){
			//产生随机数
			int rand = random.nextInt(strlen);
			//根据随机数拼接字符串
			switch(rand){			
			case 0:
				buffer.append(">");
				break;
			case 1:
				buffer.append("<");
				break;
			case 2:
				buffer.append("*");
				break;
			case 3:
				buffer.append("&");
				break;
			case 4:
				buffer.append("@");
				break;
			case 5:
				buffer.append("%");
				break;
			case 6:
				buffer.append("@");
				break;			
			}			
		}	
		//输出字符串
		System.out.println(buffer);
		//返回字符串
		return buffer.toString();
	}
	public void result(String out, String in){	
		//对比
		if(out.equals(in)){ 
			long currentTime = System.currentTimeMillis();
			if((currentTime - player.getStartTime())/ 1000 <= LevelInitial.levelsArr[player.getLevelNo() -1].getTimeLimit()){
				//计算分数
				int newScore = player.getScore()+ LevelInitial.levelsArr[player.getLevelNo() -1].getPerScore();
				player.setScore(newScore);
				//计算已用时间
				long time = (currentTime - player.getStartTime())/ 1000;
				//给玩家的用时
				player.setElapseTime(time);
				//输出 时间,分数,等级
				System.out.println("输入正确,您的等级是:" + player.getLevelNo() + ", 您的积分是:" + player.getScore() + ", 您的用时为:" + player.getElapseTime() + "秒");
				//判断 是否全部通关
				if(player.getLevelNo() == 6){
					int sum = 0;					
					for(int j = 0; j < LevelInitial.levelsArr.length; j++ ){
						//每个级别的总分
				    	int currentScore = LevelInitial.levelsArr[j].getPerScore() * LevelInitial.levelsArr[j].getStrTime();
						//所有总分
				    	sum += currentScore;				    	
				    }	
					//总分一样,通关
					if(player.getScore() == sum){
						System.out.println("恭喜您全部通关!!真棒!!");
						System.exit(0);
					}			
				}				
				}else{//超时
				System.out.println("输入正确,但是时间超时,游戏结束!!游戏退出!!");
				System.exit(1);
			}
		}else{
			System.out.println("输入错误,游戏结束!!游戏退出!!");
			System.exit(1);			
		}		
	}
}

class Level {
	private int levelNo;//级别编号
	private int strlength;//当前级别对应的 字符串长度
	private int timeLimit;//当前级别对应的输入时间限制要求
	private int strTime;//当前级别限制的 次数
	private int perScore;//当前级别对应的 分数
	public Level(int levelNo, int strlength, int timeLimit, int strTime, int perScore){		
		this.levelNo = levelNo;
		this.strlength = strlength;
		this.timeLimit = timeLimit;
		this.perScore = perScore;
		this.strTime = strTime;
	}
	
	//每个级别的对象 代表一个级别 需要获取这个值
	public int getLevelNum(){
		return this.levelNo;
	}	
    public int getTimeLimit(){		
		return this.timeLimit;
	}   
     public int getStrTime(){		
		return this.strTime;
	}	
     public int getStrlength(){		
 		return this.strlength;
 	}    
     public int getPerScore(){ 		
		return this.perScore;
 	}
}

class LevelInitial {
	public static Level[] levelsArr = new Level[6];
	static {		
		levelsArr[0] = new Level(1, 1, 30, 5, 1);
		levelsArr[1] = new Level(2, 2, 25, 4, 2);
		levelsArr[2] = new Level(3, 3, 22, 3, 5);
		levelsArr[3] = new Level(4, 4, 20, 3, 8);
		levelsArr[4] = new Level(5, 4, 18, 3, 10);
		levelsArr[5] = new Level(6, 5, 15, 3, 15);		
	}
}

public class Test {	
	public static void main(String[] args){
		Player p = new Player();
		p.play();
	}
}

你可能感兴趣的:(QuickHit)