• QuickHit游戏


    首先编写类,游戏类(Game),玩家类(Player),级别类(Level)

    玩家(Player)类的属性:玩家的当前级别号(levelNo).玩家当前级别积分(currScore).当前级别开始时间(staetTime)和当前级别已用时间(elapsedTime)。

    级别类(Level)的属性:levelNo各级别编号,strLengh个级别一次输出的字符串长度,strTime各级别输出字符串的次数,timeLimit各级闯关的时间限制 perScore各级别输入一次正确的得分!

    游戏类:player玩家属性   因为级别类不包括各个级别的具体参数信息,所以增加一个levelParam类,创建一个长度为6的数组,存放各个级别的参数信息

    游戏类的方法有两个:String printStr(),输出字符串,返回字符串用于和玩家的输入进行比较;void printResult(String out,String in),比较游戏输出out和玩家输入in,根据比较结果输出相应信息.

    -----------------------------------------------------------

    --首先game类(先有游戏才能玩):
    方法有二:printStr()
    printResult()
    1:printStr()方法:生成随机的字符串,使用switch选择结构以生成的随机数进行判断生成的字符串。字符串的长度不得大于各级别输出字符串的长度。
    int strLength=LevelParam.levels[player.getLevelNo()-1].getStrLength();由于数组下标是从0开始的,获取该级别输入
    的字符串的长度定位到数组中的一项要使用(级别号-1 )定位数组下标。创建一个0到5的随机数,创建StringBuffer对象来拼接字符串。该方法返回
    一个拼接好了的字符串。
    2:long time=System.currentTimeMillis();获取系统当前时间的毫秒数(严谨到毫秒)
    (time-player.getStartTime())/1000>LevelParam.levels[player.getLevelNo()-1].getTimeLimit()如果游戏所用时间大于
    游戏规定的时间,判断出局!
    player.setCurScore(player.getCurScore()+LevelParam.levels[player.getLevelNo()-1].getPerScore());加上当前获得的分数
            player.setElapsedTime((int)(time-player.getStartTime())/1000);计算玩游戏所需的时间
    输出当前这一关的信息,当进行到第六个级别(最高级别)时,将级别清空,还原为1.
    --Player类:创建游戏类(game对象),记录循环的次数,将级别初始为1.
    game.getPlayer().setStartTime(System.currentTimeMillis())记录下游戏开始时间!
    循环条件,小于输入次数,接收随机生成的字符串,如果用户输入的字符串与该字符串相等,继续游戏,否则,gameOver!
    --Text类:直接调用player类的print()方法!

    代码实现区:

    级别类Level

    package cn.xiangmu;
    
    public class Level {
    private int levelNo;//级别号
    private int strLength;//各级别一次输出字符串的长度
    private int strTime;//个级别输出字符串的次数
    private int timeLimit;//个级别闯关的时间限制
    private int perScore;//个级别成功输入一次字符串后增加的分值
    //然后在类中定义一个带参构造说
    public Level(int levelNo, int strLength, int strTime, int timeLimit,
            int perScore) {
        super();
        this.levelNo = levelNo;
        this.strLength = strLength;
        this.strTime = strTime;
        this.timeLimit = timeLimit;
        this.perScore = perScore;
    }
    public Level() {
    }
    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 getStrTime() {
        return strTime;
    }
    public void setStrTime(int strTime) {
        this.strTime = strTime;
    }
    public int getTimeLimit() {
        return timeLimit;
    }
    public void setTimeLimit(int timeLimit) {
        this.timeLimit = timeLimit;
    }
    public int getPerScore() {
        return perScore;
    }
    public void setPerScore(int perScore) {
        this.perScore = perScore;
    }
    }
    Level

    级别参数类LevelParam:

    package cn.xiangmu;
    /**
     * 级别参数类,配置各个级别参数
     * @author Administrator
     *
     */
    public class LevelParam {
        //该类中有一个长度为6的等级数组,并且通过静态代码块的方式给数组的每项赋值,
        public final static Level levels[] =new Level[6];
        //对应六个级别
        static{
            levels[0]=new Level(1,2,10,30,1);
            levels[1]=new Level(2,3,9,26,2);
            levels[2]=new Level(3,4,8,22,3);
            levels[3]=new Level(4,5,7,18,4);
            levels[4]=new Level(5,6,6,15,5);
            levels[5]=new Level(6,7,5,12,6);
            
        }    
    }
    LevelParam

    玩家类Player:

    package cn.xiangmu;
    
    import java.util.Scanner;
    
    public class Player {
        private int levelNo;//玩家当前级别
        private int curScore;//玩家当前积分
        private long startTime=0;//个级别开始时间
        private int  elapsedTime;//各级别已用时间
        //方法一
        public void play(){//玩家玩游戏的方法
            Game game=new Game(this);
            Scanner input =new Scanner(System.in);
            //外层循环,循环一次级别进一级
            for(int i=0;i<LevelParam.levels.length;i++){
                //0.1进级
                this.levelNo+=1;
                //0.2晋级后及时清零,积分清零
                this.startTime=System.currentTimeMillis();
                this.curScore=0;
                //0.3内层循环,循环一次完成一次字符串的输出,输入,比较
                for(int j=0;j<LevelParam.levels[levelNo-1].getStrTime();j++){
                    //1.游戏输出字符串
                    String outStr=game.printStr();
                    //2.接收用户输入
                    String inStr=input.next();
                    //3.游戏判断玩家输入是否正确,并输出相应结果信息
                    game.printResult(outStr,inStr);
                }
                
            }
        }
        /*//方法三
           public void play(){
            Scanner input = new Scanner(System.in);
            Game game= new Game(this);//创建游戏实例
            int setlevelNo =1;//记录循环的次数
            game.getPlayer().setLevelNo(1);
            while(true){
                game.getPlayer().setStartTime(System.currentTimeMillis());//游戏开始,给Player的开始时间赋值
                //内层循环
                for(int i=0;i<LevelParam.levels[game.getPlayer().getLevelNo()-1].getStrTime();i++){
                    String out=game.printStr();//接收游戏输出的字符串
                    String in=input.next();//接受玩家输入的字符串
                    game.printResult(out,in);//判断
                }
    
            }
        }*/
        
        /*//方法二
         public void play(){
            Scanner input = new Scanner(System.in);
            Game game= new Game(this);//创建游戏实例
            game.getPlayer().setLevelNo(1);
            for(int i=0;i<LevelParam.levels.length;i++){
                setLevelNo(getLevelNo()+1);
                this.curScore=0;
                System.out.println("恭喜你进入级:");
                game.getPlayer().setStartTime(System.currentTimeMillis());//游戏开始,给Player的开始时间赋值
                //内层循环
                for(int j=0;j<LevelParam.levels[game.getPlayer().getLevelNo()-1].getStrTime();j++){
                    String out=game.printStr();//接收游戏输出的字符串
                    String in=input.next();//接受玩家输入的字符串
                    game.printResult(out,in);//判断
                }
                
            }
            
        }*/
        public Player() {
        }
        public Player(int levelNo, int curScore, long startTime, int elapsedTime) {
            super();
            this.levelNo = levelNo;
            this.curScore = curScore;
            this.startTime = startTime;
            this.elapsedTime = elapsedTime;
        }
        public int getLevelNo() {
            return levelNo;
        }
        public void setLevelNo(int levelNo) {
            this.levelNo = levelNo;
        }
        public int getCurScore() {
            return curScore;
        }
        public void setCurScore(int curScore) {
            this.curScore = curScore;
        }
        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;
        }
    }
    Player

    游戏类Game:

    package cn.xiangmu;
    
    import java.util.Random;
    
    public class Game {
        private Player player;// 玩家//声明一个Player类型的对象
    
        /**
         * 构造方法,传入玩家信息
         * 
         * @param player
         *            玩家
         */
        public Game(Player player) {
    
            this.player = player;
        }
    
        /**
         * 输出指定级别规定长度的字符串
         * 
         * @return 输出的字符串,用于和用户输入比较
         */
    
        public String printStr() {
            // 生成的字符串长度随级别的不同而不同
            int strLength = LevelParam.levels[player.getLevelNo() - 1].getStrLength();//输入字符串的长度
            StringBuffer buffer = new StringBuffer();
            Random random = new Random();
            for (int i = 0; i < strLength; i++) {
                // 产生随机数
                int rand = random.nextInt(strLength);
                // 根据随机数拼接字符串
                switch (rand) {
                case 0:
                    buffer.append("h");
                    break;
                case 1:
                    buffer.append("j");
                    break;
                case 2:
                    buffer.append("k");
                    break;
                case 3:
                    buffer.append("l");
                    break;
                case 4:
                    buffer.append(";");
                    break;
                case 5:
                    buffer.append("'");
                    break;
                }
            }
            System.out.println(buffer.toString());//得到输入的字符串
    
            return buffer.toString();//返回当前字符串
        }
    
        /**
         * 判断玩家输入是否正确,并输出相应结果信息
         * 
         * @param out
         *            游戏输出的字符串
         * @param in玩家输入的字符串
         */
        public void printResult(String out, String in) {
          
            if(out.equals(in)){
                long currentTime=System.currentTimeMillis();//系统的当前的时间
                //如果超时
                if((currentTime-player.getStartTime())/1000>LevelParam.levels[player.getLevelNo()-1].getTimeLimit()){//如果当前时间减开始时间大于规定的时间
                    System.out.println("你输入太慢了,已经超时了,退出!");
                    System.exit(1);//退出
                }else{
                    //计算玩家当前积分
                    player.setCurScore(player.getCurScore()+LevelParam.levels[player.getLevelNo()-1].getPerScore());//加上当前获得的分数
                    player.setElapsedTime((int)(currentTime-player.getStartTime())/1000);//计算游戏所需时间
                    int level=player.getLevelNo();
                    int score=player.getCurScore();
                    int usetime=player.getElapsedTime();
                    System.out.printf("输入正确,您的级别%s,您的积分%s,已用时间%s秒。",level,score,usetime);
                    System.out.println();
                    if(level==6){
                        player.setLevelNo(1);
                        System.out.println("游戏已结束!");
                    }
                }
            }else{
            
                System.out.println("输入错误,退出!");
                System.exit(1);
            }
        }
    
        public Player getPlayer() {
            return player;
        }
    
        public void setPlayer(Player player) {
            this.player = player;
        }
    }
    Game

    测试:Test:

    package cn.xiangmu;
    
    public class Test {
    
        /**
         * @param args
         */
        public static void main(String[] args) {
            Player player=new Player();
            System.out.println("疯狂打字游戏开始:");
            player.play();
            /*long time =System.currentTimeMillis();
            System.out.println(time);*/
        }
    
    }
    Test

     链接:

    xiangmu.rar 24KB 5/29/2016 4:53:53 PM
  • 相关阅读:
    js保留几位小数
    IE的卸载之路(折腾1个多月,记录下。。)
    百度map
    鼠标滑轮事件监听,兼容各类浏览器
    sql server分页存储过程
    echarts(3.0)的基本使用(标签式导入)
    datagrid加分组后的效果
    python文件操作
    python求100以内素数
    python 三元运算符
  • 原文地址:https://www.cnblogs.com/WuXuanKun/p/5539755.html
Copyright © 2020-2023  润新知