QuickHit 游戏考验你键盘输入的速度和准确性。
根据输入速度和正确率将玩家分为不同级别,级别越高,一次显示的字符数就越多,玩家
正确输入一次的得分也越高。如果玩家在规定时间内完成规定次数的输入,正确率达到
规定要求,则玩家升级(为了简单起见,规定用户错误输入一次,游戏结束)。玩家最
高级别为六级,初始级别一律为一级。
/*
总结
如果自己分析的话,估计要弄很久才会理清思路,感觉代码的运行顺序不是很理解,一种到达瓶颈的感觉,方法的调用不是很理解,关键是做的题以及看的题不够多。
*/
import java.util.*;
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);
}
}
}
}
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();
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(">");
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;
case 6:
buffer.append("@");
break;
}
}
//输出字符串
System.out.println(buffer);
//返回字符串
return buffer.toString();
}
public void result(String out, String in){
//对比
if(out.equals(in)){
long currentTime = System.currentTimeMillis();
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, 1, 30, 5, 1);
levelsArr[1] = new Level(2, 2, 25, 4, 2);
levelsArr[2] = new Level(3, 3, 22, 3, 5);
levelsArr[3] = new Level(4, 4, 20, 3, 8);
levelsArr[4] = new Level(5, 4, 18, 3, 10);
levelsArr[5] = new Level(6, 5, 15, 3, 15);
}
}
public class Test {
public static void main(String[] args){
Player p = new Player();
p.play();
}
}