游戏QuickHit

需求:QuickHit游戏考验你键盘输入的速度和准确性。 根据输入速度和正确率将玩家分为不同级别,级别越高,一次显示的字符数就越多,玩家 正确输入一次的得分也越高。如果玩家在规定时间内完成规定次数的输入,正确率达到 规定要求,则玩家升级(为了简单起见,规定用户错误输入一次,游戏结束)。玩家最 高级别为六级,初始级别一律为一级。

分析:需要游戏(Game)类、玩家(Player)类、等级(Level)类、测试(Test)类

优化设计,增加一个等级数组(LevelParam)类

游戏类的属性有:玩家类型的玩家(Player  player)方法有:系统生成一个String类型的字符串(printStr()    String)、判断玩家输入的字符串跟系统生成的字符串是否相同(printResult()     void)

玩家类的属性有:int类型的等级(int    levelNo)、int类型的积分(int  curScore)、

long类型的游戏开始时间(long   startTime)、long类型的每个级别玩游戏的时间(long   elapsedTime)方法有:玩游戏(play())

等级类的属性有:int类型的等级(int    levelNo)、int类型的字符串长度(int strlength)、long类型的限制时间(long timeLimit)、int类型的玩的次数(int strTime)、int类型的所得分数(int getScore)

等级数组类的属性有:等级类型的数组(levels【6】  Level)

注意:如果刚学完面向对象的三个特性:封装、继承、多态的话,这里有两个知识点还没学到,一是时间搓System.currentTimeMillis(),这表示的是当前你的电脑上的时间到1970年1月1日0点0分的毫秒数,二是System.exit(0)这表示的是程序正常退出,如果括号中写的是一个非0数则表示程序异常退出。

代码的实现:

import java.util.*;

class Game

{

    private Player player;

    //创建玩家

    public void setPlayer(Player player){

         this.player = player;

    }

    //生成对应玩家等级的字符串

    public String printStr(){

        //创建一个StringBuffer对象,用来对字符串进行增删改查

         StringBuffer buffer = new StringBuffer();

         //创建随机数对象

         Random random = new Random();

         //循环生成对应玩家等级长度的字符串

         for (int i = 0;i < LevelParam.levels[player.getLevelNo() - 1].getStrlength();i++ )

         {

             //每次循环就产生一个随机数

             int rand = random.nextInt(5);

             //拼接产生随机数所对应的字符串

             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;

             }

             }

         }

         //输出所生成的字符串,让玩家可以对应着输入

         System.out.println(buffer.toString());

         //返回生成的字符串

         return buffer.toString();

    }

    //对比系统生成的字符串和玩家输入的字符串是否一样

    public void printResult(String out,String in){

         //判断结果是否一致

         if (out.equals(in))

         {

             long time = System.currentTimeMillis();

             //结果一致再判断时间是否超时

             if ((time - player.getStartTime())/1000 <= LevelParam.levels[player.getLevelNo() -1].getTimeLimit())

             {

                 player.setCurScore(player.getCurScore() + LevelParam.levels[player.getLevelNo() -1].getGetScore());

                 player.setElapsedTime((time - player.getStartTime())/1000);

                 System.out.println("输入正确,您当前等级为:" + player.getLevelNo() + ",积分为:" + player.getCurScore() + ",用时为:" + player.getElapsedTime() + "秒。");

                 //判断玩家是否通关

                 if (player.getLevelNo() == 6 && player.getCurScore() == LevelParam.levels[player.getLevelNo()-1].getGetScore() * LevelParam.levels[player.getLevelNo()-1].getStrTime() )

                 {

                      System.out.println("恭喜您已全部通关!");

                      System.exit(0);

                 }

             }else{

                 System.out.println("您的输入已超时,游戏结束!");

                 System.exit(2);

             }

         }else{

             System.out.println("您输入有误,游戏结束!");

             System.exit(2);

         }

    }

}

import java.util.*;

class Player

{

    //等级

    private int levelNo;

    //每个等级玩家过关所获得的积分

    private int curScore;

    //游戏开始的时间

    private long startTime;

    //每个级别玩游戏的时间

    private long elapsedTime;

    void setLevelNo(int levelNo){

        this.levelNo = levelNo;

    }

    int getLevelNo(){

        return levelNo;

    }

    void setCurScore(int curScore){

        this.curScore = curScore;

    }

    int getCurScore(){

        return curScore;

    }

    void setElapsedTime(long elapsedTime){

        this.elapsedTime = elapsedTime;

    }

    long getElapsedTime(){

        return elapsedTime;

    }

    void setStartTime(long startTime){

        this.startTime = startTime;

    }

    long getStartTime(){

        return startTime;

    }

    void play(){

        Game game = new Game();

        game.setPlayer(this);

        Scanner scanner = new Scanner(System.in);

        //外层循环代表着等级

        for (int i = 0;i < LevelParam.levels.length ;i++ )

        {

            //玩家晋级

            levelNo += 1;

            //获得新的游戏开始时间

            startTime = System.currentTimeMillis();

            //每次晋级玩家积分清零

            curScore = 0;

            //内层循环代表着每个级别所需要玩的次数

            for (int j = 0;j < LevelParam.levels[i].getStrTime() ;j++ )

            {

                //系统生成的字符串

                 String out = game.printStr();

                 //玩家输入的字符串

                 String in = scanner.next();

                 //比较,产生结果

                 game.printResult(out,in);

            }

        }

    }

}

class Level

{

    //级别

    private int levelNo;

    //字符串长度

    private int strlength;

    //限制的时间

    private long timeLimit;

    //级别所要玩的次数

    private int strTime;

    //级别过一关所得分数

    private int getScore;

    //每个级别,应该是一来是就规定好这些 游戏初始的内容,所以不提供setter

    public Level(int levelNo,int strlength,long timeLimit,int strTime,int getScore){

          this.levelNo = levelNo;

          this.strlength = strlength;

          this.timeLimit = timeLimit;

          this.strTime = strTime;

          this.getScore = getScore;

    }

    public int getLevelNo(){

          return levelNo;

    }

    public int getStrlength(){

          return strlength;

    }

    public long getTimeLimit(){

          return timeLimit;

    }

    public int getStrTime(){

          return strTime;

    }

    public int getGetScore(){

          return getScore;

    }

}

public class LevelParam

{

    //定义一个数组长度为6,类型为Level,名字为levels的数组

    //把所有等级放入到数组

    public static Level[] levels = new Level[6];

    //静态初始化块

    //在加载类的时候执行静态初始化块,并且只会被执行一次

    static {

         levels[0] = new Level(1,1,30,10,1);

         levels[1] = new Level(2,2,28,7,2);

         levels[2] = new Level(3,3,25,6,3);

         levels[3] = new Level(4,4,21,4,5);

         levels[4] = new Level(5,5,20,3,8);

         levels[5] = new Level(6,6,15,3,10);

    }

}

class Test

{

    public static void main(String[] args)

    {

        Player player = new Player();

        player.play();

    }

}







  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值