需求概述: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();
}
}