Присвоение значения баллов изображениям для вычисления балла - PullRequest
0 голосов
/ 26 ноября 2018

Если у меня есть изображения стандартной колоды из 52 карт, и я хочу создать игру, в которой 4 игрока случайным образом выбирают карту из колоды, и тот, кто имеет карту с наибольшим достоинством, выигрывает.Как бы я присвоил значения изображениям карты?В настоящее время у меня есть случайное число, назначаемое для выбора карты для каждого игрока ...

Button p1 = new Button("Player 1");

    p1.setOnAction(new EventHandler<ActionEvent>() {

        @Override
        public void handle(ActionEvent event) {
            int n = rand.nextInt(52)+0;
            deckView.setImage(cards.get((n)%cards.size()));
            event.consume();
            p1.setDisable(true);
            Collections.shuffle(cards);

        }

    }); 

колода - это объект, который отображает карту выше первого игрока.Как показано ниже: OverView игры

Нужно ли создавать 52 карточных объекта и назначать им значения там?Если я сделаю это, мне нужно будет найти другой способ найти случайное значение, используя объекты карт вместо N?Вот инструкции, если я не объяснил четко.

(Победителем игры является игрок, выигравший наибольшее количество раундов. В каждом раунде игрок играет одну карту. Игрок с картой с наибольшим значением выигрываетраунд 2 - самое низкое значение, а туз - карта наибольшего значения. Если выбраны кратные одинаковой стоимости карты, масти определяют победителя. Пики> Клубы> Алмазы> Сердца ")

1 Ответ

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

Просто держите список значений / костюмов где-нибудь.Если вы разместите их в порядке возрастания, вы можете довольно легко создать карточки в порядке возрастания значения, используя вложенный цикл для итерации по значениям и мастям соответственно, внешний цикл - это итерация значений.

Какдля рисования карт: Вы, вероятно, не хотите повторения, поэтому вы должны удалить карту из колоды после вытягивания.

public enum Suit {
    HEART("hearts"), SPADE("spades"), CLUB("clubs"), DIAMOND("diamonds");

    private final String imageString;

    Suit(String imageString) {
        this.imageString = imageString;
    }

    public String getImageString() {
        return imageString;
    }

}
public enum CardValue {
    TWO("2"),
    THREE("3"),
    FOUR("4"),
    FIVE("5"),
    SIX("6"),
    SEVEN("7"),
    EIGHT("8"),
    NINE("9"),
    TEN("10"),
    JACK("jack"),
    QUEEN("queen"),
    KING("king"),
    ACE("ace");

    private final String imageString;

    CardValue(String imageString) {
        this.imageString = imageString;
    }

    public String getImageString() {
        return imageString;
    }
}
public final class Card implements Comparable<Card> {
    private final CardValue value;
    private final Suit suit;

    private final int cardValue;

    public Card(Suit suit, CardValue value) {
        if (suit == null || value == null) {
            throw new IllegalArgumentException();
        }
        this.suit = suit;
        this.value = value;
        this.cardValue = value.ordinal() * 4 + suit.ordinal();
    }

    public CardValue getValue() {
        return value;
    }

    public Suit getSuit() {
        return suit;
    }

    @Override
    public int compareTo(Card o) {
        return cardValue - o.cardValue;
    }

    public Image createImage() {
        return new Image(value.getImageString() + "_of_" + suit.getImageString() + ".png");
    }

    @Override
    public int hashCode() {
        return cardValue;
    }

    @Override
    public boolean equals(Object obj) {
        return obj != null
                && (obj instanceof Card)
                && (((Card)obj).cardValue == cardValue);
    }

}
private final Random random = new Random();

Создать колоду:

private final List<Card> cards;

{ 
    cards = new ArrayList<>(suits.length * values.length);
    Suit[] suits = Suit.values();
    CardValue[] values = CardValue.values();
    List<Card> cards = new ArrayList<>(suits.length * values.length);

    for (CardValue val : values) {
        for (Suit suit : suits) {
            cards.add(new Card(suit, val));
        }
    }
}

положить все карты в колоду и перемешать

// create copy to avoid having to recreate all the cards when putting all cards back in the deck
List<Card> deck = new ArrayList<>(cards);
Collections.shuffle(deck, random);

Убрать «верхнюю» карту из колоды (в данном случае последнюю в списке по эффективности):

Card card = deck.remove(deck.size() - 1);

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

Card card = deck.remove(random.nextInt(deck.size()));

Класс Card предоставляет метод для создания изображениядля него и сравнения значений карты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...