java面向物件程式設計--猜拳小遊戲
阿新 • • 發佈:2021-10-26
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 ; } }