/*
* 游戏类
*/
package accp;
import java.util.Random;
public class GameData {
String[] direction = new String[]{"↑","→","↓","←"};
//游戏级别(难度)
int level = 1;
//标记每关的输入次数
int dataIndex = 0;
public String nextOutput(int lv){
Random random = new Random();
String output = "";
for(int i = 0;i < lv;i++){
int r = random.nextInt(4);
output += direction[r];
}
return output;
}
/**
* 下一关
*/
public void nextLevel(){
level += 1;
System.out.println("/n----第[" + "]关----/n");
}
/**
* @param lv 游戏关卡;1.2...
* @return
*/
public String nextRow(){
String output = nextOutput(level);
if(dataIndex >= 4){
dataIndex = 0;
return "lever_pass";
}else{
dataIndex += 1;
return output;
}
}
}
/*
* 裁判类
*/
package accp;
public class Judge {
String[] resultString = new String[]{"太好了","加油","要小心了"};
//结果级别,resultString的索引
int resultLevel = 0;
//当前时间
long curTime = System.currentTimeMillis();
//命中次数
int hitCount = 0;
//错误次数
int missCount = 0;
//总共次数
int totalCount = 0;
//每关的时间限制
int MAX_SEC = 10;
//所有关一共允许的失败次数
int MAX_MISS_COUNT = 4;
/**
* 判断输入是否正确,是否超过限制次数,是否超时
* @param curData 游戏要求的输入内容
* @param curInput 玩家实际的输入内容
* @return
*/
public String judge(String curData,String curInput){
String ret = "";
if(null != curInput&&!"".equals(curInput)){
/*如果输入不为空,也不为空字符串*/
curInput = curInput.replaceAll("w","↑");
curInput = curInput.replaceAll("s","↓" );
curInput = curInput.replaceAll("a", "←");
curInput = curInput.replaceAll("d", "→");
if(curData.equals(curInput)){
/*如果输入正确,增加一次命中次数*/
ret = "[正确]";
hitCount += 1;
}else{
/*如果输入错误,增加一次错误次数*/
ret = "[错误]";
hitCount += 1;
}
}else{
/*如果输入为空或为空字符串,增加一次错误次数*/
ret = "[错误]";
hitCount += 1;
}
totalCount += 1;
/*判断是否 超过次数*/
if(missCount > MAX_MISS_COUNT){
//超过限制次数则放回失败信息,游戏停止
System.out.println("/n你失败了!你错了" + missCount + "次(最多" + MAX_MISS_COUNT + "次)");
return "fail";
}
/*计算已用时间,并判断是否超时*/
long secPassed = (System.currentTimeMillis()-curTime)/1000;
if(secPassed > MAX_SEC){
//超时则放回失败信息,游戏停止
System.out.println("/n你失败了!你错了" + secPassed + "秒过去了(最多" + MAX_SEC + "秒)");
return "fail";
}
//返回【正确】或【错误】信息
return ret;
}
/**
* 得到结果
* @return
*/
public String getResult(){
resultLevel = missCount;
resultLevel = (resultLevel > 2)?2:resultLevel;
return "总共:" + totalCount + "/t命中:" + hitCount + "/t[" + resultString[resultLevel] + "]";
}
}
/*
* 游戏运行类
*/
package accp;
import java.util.Scanner;
public class QuickHit{
//游戏数据对象
GameData gdata = new GameData();
//评判对象
Judge judge = new Judge();
//键盘输入对象
Scanner input = new Scanner(System.in);
//当前数据
String curData = "";
//当前输入
String curInput = "";
/**
* 运行游戏
*/
public void run(){
boolean gaming = true;
do{
gaming = step();
}while(gaming);
}
/**
* 运行一步
* @return 游戏是否结束
*/
public boolean step(){
//显示一行字符
curData = gdata.nextRow();
if(curData.equals("lever_pass")){
//过关,打印结果
System.out.println("/n恭喜过关," + judge.getResult());
gdata.nextLevel();
curData = gdata.nextRow();
//过关后重设当前时间
judge.curTime = System.currentTimeMillis();
}
System.out.println(curData);
//获得输入
curInput = input.nextLine();
/*显示该步结果*/
String result = judge.judge(curData,curInput);
if(result.equals("fail")){
return false;
}else{
System.out.println();
return true;
}
}
/**
* 程序入口
* @param args
*/
public static void main(String[] args){
System.out.println("游戏:《劲舞团》");
System.out.println("游戏说明:每关限时30秒,有3次机会,↑:w,→:d,↓:s,←:a");
System.out.println("/n----第[1]关----/n");
QuickHit qh = new QuickHit();
qh.run();
}
}