class Player
{
//属性
//级别号 当前这个玩家在哪一个级别
private int levelNo;
//开始游戏的时间
private long startTime;
//积分
private int score;
//每级别游戏的持续时间
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;
}
//玩家的行为: 玩游戏
{
Game game = new Game(this);
//创建对象
Scanner input = new Scanner(System.in);
//开始游戏
//外层循环,所有的游戏级别
//每一次执行一次外层循环,代表玩家 玩通了一个级别,级别+1
{
levelNo += 1;
for (int j = 0; j < LevelInitial.levelsArr[levelNo -1].getStrTime(); j++)
{
//玩游戏
// 生成字符串
String out = game.printStr();
//生成字符串
String in = input.next();
//比较结果
game.result(out,in);}
}
}
}
class Level
{
//级别编号
private int levelNo;
//当前级别对应的 字符串长度
private int strlength;
//当前级别对应的输入时间限制要求
private int timeLimit;
//当前级别限制的次数
private int strTime;
//当前级别对应的分数
private int perScore;
/*
* 因为每个级别,应该是一来就是规定好这些 游戏初始的内容,所以不提供setter
*
* 一次构造之后,不允许再更改它
* */
{
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];
//静态初始化块
//在加载类的时候执行静态初始化块,并且只会被执行一次
levelsArr[0] = new Level(1, 2, 30, 5, 1);
levelsArr[1] = new Level(2, 3, 25, 4, 2);
levelsArr[2] = new Level(3, 4, 22, 3, 5);
levelsArr[3] = new Level(4, 5, 20, 3, 8);
levelsArr[4] = new Level(5, 6, 18, 3, 10);
levelsArr[5] = new Level(6, 7, 15, 3, 15);
}
}
class Game
{
//需要一个玩家
private Player player;
//如果你要开启一局游戏,一定要给游戏对象一个玩家对象,才能创建这个游戏对象
//提供一个带玩家作为参数的构造方法
{
this.player = player;
}
//方法:
/*
* 1.生成一个对应玩家级别的字符串
* String 方法名(){
*
* }
*
* */
{
//生成字符串的方法内容 TODO
//获取到玩家等级
int levelNo = player.getLevelNo() - 1;
//获取到当前玩家等级 下对应的字符串长度
int strlen = LevelInitial.levelsArr[levelNo].getStrlength();
//创建随机数对象
Random random = new Random();
//创建一个StringBuffer 对象,用来不断的存储和改变字符串内容
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 Test {
public static void main(String[] args)
{
//创建玩家,玩游戏
Player p = new Player();
p.play();
}
}