package cn.bdqn.bdqn; // 游戏级别参数类 public class Level { private int levelNo; // 级别编号 private int strLength; // 打印字符串长度 private int strTimes; // 打印字符串次数 private int timeLimit; // 限制时长(秒) private int perScore; // 每关得分 public Level(int levelNo, int strLength, int strTimes, int timeLimit, int perScore) { this.levelNo = levelNo; this.strLength = strLength; this.strTimes = strTimes; this.timeLimit = timeLimit; this.perScore = perScore; } public int getLevelNo() { return levelNo; } public int getStrLength() { return strLength; } public int getStrTimes() { return strTimes; } public int getTimeLimit() { return timeLimit; } public int getPerScore() { return perScore; } }
package cn.bdqn.bdqn; import java.util.Random; /** * 游戏类 */ public class Game { // 表示游戏玩家 private Player player; // 带参构造 public Game(Player player){ this.player = player; } // 打印随机字符串并返回该字符串 public String printStr(){ // 获取玩家对应级别的游戏参数对象 Level level = LevelParam.levels[this.player.getLevelNo()-1]; String[] strs = {"<",">","*","%","#","&","@"}; String printStr = ""; for (int i = 1; i <= level.getStrLength(); i++) { Random random = new Random(); int index = random.nextInt(level.getLevelNo() + 1); String randomStr = strs[index]; printStr += randomStr; } System.out.println("===> " + printStr); return printStr; } // 打印本次小关的执行结果 public void printResult(String out,String in){ // 输入错误:提示信息,系统停止 if(!out.equals(in)){ System.out.println("输入错误,游戏结束!"); System.exit(0); } // 级别参数中有时长限制(timeLimit),玩家中有已用时长(elapsedTime) Level level = LevelParam.levels[this.player.getLevelNo()-1]; if(level.getTimeLimit() < this.player.getElapsedTime()){ System.out.println("你输入太慢了,已经超时,退出!"); System.exit(0); } // 累加本关积分 this.player.setCurScore(this.player.getCurScore()+level.getPerScore()); // 打印相关信息 System.out.println("输入正确,您的积分"+this.player.getCurScore() +",您的级别"+this.player.getLevelNo() +",已用时间"+this.player.getElapsedTime()+"秒。"); } }
package cn.bdqn.bdqn; // 当前游戏所有级别的初始化参数描述类 public class LevelParam { public static final Level[] levels; static { levels = new Level[6]; levels[0] = new Level(1,2,1,30,1); levels[1] = new Level(2,3,1,28,2); levels[2] = new Level(3,4,1,26,3); levels[3] = new Level(4,5,1,24,4); levels[4] = new Level(5,6,1,22,5); levels[5] = new Level(6,7,1,20,6); } }
package cn.bdqn.bdqn; import java.util.Scanner; // 玩家类 public class Player { private int levelNo; // 当前级别 private int curScore; // 当前级别积累的积分 private long startTime; // 当前级别开始的s时间戳(从1970年元时1月1日0点0分0秒0毫秒) private int elapsedTime; // 当前级别已用时间(秒) // 玩游戏 public void play(){ Scanner input = new Scanner(System.in); // 创建游戏类 Game game = new Game(this); // 开始游戏的过程 // 外层循环控制级数 for (int i = 0; i < LevelParam.levels.length; i++){ // 玩家升一级,用时和积分清零 this.levelNo++; // 升级 this.setCurScore(0); // 积分清零 this.setElapsedTime(0); // 用时清零 this.setStartTime(System.currentTimeMillis()); // 本级开始的时间戳 // 根据当前级别的字符串打印次数循环完成每关游戏 // 内层循环控制没关游戏过程 Level level = LevelParam.levels[this.getLevelNo()-1]; for (int j = 1; j <=level.getStrTimes(); j++){ // 游戏打印字符串 String out = game.printStr(); // 玩家输入字符串 String in = input.next(); // 计算本次输入后,更新已用时间 this.setElapsedTime((int)((System.currentTimeMillis() - this.getStartTime()) / 1000)); // 打印游戏结果 game.printResult(out,in); } } // 绝世高手 System.out.println("你已闯关成功,成为绝世高手,恭喜你!!!"); } public int getLevelNo() { return levelNo; } public void setLevelNo(int levelNo) { this.levelNo = levelNo; } public int getCurScore() { return curScore; } public void setCurScore(int curScore) { this.curScore = curScore; } public long getStartTime() { return startTime; } public void setStartTime(long startTime) { this.startTime = startTime; } public int getElapsedTime() { return elapsedTime; } public void setElapsedTime(int elapsedTime) { this.elapsedTime = elapsedTime; } }
package cn.bdqn.bdqn; public class Main { public static void main(String[] args) { // write your code here new Player().play(); } }