java面向对象编程--猜拳小游戏
java面向对象编程实现--猜拳小游戏
目标
目标:玩家在控制台和电脑猜拳,电脑每次都会随机出石头/剪刀/布,
直到玩家选择退出游戏。记录并显示玩家和电脑猜拳的成绩。
设计思路分析
电脑的随机猜拳可以使用 随机数生成,这里规定 0表示 石头,1 表示剪刀,
2 表示布。 为了显示清晰,可以设置一个方法将生成的随机数 转换为 对应
石头/剪刀/布。
玩家在控制台输入(石头/剪刀/布),但玩家也可能输入别的数,所以这里
需要做一个玩家的输入校验 ,并考虑给玩家退出游戏的选择。
记录的结果有 玩家猜拳选择,电脑猜拳选择 和胜负。为了方便管理和显示,
这里设计一个结果类。用于记录猜拳的结果,因为猜拳次数可能不止一次,所以
考虑将 结果保存到 集合中,这里使用 ArrayList集合。
具体代码实现如下:
import java.util.ArrayList;
import java.util.Scanner;
public class FingerGuessingGame {//测试实现类
public static void main(String[] args) {
Tom tom = new Tom();
tom.guess();
}
}
//玩家类
class Tom {
Scanner sc = new Scanner(System.in);
//猜拳
public void guess() {
System.out.println("----------猜拳游戏开始(-1退出)---------");
//使用ArrayList保存结果
ArrayList<GuessResult> results = new ArrayList<>();
while (true) {
//玩家输入
String tomGuess = checkInput();
//如果输入-1退出游戏
if (tomGuess.equals("-1"))
break;
//生成0-2的随机数
int num = (int) (Math.random() * 3);
//将获取到的数字按照之前的规定转换为字符串
String comGuess = convertComputerGuess(num);
System.out.println("电脑出 " + comGuess);
//判断输赢
String isWin = winORLoose(tomGuess, comGuess);
System.out.println(isWin);
//将结果添加到集合中
results.add(new GuessResult(tomGuess, comGuess, isWin));
}
//输出结果
System.out.println("-------本次猜拳的结果------");
System.out.println("玩家\t\t\t电脑\t\t\t胜负");
for (GuessResult result : results) {
System.out.println(result);
}
}
//获取电脑猜拳结果
public String convertComputerGuess(int num) {
//0代表石头,1剪刀,2布
if (num == 0)
return "石头";
if (num == 1)
return "剪刀";
if (num == 2)
return "布";
return "";
}
//玩家输入校验
public String checkInput() {
while (true) {
System.out.println("你出(石头/剪刀/布)-1退出:");
String choice = sc.next();
if (choice.equals("石头") || choice.equals("剪刀") ||
choice.equals("布") || choice.equals("-1")) {
return choice;
} else
System.out.println("你的输入有误! 请检查并重新输入:");
}
}
//判断输赢
public String winORLoose(String tomGuess, String comGuess) {
if (tomGuess.equals("石头") && comGuess.equals("剪刀"))
return "赢";
else if (tomGuess.equals("剪刀") && comGuess.equals("布"))
return "赢";
else if (tomGuess.equals("布") && comGuess.equals("石头"))
return "赢";
else if (tomGuess.equals(comGuess))
return "平手";
else
return "输";
}
}
//结果类 用于记录猜拳的结果
class GuessResult {
private String tomGuess;
private String ComGuess;
private String isWin;
public GuessResult(String tomGuess, String comGuess, String isWin) {
this.tomGuess = tomGuess;
ComGuess = comGuess;
this.isWin = isWin;
}
@Override
public String toString() {
return
tomGuess +"\t\t\t"+
ComGuess + "\t\t\t" +
isWin ;
}
}
浙公网安备 33010602011771号