我正在尝试为一个项目编写一个代码,该代码列出一副纸牌的内容,询问用户想要洗牌多少次,然后再洗牌。它必须使用一种方法通过System.Random类创建两个随机整数。
以下是我的类:
Program.cs:
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Deck mydeck = new Deck();
foreach (Card c in mydeck.Cards)
{
Console.WriteLine(c);
}
Console.WriteLine("How Many Times Do You Want To Shuffle?");
}
}
}Deck.cs:
namespace ConsoleApplication1
{
class Deck
{
Card[] cards = new Card[52];
string[] numbers = new string[] { "2", "3", "4", "5", "6", "7", "8", "9", "J", "Q", "K" };
public Deck()
{
int i = 0;
foreach(string s in numbers)
{
cards[i] = new Card(Suits.Clubs, s);
i++;
}
foreach (string s in numbers)
{
cards[i] = new Card(Suits.Spades, s);
i++;
}
foreach (string s in numbers)
{
cards[i] = new Card(Suits.Hearts, s);
i++;
}
foreach (string s in numbers)
{
cards[i] = new Card(Suits.Diamonds, s);
i++;
}
}
public Card[] Cards
{
get
{
return cards;
}
}
}
}Enums.cs:
namespace ConsoleApplication1
{
enum Suits
{
Hearts,
Diamonds,
Spades,
Clubs
}
}Card.cs:
namespace ConsoleApplication1
{
class Card
{
protected Suits suit;
protected string cardvalue;
public Card()
{
}
public Card(Suits suit2, string cardvalue2)
{
suit = suit2;
cardvalue = cardvalue2;
}
public override string ToString()
{
return string.Format("{0} of {1}", cardvalue, suit);
}
}
}请告诉我如何让牌洗得像人想要的那样多,然后列出洗过的牌。
发布于 2021-09-30 00:52:38
在Card类中使用枚举。
public class Card
{
public Suit Suit { get; set; }
public CardValue CardValue { get; set; }
}
public enum CardValue
{
Ace = 1,
Two = 2,
Three = 3,
Four = 4,
Five = 5,
Six = 6,
Seven = 7,
Eight = 8,
Nine = 9,
Ten = 10,
Jack = 11,
Queen = 12,
King = 13
}
public enum Suit
{
Clubs,
Hearts,
Spades,
Dimonds
}完成后,您就可以创建一个PlayersHand类
public class PlayersHand
{
public List<Card> Cards { get; set; }
}现在,您已经创建了两个类并使用Enum进行了支持,现在只需从牌组中为每个玩家提供帮助,这只是一个纸牌列表。
List<Card> deck = new List<Card>();
// 52 cards in a deck, 13 cards per suit.
foreach (Suit suit in Enum.GetValues(typeof(Suit)))
{
foreach (CardValue cardValue in Enum.GetValues(typeof(CardValue)))
{
Card card = new Card
{
Suit = suit,
CardValue = cardValue
};
deck.Add(card);
}
}
// Shuffle using random replace.
for (var i = deck.Count-1; i > 0; i--)
{
Random rnd = new Random();
var j = rnd.Next(0, i);
var temp = deck[i];
deck[i] = deck[j];
deck[j] = temp;
}
// THESE ARE THE SETTINGS
int NumberOfPlayers = 4;
int NumberOfCardsPerPlayer = 5;
// NEW UP A LIST OF PLAYER HANDS
List<PlayersHand> hands = new List<PlayersHand>();
for (var i = 1; i <= NumberOfPlayers; i++)
{
PlayersHand newHand = new PlayersHand()
{
Cards = new List<Card>()
};
hands.Add(newHand);
}
// HERE IS THE TRICK TO DEALING OUT THE TOP CARD
int deal = 0;
// GOING AROUND THE TABLE 5 TIMES BECAUSE EACH PLAYER HAS 5 CARDS
for (var i = 0; i < NumberOfCardsPerPlayer ; i++)
{
// FOR EACH PLAYER GET THE TOP CARD USING THE 'DEAL' INT
for (var p = 0; p < NumberOfPlayers; p++)
{
var player = hands[p];
player.Cards.Add(deck[deal]);
// INCREMENT DEAL
deal++;
}
}这种方法对我很有效。
https://stackoverflow.com/questions/1150646
复制相似问题