QuickHit游戏开发项目总结

在此之前已经学过了面向对象的三大特性,即封装,继承,多态,学习了接口的应用,下面是完成的一个游戏项目,这个QuickHit游戏考验的是你的键盘输入速度和准确性,根据输入速度和正确率将玩家分为不同的等级,级别越高一次显示的字符串就越多,玩家正确输入一次的得分也就越高,如果玩家在规定的时间内完成规定的次数,正确率达到规定的要求,那么玩家升级,玩家级别最高为六级,初始级别为一级。

根据要求我们可以分析出这个项目所需要的类,玩游戏就一定要有玩家和游戏这两个类,那么我们可以先抽象出这两个类,同时一次显示的字符数,正确输入的得分,规定的时间,次数,都是与玩家的等级有关,那么我们就可以再抽象出一个级别类,

我们分析得出结论,玩家的属性有当前的级别,级别号,级别积分,开始的时间,已用的时间,

                                    级别类的属性有各个级别的级别号,各级别一次输入字符串的长度,各级别输入的次数,闯关的时间,得分

                                     游戏类的方法主要有:输出字符串,确认玩家输入是否正确,和输出的相应信息。

                                      玩家类的方法只有一个,那就是玩游戏

                                     级别类主要是存放信息,没有具体的操作

                                     


QuickHit 项目的执行步骤描述如下:
(1) 游戏根据玩家的级别在控制台输出指定数量字符。
(2) 玩家根据控制台输出输入相同字符,按 Enter 键确认。
(3) 游戏确认玩家输入是否正确。
(4) 如果输入错误,输出玩家输入错误提示,游戏非正常结束。
(5) 如果输入正确但超时,输出玩家速度太慢提示,游戏非正常结束。
(6) 如果输入正确且没有超时,输出玩家的积分、级别和用时信息。然后重复以上步骤,
继续输出、输入和确认。
(7) 玩家在规定时间内连续正确输入规定次数后,将显示玩家升级提示,游戏将重新计
时计分,将以此输出更多字符。六级玩家闯关成功,输出恭喜信息。游戏正常结束。










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.elapse;
      }
      
      //玩家的方法
      public void play(){
     Game game = new Game(this);
    Scanner input = new Scanner(System.in);
    //创建对象
    //这里注意的是开始游戏需要循环。而外层循环是所有的游戏级别,内循环是每个级别对应的次数
    for (int i = 0; i < LevelInitial.levelsArr.length; i++){
        levelNo +=1;
        //每执行一次外层循环,代表玩家通过了一个级别,级别就要+1.晋级
       startTime = System.currentTimeMillis();
       //获取新的开始时间,每个级别单独记分数,
       for (int j = 0; j <LevelInitial.levelsArr[levelNo -1].getStrTime(); j++){
           String out = game.printStr();
           //这里生成字符串
           String in = input.next();
           //玩家输入的字符串
           game.result(out,in);
       }
    }

    class Game
    {
        //游戏类
        private Player player;
        //这里需要一个玩家
        public Game(Play player){
    //提供一个玩家作为 参数的构造方法
            this.player = player;
    //要玩游戏。首先要给游戏一个玩家对象,才能创建这个游戏对象
    }
    public String printStr(){
    int levelNo = player.getLevelNo() -1;
//获取玩家等级
   int strlen = LevelInitial.levelsArr[levelNo].getStrlength();
   //获取到当前的玩家等级下对应的字符串长度
   Random random = new Random();
   //创建一个随机数的对象
   StringBuffer buffer = new StringBuffer();
   //创建一个StringBuffer对象,用来不断地存储和改变字符串的内容
   for (int i = 0; i < strlen; i++){
       //用循环加上判断的方式,生成对应的长度的字符串
   int rand = random.nextInt(strlen);
   //每循环一次就产生一个随机数
swich(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 - play.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;
        }
        if (player.getScore() == sum){
            System.out.println("恭喜你全部通关");
            System.out.println(0);
    }
        }

    }else{
        System.out.println("输入正确,但是时间超时。游戏结束,游戏推出");
        System.out.println("1");
    }
           {
        System.out.println("输入错误,游戏结束。游戏退出");
        System.out.println(1);
           }

 class Level
 {
     //级别类
     private int levelNo;
     private int strlength;
     private int timeLimit;
     private int strTime;
     private int perScore;
      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 Test
{
    //测试类
    public static void main(String[] args){
        //创建玩家玩游戏
        Player p = new Player();
        p.play()
   }
}
  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值