C# 用C语言将洗牌后的牌发给4名玩家

C# 用C语言将洗牌后的牌发给4名玩家,c#,C#,嗨,我正在制作一款纸牌游戏,它创建了一副新牌,洗牌,并将洗牌后的牌发给4名玩家。我可以通过点击GetNewDeckButton并拖动deckShuffleButton来完成创建一个新的Deck,但不知道如何编写deal函数。。当我单击“交易”按钮时,洗牌牌应显示在每个玩家的文本框中,每个玩家应收到13张牌player1textbox、palyer2textbox。。。。。有人能帮我解决这个问题吗 谢谢您需要一种从牌组中取出顶牌的方法。然后你可以绕桌子转13圈,依次给每个玩家发顶牌编辑:我看你已经

嗨,我正在制作一款纸牌游戏,它创建了一副新牌,洗牌,并将洗牌后的牌发给4名玩家。我可以通过点击GetNewDeckButton并拖动deckShuffleButton来完成创建一个新的Deck,但不知道如何编写deal函数。。当我单击“交易”按钮时,洗牌牌应显示在每个玩家的文本框中,每个玩家应收到13张牌player1textbox、palyer2textbox。。。。。有人能帮我解决这个问题吗


谢谢

您需要一种从牌组中取出顶牌的方法。然后你可以绕桌子转13圈,依次给每个玩家发顶牌编辑:我看你已经有那部分了

当前,您将甲板表示为数组。问题是它的长度是固定的,所以没有直接的方法来移除上面的卡。您可以做的是将顶级卡片的索引存储在一个变量中,并在每次获取卡片时减少该索引。比如:

 public partial class Form1 : Form
{
    public string[] odeck = { "C1", "C2", "C3", "C4", "C5", "C6", "C7", "C8", "C9", "C10", "CJ", "CQ", "CK", "H1", "H2", "H3", "H4", "H5", "H6", "H7", "H8", "H9", "H10", "HJ", "HQ", "HK", "S1", "S2", "S3", "S4", "S5", "S6", "S7", "S8", "S9", "S10", "SJ", "SQ", "SK", "D1", "D2", "D3", "D4", "D5", "D6", "D7", "D8", "D9", "D10", "DJ", "DQ", "DK" };
    public string[] sdeck; // array to store the shuffled deck
    const  int cards_length = 51;
    //string[] cards = new string[odeck.Length];
    Random random = new Random();
    const int hand = 13; //number of cards in each player hand
    const int numPlayers = 4; //number of players
    string[,] players = new string[numPlayers, hand];    // Set up players hands arrays


    public void shuffle()
    {
        for (int i = odeck.Length; i > 0; i--)
        {
            int rand = random.Next(i);
            string temp = odeck[rand];
            odeck[rand] = odeck[i - 1];
            odeck[i - 1] = temp;
        }

    }

    public void deal() //iam having trouble how to write this function
    {
        // deal the deck
        for (int i = 0; i < numPlayers; i++)
        {
            for (int j = 0; j < hand; j++)
            {
                players[i, j] = ;
            }
        }
    }
private void GetNewDeck_Click(object sender, EventArgs e)
    {
        for (int i = 0; i < odeck.Length; i++)
        {
            string deck = odeck[i];

            NewDecktextBox.Text = String.Join("  ", odeck);

        }

    }
  private void Shufflebutton_Click(object sender, EventArgs e)
    {
        Form1 myshuffle = new Form1();
        myshuffle.shuffle();
        sdeck = myshuffle.odeck;
        ShuffletextBox.Text = String.Join("  ", sdeck);
    }
private void Dealbutton_Click(object sender, EventArgs e) // having issue with this
    {
      Player1textBox.Text =
      Player2textBox.Text = 
      Player3textBox3.Text =
      Player4textBox.Text= 

    }
它的用法如下:

int topCardIndex=51;

string RemoveTopCard()
{
   string topCard = sdeck[topCardIndex];
   topCardIndex--;
   return topCard;
}

我建议您创建一个单独的名为Deck的类来封装所有的Deck内容,包括洗牌。

尝试以更直接、单个问题的方式表达您的问题。它到底需要做什么?你试过什么?它在哪里失败了?在你尝试了一些事情之后,最好是这样做,而不是要求第一次通过解释如何发牌。甚至可以在第一次通过时尝试一些伪代码:!我建议对一副牌使用数据结构,而不是一个阵列。此问题右侧的相关部分显示了一系列有关交易卡的问题。@VP我能够完成新牌组的创建和洗牌,但在将洗牌的牌组分配给4名玩家时遇到了问题……当我单击“交易”按钮时,牌应该分配给4名玩家每人获得13。。。在各自的文本框中,作为旁注,将您的功能大写,尤其是公共功能。此外,你可以考虑制作一个卡片类,你可以在其中只为一个数字和枚举设置一个字符。
public void deal() //iam having trouble how to write this function
{
    // deal the deck
    for (int i = 0; i < numPlayers; i++)
    {
        for (int j = 0; j < hand; j++)
        {
            players[i, j] = RemoveTopCard();
        }
    }
}