比赛打字稿
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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); } /** * 运行一步