首先编写类,游戏类(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; } }
级别参数类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); } }
玩家类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; } }
游戏类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; } }
测试: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);*/ } }
链接:
xiangmu.rar | 24KB | 5/29/2016 4:53:53 PM |