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();
}
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);
}
}
}
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遊戲效果
輸入錯誤效果
輸入時間超時