1. 程式人生 > 其它 >java面向物件程式設計--猜拳小遊戲

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 ;
    }
}