1.需要使用的类
玩家类(Player)
游戏类(Game)
级别属性类(Level)
级别属性数组实际值(LevelParam)
测试类(Test)
2,具体方法及实现
1初始化各个等级的具体参数
public class LevelParam {
public final static Level [] levels=new Level[6];
static{
levels[0]=new Level(1,2,10,100,1);
levels[1]=new Level(2,3,9,96,2);
levels[2]=new Level(3,4,8,82,5);
levels[3]=new Level(4,5,7,71,8);
levels[4]=new Level(5,6,6,60,10);
levels[5]=new Level(6,7,5,59,15);
}
}
2实现输出随机字符串
//系统随机获得字符串
public String printStr()
{
//根据当前选手的级别获取该级别的输出字符串的长度
int strLength=LevelParam.levels[player.getLevelNo()-1].getStrLength();
StringBuffer sb=new StringBuffer();
Random random=new Random();
for (int i=0;i<strLength;i++){
//获得随机数0-strLength
int ran=random.nextInt(strLength);
//根据随机数来选择输出的字符
switch(ran){
case 0:
sb.append("l");
break;
case 1:
sb.append("c");
break;
case 2:
sb.append("x");
break;
case 3:
sb.append("l");
break;
case 4:
sb.append("x");
break;
case 5:
sb.append("h");
break;
}
}
//返回随机获得的字符
return sb.toString();
}
//系统随机获得字符串
public String printStr()
{
//根据当前选手的级别获取该级别的输出字符串的长度
int strLength=LevelParam.levels[player.getLevelNo()-1].getStrLength();
StringBuffer sb=new StringBuffer();
Random random=new Random();
for (int i=0;i<strLength;i++){
//获得随机数0-strLength
int ran=random.nextInt(strLength);
//根据随机数来选择输出的字符
switch(ran){
case 0:
sb.append("l");
break;
case 1:
sb.append("c");
break;
case 2:
sb.append("x");
break;
case 3:
sb.append("l");
break;
case 4:
sb.append("x");
break;
case 5:
sb.append("h");
break;
}
}
//返回随机获得的字符
return sb.toString();
}
3判断选手输入的字符串和系统生成的字符串 public void printResult(String playerStr,String levelStr){
//如果不相等输出,直接退出程序
if (!playerStr.equals(levelStr)){
System.out.println("输入错误,游戏结束!");
System.exit(1);
//如果相等执行下列操作
}else{
//获取系统当前时间
long curTime=System.currentTimeMillis();
//将所用时间和LevelParam所存储的指定所用时间进行判断,如果大于指定时间输出,退出程序
if ((curTime-player.getStartTimes())/1000>LevelParam.levels[player.getLevelNo()-1].getTimeLimit()){
System.out.println("输入太慢,结束游戏!");
System.exit(1);
}
//将分数赋值给player - 分数(玩家原有的分数加上系统的固定得分)
player.setCurScore(player.getCurScore()+LevelParam.levels[player.getLevelNo()-1].getPerScore());
//将所用的时间赋值给player- 时间(当前时间减去开始时间)
player.setElapsedTime((int)((curTime-player.getStartTimes())/1000));
//输出选手的游戏属性
System.out.println("输入正确,你的级别"+player.getLevelNo()+",你的积分"+player.getCurScore()+",已用时间"+player.getElapsedTime()+"");
//如果选手等级等于6,游戏成功,程序结束
if (player.getLevelNo()==6)
{
System.out.println("成功");
System.exit(1);
}
}
}
public void printResult(String playerStr,String levelStr){
//如果不相等输出,直接退出程序
if (!playerStr.equals(levelStr)){
System.out.println("输入错误,游戏结束!");
System.exit(1);
//如果相等执行下列操作
}else{
//获取系统当前时间
long curTime=System.currentTimeMillis();
//将所用时间和LevelParam所存储的指定所用时间进行判断,如果大于指定时间输出,退出程序
if ((curTime-player.getStartTimes())/1000>LevelParam.levels[player.getLevelNo()-1].getTimeLimit()){
System.out.println("输入太慢,结束游戏!");
System.exit(1);
}
//将分数赋值给player - 分数(玩家原有的分数加上系统的固定得分)
player.setCurScore(player.getCurScore()+LevelParam.levels[player.getLevelNo()-1].getPerScore());
//将所用的时间赋值给player- 时间(当前时间减去开始时间)
player.setElapsedTime((int)((curTime-player.getStartTimes())/1000));
//输出选手的游戏属性
System.out.println("输入正确,你的级别"+player.getLevelNo()+",你的积分"+player.getCurScore()+",已用时间"+player.getElapsedTime()+"");
//如果选手等级等于6,游戏成功,程序结束
if (player.getLevelNo()==6)
{
System.out.println("成功");
System.exit(1);
}
}
}
4实现选手玩游戏
public void Play(){
//创建一个游戏传入一个选手
Game game=new Game(this);
Scanner input=new Scanner(System.in);
// 外层循环,循环一次级别晋一级
for (int i=0;i<LevelParam.levels.length;i++){
//内层循环结束,等级加1
this.levelNo++;
//开始时间重新选定
this.startTimes=System.currentTimeMillis();
//游戏分数清0
this.curScore=0;
//内层循环的次数是根据等级获取的游戏次数
for (int j=0;j<LevelParam.levels[levelNo-1].getStrTimes();j++){
//获取系统生成的字符串
String levelStr=game.printStr();
System.out.println(levelStr);
//获取选手输入的字符串
String playerStr=input.next();
//将选手输入的字符串和系统输入的字符串进行比较
game.printResult(playerStr,levelStr);
}
}
}
5测试
public class Test {
public static void main(String[] args) {
System.out.println("开始游戏吗?开始(1)结束(2)");
Scanner scanner = new Scanner(System.in);
String string = scanner.next();
if (string.equals("1")) {
Player player = new Player();
player.play();
}else if(string .equals("2")){
System.out.println("游戏结束");
return;
}
}
}
5游戏效果
输入错误效果
输入时间超时