zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    JID 2.0 RC4 发布,高性能的 Java 序列化库
    FBReaderJ 1.6.3 发布,Android 电子书阅读器
    Arquillian 1.0.3.Final 发布,单元测试框架
    JavaScript 的宏扩展 Sweet.js
    Hypertable 0.9.6.5 发布,分布式数据库
    JRuby 1.7.0 发布,默认使用 Ruby 1.9 模式
    httppp 1.4.0 发布,HTTP响应时间监控
    Redis 2.6.0 正式版发布,高性能K/V服务器
    OfficeFloor 2.5.0 发布,IoC 框架
    XWiki 4.3 首个里程碑发布
  • 原文地址:https://www.cnblogs.com/WuXuanKun/p/5539755.html
Copyright © 2011-2022 走看看