-1

我正在制作一个二十一点项目 - 到目前为止,我已经制作了 switch case 场景以生成随机数 - 但现在我想要么 A.) 为所有这些创建一个计算类 - 或者我应该 B.) 做这个计算通过按钮?

创建一个 calc 类是有意义的,但是我的变量范围不在,所以我不得不在按钮内进行。

然而,这不是我的主要关注点;我想将开关案例“Hit.GenerateID(stRefID)”的第一个实例与它的第二个实例一起添加。

但是我不确定如何以编程方式使用 new 来区分两者,所以我得到的结果是 (2) = 22。

打击类:

 namespace Blackjack
 {
    public class Hit
    {

        public static string GenerateID(string stRefID)
        {

            Random random = new Random();

                int iChosenMaxSize = random.Next(1, 1);

                int two = 2;
                int three = 3;
                int four = 4;
                int five = 5;
                int six = 6;
                int seven = 7;
                int eight = 8;
                int nine = 9;
                int ten = 10;
                int jack = 10;
                int queen = 10;
                int king = 10;
                int ace = 11;


             for (int x = 1; x <= iChosenMaxSize; x++)
             {
                int iCharType = random.Next(0, 12);
                switch (iCharType)
                {
                        case 0:
                            stRefID += two;
                            break;
                        case 1:
                            stRefID += three;
                            break;
                        case 2:
                            stRefID += four;
                            break;
                        case 3:
                            stRefID += five;
                            break;
                        case 4:
                            stRefID += six;
                            break;
                        case 5:
                            stRefID += seven;
                            break;
                        case 6:
                            stRefID += eight;
                            break;
                        case 7:
                            stRefID += nine;
                            break;
                        case 8:
                            stRefID += ten;
                            break;
                        case 9:
                            stRefID += ace;
                            break;
                        case 10:
                            stRefID += jack;
                            break;
                        case 11:
                            stRefID += queen;
                            break;
                        case 12:
                            stRefID += king;
                            break;


                    }
              } return stRefID; 

            }
        }
    }

按钮:

 private void hit_Click(object sender, EventArgs e)
 {
        string stRefID = "";
        this.playerScore.Text = Hit.GenerateID(stRefID);

        int cardOne;
        cardOne = Convert.ToInt32(this.playerScore.Text);
        int cardTwo;
        cardTwo = new Hit.GenerateID(stRefID);
        this.test.Text = cardTwo.ToString() + cardOne;
 }
4

3 回答 3

1
  1. 通过使用枚举来表示每张卡片的值,您的 GenerateID 方法可以大大简化。

public enum CardType { Two = 2, ... Queen = 10, King = 10, Ace = 11 }

  1. 您需要跟踪玩家收到的每张卡片。也许你应该有一个 Player 类来保存他们被击中的卡片?

像这样的东西:

private Player _player;

private void hit_Click(object sender, EventArgs e) {
    // Add the first card
    _player.Cards.Add(Hit.GenerateID(..));
    // Add the second card
    _player.Cards.Add(Hit.GenerateID(..));
    ...
    // In order to use sum you will need: using System.Linq;
    this.test.Text = _player.Cards.Sum().ToString();
}

public class Player {
    public Player () {
        Cards = new List<int>();
    }

    public List<int> Cards { get; private set; }
}
  1. 为避免大量转换,您可以让 GenerateID return int
于 2013-05-22T03:09:49.557 回答
0

您似乎认为您正在执行数学加法运算,但实际上您是将整数转换为字符串,然后将其连接到 stRefID 的末尾。

于 2013-05-22T03:11:37.057 回答
0

从上面的代码看起来Random MinMax值是相同的(即1)。这可能是您始终获得相同值的原因..

您可以对其进行更新以生成新的随机数(例如 1 到 99)

 int iChosenMaxSize = random.Next(1, 99);
于 2013-05-22T03:28:27.713 回答