轻量级前端框架助力开发者提升项目效率与性能
578
2022-10-20
QuickHit 项目
一 、项目需求根据输入速率和正确率将玩家分为不同级别,级别越高,一次显示的字符数越多,玩家正确输入一次的得分也越高.如果玩家在规定时间内完成规定次数的输入,正确率达到规定要求,则玩家升级(为了简单起见,规定用户只要错误输出一次,则游戏结束).玩家最高级别为6级,初始级别一律为一级.
二、项目所覆盖的知识点:①面向对象设计的思想. ②使用类图理解类的关系 ③类的封装 ④构造方法的使用 ⑤this和static关键字的使用
运行效果图:
<<<<输入正确,您的级别:1您的积分:1已用时间:2秒<><>输入正确,您的级别:1您的积分:2已用时间:5秒<><>输入正确,您的级别:1您的积分:3已用时间:6秒><><输入正确,您的级别:1您的积分:4已用时间:8秒<><>输入正确,您的级别:1您的积分:5已用时间:10秒<<<<输入正确,您的级别:1您的积分:6已用时间:11秒>*>>*>输入正确,您的级别:2您的积分:2已用时间:5秒*<<*<<输入正确,您的级别:2您的积分:4已用时间:8秒******输入正确,您的级别:2您的积分:6已用时间:10秒>*>>*>输入正确,您的级别:2您的积分:8已用时间:17秒<>><>>输入正确,您的级别:2您的积分:10已用时间:19秒><>><>输入正确,您的级别:2您的积分:12已用时间:23秒>#>*>#>*输入正确,您的级别:3您的积分:5已用时间:5秒<<>><<>>输入正确,您的级别:3您的积分:10已用时间:10秒>*><>*><输入正确,您的级别:3您的积分:15已用时间:16秒<*#*<*#*输入正确,您的级别:3您的积分:20已用时间:21秒<<<#<<<#你输入太慢了,已经超时,退出。
玩家类
在玩家类中要用到currentTimeMillis()方法 public static long currentTimeMillis() * 返回以毫秒为单位的当前时间。 * 注意,当返回值的时间单位是毫秒时,值的粒度取决于底层操作系统,并且粒度可能更大。 * 例如,许多操作系统以几十毫秒为单位测量时间。返回值: 当前时间与协调世界时 1970 年 1 月 1 日午夜之间的时间差(以毫秒为单位测量)。
import java.util.Random;import java.util.Scanner;public class Player { public int levelNo; // 级别号 public int currScore; // 当前积分 public long startTime; // 各级别开始时间 public int elapsedTime; // 各级别已用时间 public int getLevelNo() { return levelNo; } public void setLevelNo(int levelNo) { this.levelNo = levelNo; } public int getCurrScore() { return currScore; } public void setCurrScore(int currScore) { this.currScore = currScore; } 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; } // 玩家玩游戏的方法 public void play() { // 调用游戏类带参数的构造传入玩家对象 Game game = new Game(this); Scanner input = new Scanner(System.in); // 外层循环,循环一次级别晋级 for (int i = 0; i < LevelParam.levels.length; i++) { // 晋级 this.levelNo += 1; // 晋级后计时清零 //currentTimeMillis this.startTime = System.currentTimeMillis(); this.currScore = 0; if (this.levelNo == 6) { System.out.println("恭喜过关!"); break; } // 内层循环,循环一次完成一次字符串的输入输出比较 for (int j = 0; j < LevelParam.levels.length; j++) { // 输出游戏字符串 String outstr = game.printStr(); // 接受玩家输入 String instr = input.next(); // 游戏判断玩家输入是否正确 game.printResult(outstr, instr); } } }
游戏类
import java.util.Random;public class Game { public Player player; public Game(Player player2) { // TODO Auto-generated constructor stub this.player = player2; } public String printStr() { int strLength = LevelParam.levels[player.getLevelNo() - 1] .getStrLength(); StringBuffer buffer = new StringBuffer(); Random random = new Random(); // 通过循环生成要输出的字符串 for (int i = 0; i < strLength; i++) { // 产生随机数 int rand = random.nextInt(strLength); // 根据随机数拼接字符串 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; } } // 输出字符串 System.out.println(buffer); // 返回该字符串的值,用于比较 return buffer.toString(); } // 系统给的字符串与玩家输入的字符串进行对比 // out 系统输出的字符串 // in 玩家输入的字符串 public void printResult(String out, String in) { boolean flag = false; if (out.equals(in)) { // 系统输出与玩家输入一致 flag = true; } else { System.out.println("输入错误,退出。"); System.exit(0); } /** * 如果输入正确: 1.若超时,退出 2.若不超时,计算玩家时间、积分,输出玩家当前级别、积分、已用时间 并判断是否闯关成功 */ if (flag) { long currentTime = System.currentTimeMillis(); // 如果超时 if ((currentTime - player.getStartTime()) / 1000 > LevelParam.levels[player .getLevelNo() - 1].getTimeLimit()) { System.out.println("你输入太慢了,已经超时,退出。"); System.exit(1); }else{ //计算玩家已用时间 player.setElapsedTime((int)(currentTime-player.getStartTime()) / 1000); // 计算玩家当前积分 player.setCurrScore(player.getCurrScore() + LevelParam.levels[player.getLevelNo() - 1] .getPerScore()); //输出玩家当前级别,当前积分和已用时间 System.out.println("输入正确,您的级别:"+player.levelNo+"您的积分:"+player.currScore+"已用时间:"+player.elapsedTime+"秒"); } } }}
等级类
public class Level { // 各级别号 private int levelno; // 各级别一次输出字符串的长度 private int strLength; // 各级别输出字符串的次数 private int strTimes; // 各级别闯关时间的限制 private int timeLimit; // 各级别一次输入正确的得分 private int perScore; public int getLevelno() { return levelno; } public void setLevelno(int levelno) { this.levelno = levelno; } public int getStrLength() { return strLength; } public void setStrLength(int strLength) { this.strLength = strLength; } public int getStrTimes() { return strTimes; } public void setStrTimes(int strTimes) { this.strTimes = strTimes; } public int getTimeLimit() { return timeLimit; } public void setTimeLimit(int timeLimit) { this.timeLimit = timeLimit; } public int getPerScore() { return perScore; } public void setPerScore(int perScore) { this.perScore = perScore; } public Level() { super(); // TODO Auto-generated constructor stub } public Level(int levelno, int strLength, int strTimes, int timeLimit,) { super(); this.levelno = levelno; this.strLength = strLength; this.strTimes = strTimes; this.timeLimit = timeLimit; this.perScore = perScore; }}
级别
static{ //代码块 }
见 java.面向对象.static关键字
public class LevelParam { //创建数组对应六个级别 public final static Level levels[] = new Level[6]; static{ levels[0] = new Level(1,2,10,30,1); levels[1] = new Level(2,3,9,26,2); levels[2] = new Level(3,4,8,22,5); levels[3] = new Level(4,5,7,18,8); levels[4] = new Level(5,6,6,15,10); levels[5] = new Level(6,7,5,12,15); }}
测试类
public class Test { public static void main(String[]) { //实例化玩家对象 Player player=new Player(); //调用玩家玩游戏的方法 player.play(); }}
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~