Покер игра в кости на Java - PullRequest
0 голосов
/ 08 ноября 2018

[Редактировать: я исправил смешивание двух пар и фулл-хауса, однако мой окончательный счет, где нет пар и показывает самое высокое значение, вообще не стрелял]

Я работаю над проектом, который играет в покер на кости. У меня все «выигрыши» работают за исключением того, что игральные кости бросают две пары [Правка: две пары исправлены], это говорит о том, что это фулл-хаус.

Вот инструкции:

В этой лабораторной работе вы напишете Java-программу, в которую играет игра Покер в кости. В этой игре пять кубиков бросаются и забиваются, как если бы они были рукой игральных карт. Игра проходит две отдельные фазы. На первом этапе игроку вручается «рука» игральных костей. Затем игрок выбирает, какие кости он хочет оставить, а какие он хочет перебросить. Как только это решение будет принято, все кости, помеченные игроком для переброса, перебрасываются, и отображается последняя «рука» игры в кости. После этого раздача должна быть оценена в соответствии с правилами игры в покер (приведенные ниже), а результат отображается на экране.

Вот правила подсчета очков: enter image description here

Вот мой код для метода оценки:

private static String getResult(int[] dice) {
    int i = 0;

    String results = "";

    int endResultsCheck = 0;

    int[] count = getCounts(dice);

    // Checks for 5 of a kind
    while (i < count.length) {
        if (count[i] == 5) {
            results = "Five of a kind!";
            endResultsCheck = 7;
        }
        i++;
    }

    // Checks for four of a kind
    i = 0;
    if (endResultsCheck != 7) {
        while (i < count.length) {
            if (count[i] == 4) {
                results = "Four of a kind!";
                endResultsCheck = 6;
            }
            i++;
        }
    }
    if (endResultsCheck < 6) {
        // Checks for full house
        i = 0;
        int check = 0;
        while (i < count.length) {
            if (count[i] == 3) {
                check++;
            }
            if (count[i] == 2) {
                check++;
            }
            i++;
        }
        if (check == 2) {
            results = "Full house!";
            endResultsCheck = 5;
        }
    }
    if (endResultsCheck < 5) {
        // Checks for three of a kind
        i = 0;
        while (i < count.length) {
            if (count[i] == 3) {
                results = "Three of a kind!";
                endResultsCheck = 4;
            }
            i++;
        }
    }
    if (endResultsCheck < 4) {
        // Checks for two pairs
        i = 0;
        int check = 0;
        while (i < count.length) {
            if (count[i] == 2) {
                check++;
            }
            i++;
        }
        if (check == 2) {
            results = "Two pairs!";
            endResultsCheck = 3;
        }
    }
    if (endResultsCheck < 3) {
        i = 0;
        while (i < count.length) {
            if (count[i] == 2) {
                results = "One pair!";
            }
            i++;
        }
        endResultsCheck = 2;
    }
    if (endResultsCheck == 0) {
        i = 0;
        int max = 0;

        while (i < dice.length) {
            if (max < dice[i]) {
                max = dice[i];
            }
            i++;
        }
        results = "Highest number is " + max + "!";
    }

    return results;

}

Когда это относится к методу getCounts(), это код:

private static int[] getCounts(int[] dice) {
    int[] count = new int[10];
    int i = 0;

    int one = 0;
    while (i < dice.length) {
        if (dice[i] == 1) {
            one++;
        }
        i++;
    }
    int two = 0;
    i = 0;
    while (i < dice.length) {
        if (dice[i] == 2) {
            two++;
        }
        i++;
    }
    int three = 0;
    i = 0;
    while (i < dice.length) {
        if (dice[i] == 3) {
            three++;
        }
        i++;
    }
    int four = 0;
    i = 0;
    while (i < dice.length) {
        if (dice[i] == 4) {
            four++;
        }
        i++;
    }
    int five = 0;
    i = 0;
    while (i < dice.length) {
        if (dice[i] == 5) {
            five++;
        }
        i++;
    }
    int six = 0;
    i = 0;
    while (i < dice.length) {
        if (dice[i] == 6) {
            six++;
        }
        i++;
    }
    int seven = 0;
    i = 0;
    while (i < dice.length) {
        if (dice[i] == 7) {
            seven++;
        }
        i++;
    }
    int eight = 0;
    i = 0;
    while (i < dice.length) {
        if (dice[i] == 8) {
            eight++;
        }
        i++;
    }
    int nine = 0;
    i = 0;
    while (i < dice.length) {
        if (dice[i] == 9) {
            nine++;
        }
        i++;
    }
    int ten = 0;
    i = 0;
    while (i < dice.length) {
        if (dice[i] == 10) {
            ten++;
        }
        i++;
    }

    count[0] = one;
    count[1] = two;
    count[2] = three;
    count[3] = four;
    count[4] = five;
    count[5] = six;
    count[6] = seven;
    count[7] = eight;
    count[8] = nine;
    count[9] = ten;

    return count;

}

1 Ответ

0 голосов
/ 08 ноября 2018

Сначала попытайтесь отладить (использовать реальный режим отладки и поместить точку останова или поместить значения печати) часть кода ниже. Ваша цель - найти трещину в логике внутри этого блока кода. Далее попробуйте обновить логику.

if (endResultsCheck < 6) {
    // Checks for full house
    i = 0;
    int check = 0;
    while (i < count.length) {
        if (count[i] == 3) {
            check++;
        }
        if (count[i] == 2) {
            check++;
        }
        i++;
    }
    if (check == 2) {
        results = "Full house!";
        endResultsCheck = 5;
    }
}

Попробуйте сначала сделать это самостоятельно. Охотиться за пропавшим миром очень весело.

if (count[i] == 2) { условие будет выполнено дважды, если у вас есть две пары. В результате check == 2 будет истинным, и вы получите «Полный дом».

Одно из возможных решений:

if (endResultsCheck < 6) {
    // Checks for full house
    i = 0;
    boolean hasPair = false;
    boolean hasTriplet = false;
    while (i < count.length) {
        if (count[i] == 3) {
            hasTriplet = true;
        }
        if (count[i] == 2) {
            hasPair = true;
        }
        i++;
    }
    if (hasPair && hasTriplet) {
        results = "Full house!";
        endResultsCheck = 5;
    }
}
...