我正在尝试在视觉工作室制作纸牌游戏。我坚持的功能就是从牌组中取出一张牌(列表)。我使用以下随机数函数绑定按钮。
List<int> Deck = new List<int> { 0, 1, 2, 3};
Random R = new Random();
Int Card = R.Next(Deck.Count);
Deck.Remove(Card);
问题是我再次按下按钮后它没有从列表中删除int,列表只是回到我删除int之前的状态。我将如何永久删除列表中的int?
答案 0 :(得分:6)
因为您已在Button_Click
事件中定义了列表,所以每次单击Button
时,都会再次创建列表。你应该把它变成全球性的:
List<int> Deck = new List<int> { 0, 1, 2, 3};//global
private void button1_Click(object sender, EventArgs e)
{
Random R = new Random();
int Card = R.Next(Deck.Count);
Deck.Remove(Card);
}
答案 1 :(得分:0)
您必须将列表全局显示在表单中,这样每次单击按钮时都不会创建新列表。否则,只有按钮单击方法正在执行时,列表才会存在。
此外,您应该只创建一次Random
课程。
如果将列表初始化放在自己的方法中,可以在表单构造函数中调用它,也可以在另一个按钮单击中调用它以重新启动游戏。
public partial class frmCardGame : Form
{
// Fields declared here exist as long as the form is open.
private readonly Random R = new Random();
private List<int> Deck;
public frmCardGame()
{
InitializeComponent();
InitializeDeck();
}
private void btnPlay_Click(object sender, EventArgs e)
{
// Variables declared here exist only as long as this method is being executed.
int card = R.Next(Deck.Count);
Deck.Remove(card);
}
private void btnRestart_Click(object sender, EventArgs e)
{
InitializeDeck();
}
private void InitializeDeck()
{
Deck = new List<int> { 0, 1, 2, 3};
}
}