Java小型综合型练习——打字小游戏

需求分析:
1、随着等级的增加,输入字符数增加,时间不断减少,每一次答对的得分增加。
2、在规定时间内完成当前等级的输入次数,正确率达标后,则升级。六个级别
3、用户错误输入一次,游戏结束。

该练习需要创建四个类(玩家:play 游戏:game 级别:level 工具类:levelutils)

player类
属性:
玩家当前等级(levelNo)
玩家当前积分(currScore)
当前等级开始时间(startTime)
当前等级已用时间(elapsedTime)

方法:
玩游戏(play)
上面四个属性(get和set方法)

代码如下:

public class Player {
    //当前玩家的等级号(默认等级:1)
    private int levelNo=1;
    //玩家当前积分
    private int currScore;
    //当前等级开始时间
    private long startTime;
    //当前等级已用的时间
    private int elapsedTime;

    Game game=new Game(this);
     Scanner input=new Scanner(System.in);
    //玩游戏方法
    public void play() {
        //外层循环:按照等级循环
        for (int i = 0; i <LevelUtils.levels.length ; i++) {
        if (levelNo>1){
            System.out.println("恭喜你成功升级,当前级别:" + levelNo);
        }
        //升级后,清理上一等级的积分
            currScore=0;
        //获取当前系统时间
            startTime=System.currentTimeMillis();
        //内部循环:该级别输出字符串的次数
            for (int j = 0; j <LevelUtils.levels[levelNo-1].getInputTimes() ; j++) {
                //程序产生的随机字符串
               String out=game.printStr();
                //控制台输入字符串
                String in=input.next();
                //传入game的到结果
                game.printResult(in,out);
            }
            //增加等级
            levelNo++;
        }
    }

    //玩家属性get和set方法
    public int getLevelNo() {
        return levelNo;
    }

    public void setLevelNo(int levelNo) {
        this.levelNo = levelNo;
    }

    public int getCurrScore() {
        return currScore;
    }

    public void setCurrScore(int currScore) {
        this.currScore = currScore;
    }

    public long getStartTime() {
        return startTime;
    }

    public void setStartTime(long startTime) {
        this.startTime = startTime;
    }

    public int getElapsedTime() {
        return elapsedTime;
    }

    public void setElapsedTime(int elapsedTime) {
        this.elapsedTime = elapsedTime;
    }

}

game类
属性:
当前玩家:play
方法:
随机产生字符(printStr)
1.获取当前玩家等级
2.随机字符串
3.创建Stringbuffer
4.创建Random
5.随机产生与当前等级一样的字符串

代码如下:

public class Game {
    //设置游戏玩家
  private  Player player;

    public Game(Player player) {
        this.player = player;
    }

    //产生随机字符串
    public String printStr(){
        //获取当前玩家等级(默认等级为1)数组下标从0开始
        Level level01=LevelUtils.levels[player.getLevelNo()-1] ;
        //字符串
        String str="abcdefghijklmnopqrstuvwxyz1234567890~!";
        //创建Stringbuffer
        StringBuffer sb= new StringBuffer();
        //产生当前等级的字符串
        Random random=new Random();
        for (int i = 0; i <level01.getStrLength() ; i++) {
            //随机产生
            char ch= str.charAt(random.nextInt(str.length()));
            sb.append(ch);
        }
        System.out.println(sb);
        return sb.toString();
    }
    //匹配字符串
    public  void  printResult(String in , String out){
        //获取当前等级(等级从0开始)
        Level nowLevel=LevelUtils.levels[player.getLevelNo()-1];
        //判断程序输出的字符串与控制台输入的字符串是否匹配
        if (in.equals(out)){
            //输入和输出匹配
            //判断是否超时
            long endTime=System.currentTimeMillis();
            //获取当前等级限制时间
            int timeLimit=nowLevel.getPerTimeLimit();
            //转换单位为:秒
            player.setElapsedTime((int)(endTime-player.getStartTime())/1000);
            if (player.getElapsedTime()<=timeLimit){
                //没有超时
                //获取当前等级答对一次所获得的积分
                int perScore=nowLevel.getPerScore();
                //增加积分(获取当前积分,加上每一次答对的积分)
                player.setCurrScore(player.getCurrScore()+perScore);
                System.out.println("输入正确,当前级别:" + player.getLevelNo() + ",您的积分:" + player.getCurrScore() + ",已经用时:" + player.getElapsedTime());
                //是否通过当前关卡
                //当前等级答对的总积分(总分=当前等级答对一次的积分*当前等级答对多少次才能通过的次数)
                int sumScore=nowLevel.getPerScore()*nowLevel.getInputTimes();
                //等级大于等于level的长度并且当前的分数大于当前等级的总分
                if (player.getLevelNo()>=LevelUtils.levels.length&&player.getCurrScore()>=sumScore){
                    //通关
                    System.out.println("恭喜你,已经成为绝世高手,成功通关!");
                    //正常退出程序
                    System.exit(0);
                }
            }else {
                //超时
                System.out.println("您输入太慢了,已经超时,程序退出!");
                //退出程序(非正常退出,状态为:1)
                System.exit(1);
            }
        }else {
            //输入错误
            System.out.println("输入错误,游戏退出!");
            //退出程序(非正常退出,状态为:1)
            System.exit(1);
        }
    }

    //玩家属性的get和set方法

    public Player getPlayer() {
        return player;
    }

    public void setPlayer(Player player) {
        this.player = player;
    }
}

玩家输入的字符串,与电脑随机产生的字符串进行匹配(printResult)
玩家属性的get和set方法

level类
属性:
级别号(levelNo)
不同等级的字符串长度(strLength)
不同等级输入字符串的次数(inputTimes)
不同级别的时间限制( perTimeLimit)
不同等级答对一次得分(perScore)

方法:
带参数的构造方法(用于LevelUtils)
以上属性get和set方法
代码如下:

public class Level {
    //等级号
    private int levelNo;
    //每个等级的字符串长度
    private int strLength;
    //每个等级输入字符串的次数
    private  int inputTimes;
    //每个等级的限制时间
    private  int  perTimeLimit;
    //当前等级答对一次得分
    private  int perScore;

    //带参数的构造方法
    public Level(int levelNo, int strLength, int inputTimes, int perTimeLimit, int perScore) {
        this.levelNo = levelNo;
        this.strLength = strLength;
        this.inputTimes = inputTimes;
        this.perTimeLimit = perTimeLimit;
        this.perScore = perScore;
    }

    //game属性的get和set方法
    public int getLevelNo() {
        return levelNo;
    }

    public void setLevelNo(int levelNo) {
        this.levelNo = levelNo;
    }

    public int getStrLength() {
        return strLength;
    }

    public void setStrLength(int strLength) {
        this.strLength = strLength;
    }

    public int getInputTimes() {
        return inputTimes;
    }

    public void setInputTimes(int inputTimes) {
        this.inputTimes = inputTimes;
    }

    public int getPerTimeLimit() {
        return perTimeLimit;
    }

    public void setPerTimeLimit(int perTimeLimit) {
        this.perTimeLimit = perTimeLimit;
    }

    public int getPerScore() {
        return perScore;
    }

    public void setPerScore(int perScore) {
        this.perScore = perScore;
    }
}

levelutils类

主要功能是存放,不同等级的等级号、该等级字符串的长度、该等级回答题的次数、该等级的限制时间、答对一次所获取的分数。
代码如下:

public class LevelUtils {
    //设置等级列表
    public static final  Level[] levels={
            //从左到右的参数,依次是等级号、该等级字符串的长度、该等级回答题的次数、该等级的限制时间、答对一次所获取的分数
            new Level(1,3,6,40,2),
            new Level(2,4,6,35,3),
            new Level(3,5,7,30,4),
            new Level(4,6,7,25,5),
            new Level(5,7,8,25,6),
            new Level(6,8,8,20,7)
    };
}
  • 1
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值