1. 程式人生 > >續4月26程式邏輯-3(分支和迴圈)

續4月26程式邏輯-3(分支和迴圈)

練習1:猜數字
計算機出一個1-100之間的隨機數,玩家輸入猜測的數字,計算機會給出相應的提示:如果玩家猜測的數字大於計算機出的數字,則提示"小一點";如果玩家猜測的數字小於計算機出的數字,則提示"大一點";如果猜對了就給出恭喜資訊和猜的次數,遊戲結束。

package com.lovoinfo;

import java.util.Scanner;

/**
 * 猜數字
 * @author jackfrued
 *
 */
public class Test04 {

    public static void main(String[] args) {
        Scanner sc = new
Scanner(System.in); int correctAnswer = (int) (Math.random() * 100 + 1); int counter = 0; int thyAnswer; do { System.out.print("請輸入你猜的數字: "); thyAnswer = sc.nextInt(); counter += 1; if (thyAnswer == correctAnswer) { System.out.println("恭喜你猜對了!總共猜了"
+ counter + "次"); if(counter > 7) { System.out.println("智商拙計!!!"); } } else if (thyAnswer > correctAnswer) { System.out.println("小一點!"); } else { System.out.println("大一點"); } } while
(thyAnswer != correctAnswer); sc.close(); } }

練習2:人機猜拳

package com.lovoinfo;

import java.util.Scanner;

/**
 * 人機猜拳
 * @author jackfrued
 *
 */
public class Test05 {
    /**
     * 將出拳對應的數字變成中文
     * @param fist 出拳的數字
     * @return 出拳字對應的中文
     */
    public static String getFist(int fist) {
        String str;
        if(fist == 1) {
            str = "剪刀";
        }
        else if(fist == 2) {
            str = "石頭";
        }
        else {
            str = "布";
        }
        return str;
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        int money = 1000;
        do {
            int debt;
            do {
                System.out.println("你總共有" + money + "元");
                System.out.print("請下注: ");
                debt = sc.nextInt();
            } while(debt <= 0 || debt > money);

            int computerFist = (int) (Math.random() * 3 + 1);
            int thyFist;
            do {
                System.out.print("請出拳(1. 剪刀; 2. 石頭; 3. 布): ");
                thyFist = sc.nextInt();
            } while (thyFist < 1 || thyFist > 3);

            System.out.println("計算機出的是" + getFist(computerFist));
            System.out.println("你出的是" + getFist(thyFist));

            if(computerFist == thyFist) {
                System.out.println("平局!");
            }
            else {
                if(computerFist == 1) {
                    if(thyFist == 2) {
                        money += debt;
                        System.out.println("你贏了!");
                    }
                    else {
                        money -= debt;
                        System.out.println("計算機贏了!");
                    }
                }
                else if(computerFist == 2) {
                    if(thyFist == 1) {
                        money -= debt;
                        System.out.println("計算機贏了!");
                    }
                    else {
                        money += debt;
                        System.out.println("你贏了!");
                    }
                }
                else {
                    if(thyFist == 1) {
                        money += debt;
                        System.out.println("你贏了!");
                    }
                    else {
                        money -= debt;
                        System.out.println("計算機贏了!");
                    }
                }
            }
        } while(money > 0);
        System.out.println("你破產了!遊戲結束!");
        sc.close();
    }
}

練習3:Craps賭博遊戲。
玩家搖兩顆色子,如果第一次搖出了7點和11點,則玩家勝;如果第一次搖出了2點、3點、12點,則莊家勝;如果搖出其他點數,遊戲繼續,在繼續的過程中,如果玩家搖出了第一次搖的點數,則玩家勝;如果搖出了7點,則莊家勝;否則遊戲繼續,直到分出勝負。

package com.lovoinfo;

import java.util.Scanner;

/**
 * Craps賭博遊戲
 * @author jackfrued
 *
 */
public class Test03 {

    /**
     * 搖兩顆色子
     * @return 兩個色子搖出的點數之和
     */
    public static int rollDice() {
        int face1 = (int) (Math.random() * 6 + 1);
        int face2 = (int) (Math.random() * 6 + 1);
        return face1 + face2;
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int money = 1000;
        do {
            int debt = 0;   // 下注的金額
            do {
                System.out.println("你的餘額" + money + "元");
                System.out.print("請下注: ");
                if(sc.hasNextInt()) {   // 判斷能否讀到一個整數
                    debt = sc.nextInt();
                }
                else {
                    System.out.println("輸入錯誤!");
                    sc.nextLine();  // 把錯誤的輸入讀走
                }
            } while (debt <= 0 || debt > money);
            int firstPoint = rollDice();
            System.out.println("玩家搖出了" + firstPoint + "點");
            boolean gameOver = true;    // 表示遊戲是否應該結束的布林值
            switch(firstPoint) {
            case 7:
            case 11:
                money += debt;
                System.out.println("玩家勝!");
                break;
            case 2:
            case 3:
            case 12:
                money -= debt;
                System.out.println("莊家勝!");
                break;
            default:
                gameOver = false;   // 如果第一次沒有分出勝負遊戲就沒有結束
            }
            while(!gameOver) {  // 只要遊戲沒有結束就要繼續搖色子
                int currentPoint = rollDice();
                System.out.println("玩家搖出了" + currentPoint + "點");
                if(currentPoint == 7) {
                    money -= debt;
                    System.out.println("莊家勝!");
                    gameOver = true;
                }
                else if(currentPoint == firstPoint) {
                    money += debt;
                    System.out.println("玩家勝!");
                    gameOver = true;
                }
            }
        } while(money > 0);
        System.out.println("恭喜你, 破產了!");
        sc.close();
    }
}