C# I';I’我想用记分制来决定4名选手的胜负
我试图通过验证字符串值将点添加到计数中,但由于.equal和.contains仅适用于字符串,我不知道如何计数点。我应该为类型变量卡制作自己的相等方法吗?要求数字必须有黑桃/心形/钻石/梅花值C# I';I’我想用记分制来决定4名选手的胜负,c#,system,points,playing-cards,C#,System,Points,Playing Cards,我试图通过验证字符串值将点添加到计数中,但由于.equal和.contains仅适用于字符串,我不知道如何计数点。我应该为类型变量卡制作自己的相等方法吗?要求数字必须有黑桃/心形/钻石/梅花值 //card class... class Card { public string s; public string f; public Card (string sC, string fC) { s = sC; f = fC;
//card class...
class Card
{
public string s;
public string f;
public Card (string sC, string fC)
{
s = sC;
f = fC;
}
public override string ToString()
{
return f + s;
}
}
//Deck class....
string[] cards = {"2", "3", "4", "5", "6", "7",
"8", "9", "10", "J", "Q", "K",
"A"};
//spades, diamond , club, heart. not necessarily in the same order
string[] type = { "\x2660", "\x2666", "\x2665", "\x2663" };
deck = new Card[52];
random = new Random();
for (int i = 0; i < deck.Length; i++)
{
deck[i] = new Card(cards[i % 13], type[i / 13]);
}
//output is spades of 2
Console.WriteLine(Deck[0]);
void Shuffle()
{
for (int i = 0; i < deck.Length; top++)
{
int j = random.Next(52);
Card temp = playDeck[i];
playDeck[i] = playDeck[j];
playDeck[j] = temp;
}
}
Card passCards()
{
if (currentCard < deck.Length)
{
return deck[currentCard++];
}
else
{
return null;
}
}
// Method I'm trying to make
int count =0;
int countPoints()
{
for(int i = currentCard; i < deck.Length; i++)
{
if (deck[currentCard].Equals("1"))
{
count = count + 1;
}
}
return count
}
//main...
Console.WriteLine("playername" + ...13 cards.. + Total points : " + deck.countPoints());
//卡片类。。。
班级卡
{
公共字符串s;
公共字符串f;
公共卡(字符串sC、字符串fC)
{
s=sC;
f=fC;
}
公共重写字符串ToString()
{
返回f+s;
}
}
//甲板级。。。。
字符串[]卡片={“2”、“3”、“4”、“5”、“6”、“7”,
“8”、“9”、“10”、“J”、“Q”、“K”,
“A”};
//黑桃、钻石、棍棒、心脏。不一定是同一顺序
字符串[]类型={“\x2660”、“\x2666”、“\x2665”、“\x2663”};
卡片组=新卡片[52];
随机=新随机();
for(int i=0;i
一种方法是将卡的名称
属性存储为枚举
,其中每个名称的位置与卡的值相关(至少对于编号的卡)。例如:
// Start the Ace with value 1, the rest are automatically one greater than the previous
public enum CardName
{
Ace = 1, Two, Three, Four, Five, Six, Seven, Eight, Nine, Ten, Jack, Queen, King
}
这使得计算特定名称的分数非常容易。如果值为1
,则返回11
(假设ACE为11),如果大于9
,则返回10
(假设人脸卡为10),否则返回值:
public int Value
{
get
{
var value = (int) Name;
return value == 1 ? 11 : value > 9 ? 10 : value;
}
}
现在,如果我们有一个列表手牌
,我们可以通过如下操作得到手牌总数:
int total = hand.Sum(card => card.Value);
为了完整起见,这里有一个
卡
类、卡
类的小示例(这是一个围绕列表
的花式包装),以及它们的一个示例用法,以展示如何获得玩家手牌的总和:
public enum Suit { Hearts, Clubs, Diamonds, Spades}
public enum CardName
{
Ace = 1, Two, Three, Four, Five, Six, Seven, Eight, Nine, Ten, Jack, Queen, King
}
public class Card
{
public Suit Suit { get; }
public CardName Name { get; }
public int Value => (int) Name == 1 ? 11 : (int) Name > 9 ? 10 : (int) Name;
public Card(CardName name, Suit suit)
{
Name = name;
Suit = suit;
}
public override string ToString()
{
return $"{Name} of {Suit}";
}
}
public class Deck
{
private readonly List<Card> cards = new List<Card>();
private readonly Random random = new Random();
public int Count => cards.Count;
public static Deck GetStandardDeck(bool shuffled)
{
var deck = new Deck();
deck.ResetToFullDeck();
if (shuffled) deck.Shuffle();
return deck;
}
public void Add(Card card)
{
cards.Add(card);
}
public bool Contains(Card card)
{
return cards.Contains(card);
}
public bool Remove(Card card)
{
return cards.Remove(card);
}
public int Sum => cards.Sum(card => card.Value);
public Card DrawNext()
{
var card = cards.FirstOrDefault();
if (card != null) cards.RemoveAt(0);
return card;
}
public void Clear()
{
cards.Clear();
}
public void ResetToFullDeck()
{
cards.Clear();
// Populate our deck with 52 cards
foreach (Suit suit in Enum.GetValues(typeof(Suit)))
{
foreach (CardName name in Enum.GetValues(typeof(CardName)))
{
cards.Add(new Card(name, suit));
}
}
}
public void Shuffle()
{
var thisIndex = cards.Count;
while (thisIndex-- > 1)
{
var otherIndex = random.Next(thisIndex + 1);
if (thisIndex == otherIndex) continue;
var temp = cards[otherIndex];
cards[otherIndex] = cards[thisIndex];
cards[thisIndex] = temp;
}
}
}
class Program
{
private static void Main()
{
var deck = Deck.GetStandardDeck(true);
var playerHand = new Deck();
var computerHand = new Deck();
Console.WriteLine("Each of us will draw 5 cards. " +
"The one with the highest total wins.");
for (int i = 0; i < 5; i++)
{
GetKeyFromUser($"\nPress any key to start round {i + 1}");
var card = deck.DrawNext();
Console.WriteLine($"\nYou drew a {card}");
playerHand.Add(card);
card = deck.DrawNext();
Console.WriteLine($"I drew a {card}");
computerHand.Add(card);
}
while (playerHand.Sum == computerHand.Sum)
{
Console.WriteLine("\nOur hands have the same value! Draw another...");
var card = deck.DrawNext();
Console.WriteLine($"\nYou drew a {card}");
playerHand.Add(card);
card = deck.DrawNext();
Console.WriteLine($"I drew a {card}");
computerHand.Add(card);
}
Console.WriteLine($"\nYour total is: {playerHand.Sum}");
Console.WriteLine($"My total is: {computerHand.Sum}\n");
Console.WriteLine(playerHand.Sum > computerHand.Sum
? "Congratulations, you're the winner!"
: "I won this round, better luck next time!");
GetKeyFromUser("\nDone! Press any key to exit...");
}
private static ConsoleKeyInfo GetKeyFromUser(string prompt)
{
Console.Write(prompt);
var key = Console.ReadKey();
Console.WriteLine();
return key;
}
}
公共枚举套装{红心、梅花、钻石、黑桃}
公共枚举卡名
{
ACE=1、二、三、四、五、六、七、八、九、十、杰克、皇后、金
}
公务舱卡
{
公益诉讼{get;}
公共卡名名称{get;}
公共int值=>(int)Name==1?11:(int)Name>9?10:(int)Name;
公共卡(卡名、套装)
{
名称=名称;
西装=西装;
}
公共重写字符串ToString()
{
返回{Suit}的$“{Name}”;
}
}
公务舱甲板
{
私有只读列表卡=新列表();
private readonly Random=new Random();
公共整数计数=>cards.Count;
公共静态甲板GetStandardDeck(布尔混洗)
{
var甲板=新甲板();
deck.ResetToFullDeck();
如果(洗牌)牌组。洗牌();
返回甲板;
}
公共作废添加(卡片)
{
卡片。添加(卡片);
}
公共bool包含(卡片)
{
返回卡。包含(卡);
}
公共bool移除(卡)
{
归还卡片。移除(卡片);
}
public int Sum=>cards.Sum(card=>card.Value);
公共卡提款下一个()
{
var card=cards.FirstOrDefault();
如果(card!=null)cards.RemoveAt(0);
回程卡;
}
公共空间清除()
{
卡片。清除();
}
公共空间重置到空甲板()
{
卡片。清除();
//用52张牌填充我们的牌组
foreach(Enum.GetValues中的套装(typeof(Suit)))
{
foreach(Enum.GetValues中的CardName名称(typeof(CardName)))
{
卡片。添加(新卡片(姓名、套装));
}
}
}
公开无效洗牌()
{
var thisIndex=卡片数;
而(此索引-->1)
{
var otherIndex=random.Next(此索引+1);
如果(thisIndex==otherIndex)继续;
var temp=卡片[其他索引];
卡片[其他索引]=卡片[此索引];
卡片[此索引]=临时;
}
}
}
班级计划
{
私有静态void Main()
{
var deck=deck.GetStandardDeck(真);
var playerHand=新甲板();
var computerHand=新甲板();
Console.WriteLine(“我们每人将抽5张牌。”+
“总得分最高的人。”);
对于(int i=0;i<5;i++)
{
GetKeyFromUser($”\n按任意键开始第{i+1}轮);
var card=deck.DrawNext();
Console.WriteLine($“\n您画了一张{card}”);
playerHand.Add(卡片);
card=deck.DrawNext();
Console.WriteLine($“我画了一张{card}”);
添加(卡片);
}
while(playerHand.Sum==computerHand.Sum)
{
Console.WriteLine(\n所有的手都有相同的值!再画一个…);
var card=deck.DrawNext();
Console.WriteLine($“\n您画了一张{card}”);
playerHand.Add(卡片);
card=deck.DrawNext();
Console.WriteLine($“我画了一张{card}”);
添加(卡片);
}
Console.WriteLine($“\n您的总数为:{playerHand.Sum}”);
Console.WriteLine($“我的总数是:{computerHand.Sum}\n”);
Console.WriteLine(playerHand.Sum>computerHand.Sum