Java範例之猜數位小遊戲

2020-07-16 10:05:18
猜數位是一個經典的小遊戲,程式先產生一個亂數,然後使用者輸入數位,程式將輸入的數位與亂數進行對比,給出使用者相應的提示資訊。

本節實現了一個基於 IO 流的猜數位遊戲,遊戲中限制玩家遊戲次數,遊戲試玩為 5 次,超過 5 次後,則提示玩家試玩結束,請付費。具體實現步驟和程式碼如下:

1)建立 count.txt 檔案,儲存遊戲次數,檔案內容如下:

count=0

2)建立 way.txt 檔案,儲存支付狀態(1 為已付費,0 為未付費),檔案內容如下:

way=0

3)為了簡化程式碼,本節將多個實現方法寫在同一個類中。建立 BullCows 類,程式碼如下:
public class BullCows {
    /**
     * 負責呼叫對應的方法,實現整個案例的邏輯關係
     *
     * @param args
     * @throws IOException
     */
    public static void main(String[] args) throws IOException {
        while (true) {
            // 獲取遊戲次數
            int count = getCount();
            // 獲取付費狀態
            boolean flag = getCondition();
            // 如果已付費,提示使用者遊戲次數解封可以繼續遊戲
            if (flag) {
                System.out.println("遊戲已經付費,遊戲次數已解封!");
                game();
            } else {
                // 未付費且遊戲次數超過5次時,提示試玩結束,要付費
                if (count >= 5) {
                    System.out.println("試玩已經結束,請付費!");
                    getMoney();
                } else {
                    // 未付費且遊戲次數未超過5次時,繼續遊戲,遊戲次數加1
                    System.out.println("----" + "試玩第" + (count + 1) + "次" + "----");
                    game();
                    writeCount();
                }
            }
        }
    }

    /**
     * 獲取已經玩過的次數
     *
     * @return temp count.txt檔案中的遊戲次數
     * @throws IOException
     */
    private static int getCount() throws IOException {
        // 建立Properties物件
        Properties prop = new Properties();
        // 使用FileReader物件獲取count檔案中的遊戲次數
        prop.load(new FileReader("count.txt"));
        String property = prop.getProperty("count");
        int temp = Integer.parseInt(property);
        return temp;
    }

    /**
     * 支付方法,支付成功則把支付狀態改為“1”並存到資料庫,之後可以無限次玩遊戲
     *
     * @throws IOException
     */
    private static void getMoney() throws IOException {
        System.out.println("請支付5元!");
        // 獲取鍵盤錄入資料
        Scanner sc = new Scanner(System.in);
        int nextInt = sc.nextInt();
        if (nextInt == 5) {
            // 建立Properties物件
            Properties prop = new Properties();
            prop.setProperty("way", "1");
            // 使用FileWriter類將支付狀態寫入到way檔案
            prop.store(new FileWriter("way.txt"), null);
        }
    }

    /**
     * 將試玩的次數寫入文件並儲存
     *
     * @throws IOException
     */
    private static void writeCount() throws IOException {
        // 建立Properties物件
        Properties prop = new Properties();
        int count = getCount();
        // 寫入檔案
        prop.setProperty("count", (count + 1) + "");
        prop.store(new FileWriter("count.txt"), null);
    }

    /**
     * 用來獲取每次啟動時的付費狀態
     *
     * @return flag 是否付費
     * @throws FileNotFoundException
     * @throws IOException
     */
    private static boolean getCondition() throws FileNotFoundException, IOException {
        boolean flag = false;
        // 建立Properties物件
        Properties prop = new Properties();
        // 讀取way.txt檔案,獲取支付狀態
        prop.load(new FileReader("way.txt"));
        String property = prop.getProperty("way");
        int parseInt = Integer.parseInt(property);
        // way的值等於1時,為已付費
        if (parseInt == 1) {
            flag = true;
        } else {
            flag = false;
        }
        return flag;
    }

    /**
     * 實現遊戲產生數位,獲取玩家所猜數位等, 並對玩家每次輸入,都會有相應的提示
     */
    private static void game() {
        // 產生亂數1~100
        int random = (int) (Math.random() * 100 + 1);
        // 獲取鍵盤錄入資料
        Scanner sc = new Scanner(System.in);
        System.out.println("歡迎來到猜數位小遊戲!");
        // while迴圈進行遊戲
        while (true) {
            System.out.println("請輸入你猜的資料:");
            int guess = sc.nextInt();
            if (guess > random) {
                System.out.println("大了");
            } else if (guess < random) {
                System.out.println("小了");
            } else {
                System.out.println("猜對了哦!");
                break;
            }
        }
    }
}
第一次執行時,結果如下:

----試玩第1次----
歡迎來到猜數位小遊戲!
請輸入你猜的資料:
1
小了
請輸入你猜的資料:
5
小了
請輸入你猜的資料:
8
小了
請輸入你猜的資料:
9
小了
請輸入你猜的資料:
10
猜對了哦!

此時可以看到 count.txt 檔案中 count 的值為 1。當進行 5 次遊戲後,執行結果如下:

試玩已經結束,請付費!
請支付5元!
5
遊戲已經付費,遊戲次數已解封!
歡迎來到猜數位小遊戲!
請輸入你猜的資料:

此時 count.txt 檔案中 count 的值為 5,way.txt 檔案中 way 的值為 1。

範例中用到 Properties 類的幾個方法,方法說明如下: