比赛打字稿

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

创建工程和包,然后编写下面3个类,运行QuickHit类。

/*

* 游戏数据类

*/

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

int r = random.nextInt(4);

output += direction[r];

}

return output;

}

/**

* 下一关

*/

public void nextLevel() {

level += 1;

System.out.println("\n---- 第[ " + level +" ] 关----\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[] {"太完美了","加油","要小心了"};

int resultLevel = 0; //结果级别,resultString的索引

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 = "[错误]";

missCount += 1;

}

} else {

/* 如果输入为空,或为空字符串,增加一次错误次数*/

ret = "[错误]";

missCount += 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);

}

/**

* 运行一步

相关文档
最新文档