我正在上学,做一些游戏..我选择了二十一点BCS,我认为这很容易,但是现在我知道这对我来说并不容易。所以我需要解决方案方面的帮助。
我试图以某种方式连接列表“卡”,但如果没有连接则连接idk。
这里是随机播放
public class Shuffle
{
public List<Card>cards;
public void Michani()
{
Random ran = new Random();
int r = cards.Count;
while (r > 1)
{
int n = ran.Next();
Card card = cards[n];
cards[n] = cards[r];
cards[r] = card;
}
}
}
public class Card
{
public CardValue Value { get; set; }
public CardSuit Suit { get; set; }
public int Weight { get; set; }
}
public enum CardValue : int
{
Eso = 1,
Dvojka = 2,
Trojka = 3,
Ctyrka = 4,
Petka = 5,
Sestka = 6,
Sedmicka = 7,
Osmicka = 8,
Devitka = 9,
Desitka = 10,
Jack = 11,
Queen = 12,
King = 13,
}
public enum CardSuit : int
{
Hearts = 1,
Spades = 2,
Clubs = 3,
Diamons = 4
}
这里是结束卡:
public class DeckGen
{
public List<Card> cards;
public void Deck()
{
for (int v = 0; v < 13; v++)
{
for (int s = 0; s < 4; s++)
{
cards.Add(new Card() { Suit = (CardSuit)s, Value = (CardValue)v });
if (s <= 8)
{
cards[cards.Count - 1].Weight = s + 1;
}
else
{
cards[cards.Count - 1].Weight = 10;
}
};
}
}
}
在这里创建牌组:
public class DrawCard
{
public List<Card> cards { get; }
public Card Lizani()
{
if (cards.Count <= 0)
{
DeckGen();
Shuffle();
}
Card returnedcard = cards[cards.Count - 1];
cards.RemoveAt(cards.Count - 1);
return returnedcard;
}
public void Shuffle()
{
}
public void DeckGen()
{
}
}
这里正在抓牌:
答案 0 :(得分:1)
这里有很多问题,还有一个值得推荐的最佳博客。但是我是否可以建议和仅使用扩展方法的老式方法(值得商))
注意 我修复了很多错误
public static class CardUtils
{
private static Random ran = new Random();
public static void Shuffle(this List<Card> cards)
{
var n = cards.Count;
while (n > 1)
{
n--;
var k = ran.Next(n + 1);
Card value = cards[k];
cards[k] = cards[n];
cards[n] = value;
}
}
}
用法
chards.Shuffle();
注意 我说过时了,因为这些天我们倾向于不使用此类静态类来进行测试和提供DI服务。但是,我认为这是一个很好的简单解决方案,可以在您需要的任何地方访问
还请注意 有更好的随机化技术,您的播放器可能会发怒,因为混洗器无法很好地发挥作用 < / sub>
答案 1 :(得分:0)
我不知道我是否确实回答了这个问题,但是我认为使类和列表静态化将达到目的,然后您可以像这样调用列表
DeckGen.CardList;