QuickHit游戏开发项目总结

    xiaoxiao2021-12-14  16

    在此之前已经学过了面向对象的三大特性,即封装,继承,多态,学习了接口的应用,下面是完成的一个游戏项目,这个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()    } }
    转载请注明原文地址: https://ju.6miu.com/read-968673.html

    最新回复(0)