需求概述:QuickHit 游戏考验你键盘输入的速度和准确性。 根据输入速度和正确率将玩家分为不同级别,级别越高,一次显示的字符数就越多,玩家 正确输入一次的得分也越高。如果玩家在规定时间内完成规定次数的输入,正确率达到 规定要求,则玩家升级(为了简单起见,规定用户错误输入一次,游戏结束)。玩家最 高级别为六级,初始级别一律为一级。
import java.util.Random;
import java.util.Scanner; 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();//1.1 获取到当前玩家等级 下对应的字符串长度 Random random = new Random();//随机数 StringBuffer buffer = new StringBuffer();//创建一个StringBuffer 对象,用来不断的存储和改变字符串内容 for(int i = 0; i < strlen; i++){ int rand = random.nextInt(strlen); switch(rand){ case 0: buffer.append("Q"); break; case 1: buffer.append("W"); break; case 2: buffer.append("E"); break; case 3: buffer.append("R"); break; case 4: buffer.append("D"); break; case 5: buffer.append("F"); break; } } System.out.println(buffer); return buffer.toString(); } public void result(String out, String in){ if(out.equals(in)){ long currentTime = System.currentTimeMillis();//2.获取到 开始游戏时的时间戳 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, 2, 3, 5, 1); levelsArr[1] = new Level(2, 3, 5, 7, 2); levelsArr[2] = new Level(3, 4, 5, 3, 5); levelsArr[3] = new Level(4, 5, 8, 3, 5); levelsArr[4] = new Level(5, 6, 1, 3, 8); levelsArr[5] = new Level(6, 7, 1, 3, 9); } } 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); } } } } public class GameTest { public static void main(String[] args){ //创建玩家,玩游戏 Player p = new Player(); p.play(); } }