Рандомизировать игральные карты нажатием кнопки

Я работаю над программой на C#, где у вас есть кнопка, и она выберет две случайные карты из заранее определенного выбора. Например, я начинаю с 5 карт, которые будут выбраны из: туз пик, семерка пик, туз червей, пятерка треф и две алмазы. Теперь он сравнит эти две карты, определит, какая из них выше, и сделает его победителем, а "Пики"> "Сердца"> "Клубы"> "Алмазы" и "Туз" будут низкими. Таким образом, Пиковый Туз выиграет над двумя Алмазами. Я сделал CardClass, где я устанавливаю костюмы и ранги:

public enum Suits
{
    Spades, 
    Hearts, 
    Clubs, 
    Diamonds
}
public enum Ranks
{
    Ace,
    _2,
    _3,
    _4,
    _5,
    _6,
    _7,
    _8,
    _9,
    _10,
    Jacks,
    Queen,
    King
}    
//Private instance variables suit and rank
    private Suits suit;
    private Ranks rank;

    //Provide properties for suit and rank that insure they can only be set to valid values
    public Suits Suit
    {
        get
        {
            return this.suit;
        }
        set
        {
            this.suit = value;
        }

    }

    public Ranks Rank
    {
        get
        {
            return this.Rank;
        }

        set
        {
            this.rank = value;
        }
    }
    //Provide a default constructor (no parameters) that sets the card to Ace of Spades.
    public CardClass()
    {
        // Use the properties to set these values
        this.Rank = Ranks.Ace;
        this.Suit = Suits.Spades;
    }


    // Provide an explicit constructor with parameters for ALL instance variables.
    public CardClass(Ranks rank, Suits suit)
    {
        //Use the properties to set these values
        this.Rank = rank;
        this.Suit = suit;
    }

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

{
public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    int play1choice, play2choice;

    private void btnCard_Click(object sender, EventArgs e)
    {
        Random player1 = new Random();
        int Player1 = (player1.Next(5) + 1);
        Random player2 = new Random();
        int Player2 = (player2.Next(5) + 1);


    }
}

}

Есть ли способ установить определенные карты для номеров? Итак, если генератор случайных чисел выберет 1, он назначит его на туз пик, а на 2 - на семерку пик и т. Д.?

1 ответ

Создайте метод, который будет генерировать пять начальных карт (см. GetFiveInitialCards):

public enum Suits
{
    Spades,
    Hearts,
    Clubs,
    Diamonds
}
public enum Ranks
{
    Ace,
    _2,
    _3,
    _4,
    _5,
    _6,
    _7,
    _8,
    _9,
    _10,
    Jacks,
    Queen,
    King
}

public class CardClass
{

    public static CardClass[] GetFiveInitialCards()
    {
        return new CardClass[] {
            new CardClass(Suits.Spades, Ranks.Ace),
            new CardClass(Suits.Spades, Ranks._7),
            new CardClass(Suits.Hearts, Ranks.Ace),
            new CardClass(Suits.Clubs, Ranks._5),
            new CardClass(Suits.Diamonds, Ranks._2)
        };
    }

    public Suits Suit { get; }
    public Ranks Rank { get; }

    public CardClass(Suits suit, Ranks rank)
    {
        this.Suit = suit;
        this.Rank = rank;
    }
}


public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    int play1choice, play2choice;

    private readonly Random rnd = new Random();

    private void btnCard_Click(object sender, EventArgs e)
    {
        CardClass[] initialCards = CardClass.GetFiveInitialCards();

        int Player1 = (rnd.Next(5) + 1);
        CardClass player1Card = initialCards[Player1];

        int Player2 = (rnd.Next(5) + 1);
        CardClass player2Card = initialCards[Player2];

    }
}
Другие вопросы по тегам