温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,汇文网负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。
网站客服:3074922707
比赛
打字
创建工程和包,然后编写下面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<lv ;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);
}
/**
* 运行一步
* @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(result);
return true;
}
}
/**
* 程序入口
* @param args
*/
public static void main(String[] args) {
System.out.println("游戏:《劲舞团》");
System.out.println("游戏说明:每关限时30秒,有3次出错机会,↑:w,→:d↓s:,←:a \n");
System.out.println("\n---- 第 [ 1 ] 关 ----\n");
QuickHit qh = new QuickHit();
qh.run();
}
}