【发布时间】:2014-09-22 07:24:34
【问题描述】:
我想知道创建带有分数的一副牌或计算分数的最佳方法是什么?正如您将在下面看到的那样,我有一个计算类来处理卡片分数,检查卡片是什么并给它一个值并计算获胜者。
我正在创建一个二十一点游戏,我已经让卡片随机生成,但现在每张卡片的分数都有问题......
我只会向您展示我目前所上的课程,以便您了解我在做什么以及我在哪里。
我知道这是很多代码,对那些愿意尝试提供帮助但请尝试并忍受我的人来说并不好......
卡类
public static class Card
{
// Should be enumes eg. Privat enume suite{}
private static string[] Suite = new string[4] {"Clubs", "Hearts", "Spades", "Diamonds" };
private static string[] FaceValue = new string[13] {"Ace", "2", "3", "4", "5", "6", "7", "8", "9", "10", "Jack", "Queen", "King" };
public static List<string> CreateDeck()
{
List<string> deckOfCards = new List<string>();
for (int s = 0; s < 4; s++ )
{
string sut = Suite[s];
for (int fV = 0; fV < 13; fV++)
{
string value = FaceValue[fV];
deckOfCards.Add(sut + value);
}
}
// End of For loop.
deckOfCards.Shuffle();
return deckOfCards;
}
public static void Shuffle<T>(this IList<T> list)
{
Random rng = new Random();
int n = list.Count;
while (n > 1)
{
n--;
int k = rng.Next(n + 1);
T value = list[k];
list[k] = list[n];
list[n] = value;
}
}
}
发牌员级别(这是发牌员将获得、洗牌和发牌的中心级别)
class Dealer
{
private List<string> randomisedCards;
public Dealer()
{
randomisedCards = Card.CreateDeck();
}
public string dealCard()
{
string randCard = randomisedCards[0];
randomisedCards.RemoveAt(0);
// Creating the object.
Calculate c = new Calculate(randCard);
return randCard;
}
}
播放器类
class Player
{
// Member variables.
private int newPlayerScore;
private int newPlayerWin;
private int newPlayerLosses;
private int newPlayerTies;
// Defalut constructor used to set the member variables to their default values and will be used to reset
// the players details.
public Player()
{
newPlayerScore = 0;
newPlayerWin = 0;
newPlayerLosses = 0;
newPlayerTies = 0;
}
// Propertie used to get and set the players score.
public int calcPlayerScore
{
get
{
return newPlayerScore;
}
set
{
newPlayerScore = value;
}
}
public void getPlayerDetails()
{
Calculate c = new Calculate(newPlayerScore);
}
}
计算类(这是我用来计算每张牌的获胜者和得分的方法,这是我的问题,因为这不是最好的方法)
class Calculate
{
Player p = new Player();
// Member variable.
private string newCard;
private int pScore;
private int dScore;
// Overloaded constructor.
public Calculate(string card)
{
newCard = card;
}
public Calculate(int playerScore)
{
pScore = playerScore;
}
public void calculateScore()
{
switch (newCard)
{
case "Spades2":
case "Hearts2":
case "Diamonds2":
case "Clubs2":
pScore = 2;
p.calcPlayerScore = pScore;
break;
case "Spades3":
case "Hearts3":
case "Diamonds3":
case "Clubs3":
pScore = 3;
p.calcPlayerScore = pScore;
break;
case "Spades4":
case "Hearts4":
case "Diamonds4":
case "Clubs4":
pScore = 4;
p.calcPlayerScore = pScore;
break;
case "Spades5":
case "Hearts5":
case "Diamonds5":
case "Clubs5":
pScore = 5;
p.calcPlayerScore = pScore;
break;
case "Spades6":
case "Hearts6":
case "Diamonds6":
case "Clubs6":
pScore = 6;
p.calcPlayerScore = pScore;
break;
case "Spades7":
case "Hearts7":
case "Diamonds7":
case "Clubs7":
pScore = 7;
p.calcPlayerScore = pScore;
break;
case "Spades8":
case "Hearts8":
case "Diamonds8":
case "Clubs8":
pScore = 8;
p.calcPlayerScore = pScore;
break;
case "Spades9":
case "Hearts9":
case "Diamonds9":
case "Clubs9":
pScore = 9;
p.calcPlayerScore = pScore;
break;
default:
pScore = 10;
p.calcPlayerScore = pScore;
break;
}
}
}
提前致谢。
【问题讨论】:
-
也许创建一个结构并创建该结构类型的甲板?公共结构卡{字符串套件;整数值; }
-
我想知道 - 由于您只有 52 个值,也许明确定义卡片和分数最终可能会带来更大的灵活性和性能?
-
我不经常玩二十一点,但这张牌的花色与它的分数有什么关系吗? (我认为这只是数值)所以当你可以添加卡片值时,我看不到你从使用 switch 语句中获得了什么
标签: c#