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
原文地址:https://www.cnblogs.com/WuXuanKun/p/5539755.html