c#按钮添加数字(复制第一个实例),而不是添加它们
本文关键字:添加 实例 数字 按钮 复制 第一个 | 更新日期: 2023-09-27 18:14:49
我正在制作一个21点项目-到目前为止,我已经制作了开关情况场景来生成随机数-但现在我想a)为所有这些制作一个计算类-或者我应该b)通过按钮进行此计算?
创建一个calc类是有意义的,但是我的变量作用域是out的,所以我被迫在按钮内进行。
然而,这不是我主要关心的;我想添加开关案例"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;
}
- 你的GenerateID方法可以通过使用枚举来表示每张卡片的值来极大地简化。
public enum CardType {
Two = 2,
...
Queen = 10,
King = 10,
Ace = 11
}
- 你需要跟踪玩家收到的每张卡牌。也许你应该有一个玩家类来保存他们被击中的卡牌?
像这样:
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; }
}
- 为了避免大量的转换,你可以让GenerateID返回int
看起来您认为您正在执行一个数学加法操作,但实际上您是将一个整数转换为一个字符串,然后将其连接到stRefID的末尾。
从上面的代码来看,Random
、Min
和Max
的值是相同的(即1
)。这可能就是为什么总是得到相同值的原因。
你可以更新它来生成新的随机数(比如1到99)
int iChosenMaxSize = random.Next(1, 99);