Как реализовать массив для хранения кубиков / удалить их на основе бросков? - PullRequest
0 голосов
/ 15 января 2019

Мне дали задание, которое я в основном понимаю. Тем не менее, мне нужно иметь массив для моих 5 кубиков. Я не знал, как настроить массив, если бы я мог бросить кости, и если они выпадают на 2 или 5, их удаляют из кости. На данный момент единственная вещь, которая заставляет мой цикл «работать», - это моя система подсчета очков. Что мне нужно, чтобы массив там говорил, пока у меня есть кости / кубики, продолжайте катиться. Во всяком случае, я думаю, что я сделал большую часть работы, за исключением массива, в котором хранятся кости. Я довольно новичок в программировании и хотел бы понять это в будущем.

Вот краткое изложение того, что мне нужно сделать, чтобы моя программа:

  1. Создайте массив из пяти кубиков

  2. Бросьте 5 кубиков. (6 сторон).

  3. а. Проверьте наличие 2.
    б. Проверьте наличие 2 или 5.

  4. Если есть 2 или 5, сумма равна 0, и количество доступных костей уменьшается на количество 2 или 5 с.

  5. Если нет 2 или 5, сложите кубики и добавьте их к общей сумме.

  6. Пока есть кости для броска, продолжайте идти, пока у вас не закончатся кости.

Я уже написал код, который соответствует требованиям игры. Однако я застрял в массиве и не могу понять, как его реализовать.

import java.util.Scanner;

public class StuckInTheMudd {

    static int rollDice() {

        int die1 = (int) (6 * Math.random()) + 1;
        return die1;
    }

    public static void main(String[] args) {
        int die1;
        int die2;
        int die3;
        int die4;
        int die5;

        int playerPoints = 0;
        int roundPoints = 0;
        String answer;
        Scanner input = new Scanner(System.in);

        System.out.println("Hello, Welcome To Stuck In The Mud");

        while (playerPoints <= 100) {
            System.out.println("Please roll the dice by pressing 'y' and hitting enter");
            System.out.println("o=================o");

            answer = input.next();

            if (answer.equalsIgnoreCase("y")) {
                die1 = rollDice();
                die2 = rollDice();
                die3 = rollDice();
                die4 = rollDice();
                die5 = rollDice();

                System.out.println("Dice 1: " + die1);
                System.out.println("Dice 2: " + die2);
                System.out.println("Dice 3: " + die3);
                System.out.println("Dice 4: " + die4);
                System.out.println("Dice 5: " + die5);

                if (die1 == 2 || die2 == 2 || die3 == 2 || die4 == 2 || die5 == 2) {
                    roundPoints = 0;
                    System.out.println("The Player loses the points for this round.");
                    System.out.println("o=================o");
                    System.out.println("Players points: " + playerPoints);
                    System.out.println("o=================o");
                } else if (die1 == 5 || die2 == 5 || die3 == 5 || die4 == 5 || die5 == 5) {
                    roundPoints = 0;
                    System.out.println("The Player loses the points for this round.");
                    System.out.println("o=================o");
                    System.out.println("Players points: " + playerPoints);
                    System.out.println("o=================o");
                } else {
                    roundPoints = roundPoints + die1 + die2 + die3 + die4 + die5;
                    playerPoints = playerPoints + roundPoints;
                    System.out.println("Current Round Points: " + roundPoints);
                    System.out.println("o=================o");}

            } else {
                System.out.println("Invalid entry, please try again.");
            }

        }
        System.out.println("Game Over and end of loop");
    }
}

Еще раз мне нужно иметь массив, в котором хранятся мои кости. Если кости выпадают на 2 или 5 секунд, они удаляются из массива. Этот цикл будет продолжаться до тех пор, пока у меня не останется больше кубиков и игра не закончится.

Ответы [ 3 ]

0 голосов
/ 15 января 2019

Я бы создал массив int для предметов для игры в кости, но я бы не удалял из него предметы (если вы хотите это сделать, тогда List - гораздо лучший вариант)

int[] dices = new int[5];

Я бы использовал простое постоянное значение, чтобы пометить конкретную кость как удаленную, -1 хорошо для этого.

private final static int NO_DICE = -1;


public static void main(String[] args) {
    int[] dices = new int[5];

    int playerPoints = 0;
    int roundPoints = 0;
    String answer;
    Scanner input = new Scanner(System.in);

    System.out.println("Hello, Welcome To Stuck In The Mud");

    while (playerPoints <= 100) {
        System.out.println("Please roll the dice by pressing 'y' and hitting enter");
        System.out.println("o=================o");

        answer = input.next();

        if (answer.equalsIgnoreCase("y")) {
            for (int i = 0; i < dices.length; i++) {
                if (dices[i] == NO_DICE) {
                    continue;
                }
                dices[i] = rollDice();
                System.out.println("Dice " + i + ": " + dices[i]);
            }

и затем при проверке на 2 или 5

for (int i = 0; i < dices.length; i++) {
    if (dices[i] == NO_DICE) {
        continue;
    }
    if (dices[i] == 2 || dices[i] == 5) {
         dices[i] = NO_DICE;
         roundPoints = 0;
         //...
     }
}
0 голосов
/ 15 января 2019

К сожалению, вы не можете удалить из массива как такового, так как размер устанавливается при создании (поэтому, если бы вы могли использовать List какого-то рода - это сделало бы это намного проще). Следовательно, вам нужно будет создать новый массив без элементов, которые вам не нужны.

Возможно перебрать существующий массив и установить значения в новом массиве для каждого, кроме случаев, когда это два или пять. Вот простой пример:

static int[] removeElementFromArray(int[] arr) {
    int[] newArr = new int[arr.length - 1];
    int temp = 0;
    for (int i = 0; i < arr.length; i++) {
        if (arr[i] != 5 && arr[i] != 2) {
            newArr[temp] = arr[i];
            temp++;
        }
    }
    return newArr;
}

Вот пример online , но, очевидно, сохраните возвращенный массив вместо его печати

0 голосов
/ 15 января 2019

Вы можете просто использовать битовую маску вместо массива:

int bitmask = 0b11111; // 5 bits = 5 dice

Чтобы прочитать количество кубиков, используйте Integer.bitCount():

int dicesLeft = Integer.bitCount(bitmask);

Чтобы удалить кристалл, вы можете использовать сдвиг битов:

bitmask >>= n;

Где n - количество кубиков, которые вы хотите удалить

...