项目实战:QuickHit

    xiaoxiao2021-12-14  23

    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(); } }
    转载请注明原文地址: https://ju.6miu.com/read-968610.html

    最新回复(0)