QuickHik小游戏项目

    xiaoxiao2021-12-14  25

    package package1; import java.util.*; public 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.strTime=strTime; this.perScore=perScore; } //因为属性都是private修饰的,所以用getter去调属性 public int getlevelNo(){ return levelNo; } public int getstrlength(){ return strlength; } public int gettimeLimit(){ return timeLimit; } public int getstrTime(){ return strTime; } public int getperScore(){ return perScore; } } public class Game { /* 定义一个Game类,调用Player的对象 */ private Player player; public Game(Player player){ this.player = player; } public String printStr(){//定义一个输出字符串的方法 int LevelNo = player.getLevelNo()-1;//把player中的索引传给编号LevelNo int strlen = LevelInilial.levelsArr[LevelNo].getstrlength();//定义一个字符串的长度strlen,字符串的长度与级别数有关 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("a"); break; case 1: buffer.append("b"); break; case 2: buffer.append("c"); break; case 3: buffer.append("d"); break; case 4: buffer.append("e"); break; case 5: buffer.append("f"); break; case 6: buffer.append("g"); break; case 7: buffer.append("h"); break; } } System.out.println(buffer);//输出随机组合的字符串 return buffer.toString();//返回一个随机的玩家需要输入的字符串 }

    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(); } }
    转载请注明原文地址: https://ju.6miu.com/read-968259.html

    最新回复(0)