在java中与yahtzee的麻烦

时间:2014-11-18 23:09:16

标签: java methods return

我必须创造yahtzee游戏及其方法,如满屋,小直,大直,3种,4种,和机会。现在这是我到目前为止所做的事情,我想知道我的方法是否正确,而且我也很难弄清楚如何检查它的yahtzee,3种,4种,等等,这是我的主要方法。该程序由七个卷组成,每个卷最多可以有两个子卷

 static final int NUM_RERROLS_ = 2;
    static final int NUM_OF_DICE = 5;

    static final int NUM_ROLLS_ = 7;
    static final int[] dice = new int[NUM_OF_DICE];

    public static void main(String[] args) {

        Scanner keyboard = new Scanner(System.in);
        rollDice();
        for (int i = 0; i < NUM_RERROLS_; i++) {

            if (gotYatzee()) {

                break;
            }

            System.out.println(diceToString());
            askUser();

            System.out.println("Which dice do you want to reroll: ");
            secondReroll(convert(keyboard.nextLine()));

        }
        System.out.println(diceToString());
        if (gotYatzee()) {
            System.out.println("You got Yatzee & 50 points!");

        } else if (largeStraight() == true) {
            System.out.println("You got large straight");
        } else {
            System.out.println("Sorry no large straight");
        }

        if (smallStraight() == true) {
            System.out.println("You got smallStraight");
        } else {
            System.out.println("Sorry no small straight");
        }
        if (fullHouse() == true) {
            System.out.println("You got full house");
        } else {
            System.out.println("Sorry no full house");
        }

        {
            System.out.println("SORRY NO YAHTZEE");

        }
        if (askUser() == false) {
            if (largeStraight() == true) {
                System.out.println("You got large straight");
            } else {
                System.out.println("Sorry no large straight");
            }

            if (smallStraight() == true) {
                System.out.println("You got smallStraight");
            } else {
                System.out.println("Sorry no small straight");
            }
            if (fullHouse() == true) {
                System.out.println("You got full house");
            } else {
                System.out.println("Sorry no full house");
            }
        }

    }

    public static void rollDice() {
        for (int i = 0; i < NUM_OF_DICE; i++) {
            dice[i] = randomValue();
        }
    }

    public static int randomValue() {
        return (int) (Math.random() * 6 + 1);
    }

    public static String diceToString() {
        String dado = "Here are your dice: ";
        for (int element : dice) {
            dado = dado + element + " ";
        }
        return dado;
    }

    public static boolean gotYatzee() {
        for (int element : dice) {
            if (element != dice[0]) {
                return false;
            }
        }
        return true;
    }

    public static void secondReroll(int[] newValue) {
        for (int element : newValue) {
            dice[element - 1] = randomValue();
        }
    }

    public static int[] convert(String s) {
        StringTokenizer st = new StringTokenizer(s);
        int[] a = new int[st.countTokens()];
        int i = 0;

        while (st.hasMoreTokens()) {
            a[i++] = Integer.parseInt(st.nextToken());
        }
        return a;
    }

    public static boolean Chance() {
        for (int element : dice) {
            int i = 0;
            if (element != dice[i]) {
                i++;
                return false;
            }
        }
        return true;
    }

    public static boolean smallStraight() {
        for (int i = 1; i <= NUM_OF_DICE; i++) {
            boolean b = false;
            for (int j = 0; j < NUM_OF_DICE; j++) {
                b = b || (dice[j] == i);
            }
            if (!b) {
                return false;
            }
        }
        return true;
    }

    public static boolean largeStraight() {
        int[] i = new int[5];
        i = dice;
        sortArray(i);

        if (((i[0] == 1) && (i[1] == 2) && (i[2] == 3) && (i[3] == 4) && (i[4] == 5))
                || ((i[0] == 2) && (i[1] == 3) && (i[2] == 4) && (i[3] == 5) && (i[4] == 6))
                || ((i[1] == 1) && (i[2] == 2) && (i[3] == 3) && (i[4] == 4) && (i[5] == 5))
                || ((i[1] == 2) && (i[2] == 3) && (i[3] == 4) && (i[4] == 5) && (i[5] == 6))) {
            return true;
        } else {

            return false;
        }

    }

    public static boolean askUser() {
        Scanner keyboard = new Scanner(System.in);
        int a = 0;
        String yes = "Yes";
        String no = "No";
        System.out.println("Do you want to reroll the dice again:  Yes or No? ");
        String userInput;
        userInput = keyboard.next();
        if (userInput.equals(yes)) {
            System.out.println("ALRIGHTY!!");
            return true;

        } else if (userInput.equals(no)) {

        }
        return false;
    }

    public static boolean threeKind() {
        int[] a = new int[5];
        a = dice;
        sortArray(a);
        if ((((a[0] == a[1]) && (a[1] == a[2])) // Three of a Kind
                || ((a[1] == a[2]) && ((a[2] == a[3])
                || (((a[2] == a[3]) && (a[3] == a[4]))))))) {
            return true;

        } else {
            return false;
        }
    }

    /*public static boolean fourKind(int[] dice) {




     }
     */
    public static int[] sortArray(int[] numbers) {

        int stop;
        for (stop = 0; stop < numbers.length; stop++) {

            for (int i = 0; i < numbers.length - 1; i++) {

                if (numbers[i] > numbers[i + 1]) {
                    swap(numbers, i, i + 1);
                }

            }

        }
        return numbers;
    }

    public static void swap(int[] numbers, int pos1, int pos2) {
        int temp = numbers[pos1];
        numbers[pos1] = numbers[pos2];
        numbers[pos2] = temp;

    }

    public static boolean fullHouse() {
        int[] a = new int[5];
        a = dice;
        sortArray(a);

        if ((((a[0] == a[1]) && (a[1] == a[2])) && // Three of a Kind
                (a[3] == a[4]) && // Two of a Kind
                (a[2] != a[3]))
                || ((a[0] == a[1]) && // Two of a Kind
                ((a[2] == a[3]) && (a[3] == a[4])) && // Three of a Kind
                (a[1] != a[2]))) {
            return true;
        } else {
            return false;
        }
    }
}

1 个答案:

答案 0 :(得分:0)

  

基本上我想找出一种方法来检查它的满屋,3种,4种等等

三卷后你有6个骰子。在3次滚动后对用户保留的骰子数组进行排序。

Yahtzee:((die[0] == die[4]) || (die[1] == die[5]))
4种:((die[0] == die[3]) || (die[1] == die[4] || (die[2] == die[5]))
小直,3次测试(x = 3,4,5):((die[x] - die[x-3]) == 3)
大直,2次测试(x = 4,5):((die[x] - die[x-4]) == 4)
等。

机会:由用户决定,对吧?

除非我遗漏了某些东西(我在Yatzee上有点生疏),这应该是相当简单的。