项目实战: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);

//开始游戏

//外层循环,所有的游戏级别
    //每一次执行一次外层循环,代表玩家 玩通了一个级别,级别+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();
}
}
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值