public void result(String out,String in){
//定义一个用于比较玩家的输入和系统输出作比较的方法
if(out.equals(in)){//判断输入的和输出的是否相等long currentTime=System.currentTimeMillis();
//如果输入的和输出的相等,再判断玩家所用的时间是否少于规定时间
//因为是时间戳,单位为毫秒,所以要除以1000,转化为秒 if((currentTime-player.getstrTime())/1000 <= LevelInilial.levelsArr[player.getLevelNo() -1].gettimeLimit()){ /* 如果玩家输入正确并且不超时,再应用规定的当前等级的奖励分数 来计算玩家当前的总分 当玩家升级进入下一关时,玩家当前分数 = 通过当前关所得的分数 的总和 + 玩家所处关卡的前一关的分数 */ int newScore=player.getScore()+ LevelInilial.levelsArr[player.getLevelNo() -1].getperScore(); player.setScore(newScore); long time = (currentTime-player.getstrTime()/1000); System.out.println("输入正确,您的等级是:"+player.getLevelNo() + ", 您的积分是:" + player.getScore() + ", 您的用时为:" + player.getelapseTime() + "秒"); if(player.getLevelNo() == 6){ int sum = 0;//定义一个sum,用来存放玩家最后得分 for(int j = 0; j < LevelInilial.levelsArr.length; j++ ){ int currentScore = LevelInilial.levelsArr[j].getperScore() * LevelInilial.levelsArr[j].getstrTime(); sum += currentScore; }if(player.getScore() == sum){//如果玩家最后所得分数与系统规定通全关的分数相等,那么玩家就玩通关了
System.out.println("恭喜您通全关!!!!"); System.exit(0); } } }else{ System.out.println("输入正确,但是时间超时,game over!!"); System.exit(1); } }else{ System.out.println("输入错误,game over!!"); System.exit(1); } } } public class LevelInilial { public static Level[] levelsArr = new Level[6]; /* 静态static初始化块,初始化等级以及规定每个等级所对应的字符串长度、 通过每个级别的总时间和每关都必须输入正确的次数,并且规定通过每一级别所给的奖励分数。 */ static{ //levelsArr[0]=new Level(编号,字符段长度,时间限制,次数,分数); levelsArr[0]=new Level(1,4,30,8,2); levelsArr[1]=new Level(2,5,26,8,3); levelsArr[2]=new Level(3,6,21,8,4); levelsArr[3]=new Level(4,7,18,8,5); levelsArr[4]=new Level(5,8,18,8,6); levelsArr[5]=new Level(6,8,15,8,7); } } public class Player { private int levelNo;//级别号 private long strTime;//开始时间 private int score;//积分 private long elapseTime;//持续时间 //因为是private修饰的属性,所以需要用setter和getter来调用 public void setLevelNo(int levelNo){ this.levelNo = levelNo; } public void setstartTime(long strTime){ this.strTime = strTime; } public void setScore(int score){ this.score = score; } public void setelapseTime(long elapseTime){ this.elapseTime = elapseTime; } public int getLevelNo(){ return levelNo; } public long getstrTime(){ return strTime; } public int getScore(){ return score; } public long getelapseTime(){ return elapseTime; } //定义玩家玩游戏的方法 public void play(){ Game game = new Game(this);//调用游戏类Game Scanner input = new Scanner(System.in);//创建键盘录入 //定义一个i用来存放系统规定的6个关卡,并且每通关一次就自动进入下一个关卡 for(int i = 0;i<LevelInilial.levelsArr.length;i++){ levelNo+=1; strTime=System.currentTimeMillis();//开始时间为系统所对应的时间 for(int j=0;j<LevelInilial.levelsArr[levelNo-1].getstrTime();j++){ String out = game.printStr();//把Game类的game对象的数据输出的字符串赋给变量out String in = input.next();//变量in为玩家通过键盘录入的字符串 game.result(out,in);//返回随机输出的和玩家输入的字符串 } } } } //main方法的测试类 public class Test { public static void main(String[]args){ Player p = new Player();//创建玩家类的对象,调用玩家的play方法 p.play(); } }