从列表中删除一副牌的int

时间:2015-09-14 21:26:39

标签: c#

我正在尝试在视觉工作室制作纸牌游戏。我坚持的功能就是从牌组中取出一张牌(列表)。我使用以下随机数函数绑定按钮。

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?

2 个答案:

答案 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};
    }
}