{
//属性
//级别号 当前这个玩家在哪一个级别
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);
//开始游戏
//外层循环,所有的游戏级别 //每一次执行一次外层循环,代表玩家 玩通了一个级别,级别+1
for (int i = 0; i < LevelInitial.levelsArr.length; i++) { 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 * * 一次构造之后,不允许再更改它 * */
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, 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;
//如果你要开启一局游戏,一定要给游戏对象一个玩家对象,才能创建这个游戏对象 //提供一个带玩家作为参数的构造方法
public Game(Player player) { this.player = player;
}
//方法: /* * 1.生成一个对应玩家级别的字符串 * String 方法名(){ * * } * * */
public String printStr(){
//生成字符串的方法内容 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(); } }