来源:《Head First Java》
package games;
public class SimpleDotCom {//仅限于一维空间;
int[] locationCells;//目标的坐标位置;
int numOfHits = 0;//目标被击中多少次, 击中一次去掉对应击中的位置, 全部击中则胜利;
public void setLocationCells(int[] location) {
locationCells = location;//设置目标的坐标集合;
}
public String checkYourself(String guess) {//检测当前是否被击中;
int g = Integer.parseInt(guess);//将字符串转换为数字;
String result = "miss";//最终结果, 初始化为"miss";
for (int cell : locationCells) {//加强版for循环;
if (cell == g) {
result = "hit";//击中;
++numOfHits;//当前击中的次数;
break;//这一轮已经找到被击中的位置;
}
}
if (numOfHits == locationCells.length) {//所有位置均被击中;
result = "kill";//击沉;
}
System.out.println(result);
return result;
}
}
package games;
import java.io.*;
public class GameHelper {
public String getUserInput(String prompt) {//获取用户输入的字符串;
String inputLine = null;
System.out.print(prompt + " ");
try {
BufferedReader is = new BufferedReader(new InputStreamReader(System.in));
inputLine = is.readLine();
if (inputLine.length() == 0) return null;//读取的字符串为空;
} catch (IOException e) {//有可能抛出输入输出异常, 在此捕获异常;
System.out.println("IOException: " + e);
}
return inputLine;
}
}
package games;
public class SimpleDotComTestDrive {
public static void main(String[] args) {
int numOfGuess = 0;//记录玩家猜测次数的变量;
GameHelper h = new GameHelper();
SimpleDotCom dot = new SimpleDotCom();
int randomNum = (int) (Math.random() * 5);//用随机数产生第一格的位置;//范围0~4;
int[] local = {randomNum, randomNum+1, randomNum+2};//假设目标的位置集合;
dot.setLocationCells(local);
boolean isAlive = true;//创建出记录游戏是否继续进行的boolean变量;
while (isAlive == true) {
String userGuess = h.getUserInput("enter a number");//假设用户命令攻击的位置;
String result = dot.checkYourself(userGuess);//检查是否击中;
numOfGuess++;
if (result.equals("kill")) {
isAlive = false;
System.out.println("You took " + numOfGuess + " guesses");
}
}
}
}
这个代码做出来的简单游戏对上次的进行了改进。
这次是利用随机数确定每次目标的位置集合,用户可以通过键盘赋值来指定攻击的位置,增加了统计用户总共攻击了多少次的变量。
不过,这个程序有问题:用户始终输入同一个位置,而那个位置恰好是目标的一个位置,则不符合要求。