-1

所以..现在我遇到了一个很大的问题。我有一张卡片组的照片,但是当点击交易按钮时它们根本没有显示。它们最初是显示的,但我调整了一些东西,现在它们没有了。将有 3 个玩家,这是玩家 1 的测试代码。现在它只设置为 16 张卡,但你明白了。

另外,我如何比较检查双打然后将它们移到弃牌堆中?请帮忙,此时我已经超出了我的能力范围,我真的不知道如何进行。谢谢!!

纸牌测试

Public Class DeckOfCardsTest
    Dim playercards As Integer = 16
    Dim playermatches As Integer
    Dim comp1cards As Integer
    Dim comp1matches As Integer
    Dim comp2cards As Integer
    Dim comp2matches As Integer


    Private deck As New DeckOfCards() ' create the deck of cards


    Private Sub dealButton_Click(ByVal sender As System.Object,
       ByVal e As System.EventArgs) Handles dealButton.Click
        discard1PictureBox.Visible = True

        deck.Shuffle() ' shuffles the deck

        Dim card1 = deck.DealCard()
        card1PictureBox.Image = GetCardImage(card1)

        Dim card2 = deck.DealCard()
        card2PictureBox.Image = GetCardImage(card2)

        Dim card3 = deck.DealCard()
        card3PictureBox.Image = GetCardImage(card3)

        Dim card4 = deck.DealCard()
        card4PictureBox.Image = GetCardImage(card4)

        Dim card5 = deck.DealCard()
        card5PictureBox.Image = GetCardImage(card5)

        Dim card6 = deck.DealCard()
        card6PictureBox.Image = GetCardImage(card6)

        Dim card7 = deck.DealCard()
        card7PictureBox.Image = GetCardImage(card7)

        Dim card8 = deck.DealCard()
        card8PictureBox.Image = GetCardImage(card8)

        Dim card9 = deck.DealCard()
        card9PictureBox.Image = GetCardImage(card9)

        Dim card10 = deck.DealCard()
        card10PictureBox.Image = GetCardImage(card10)

        Dim card11 = deck.DealCard()
        card11PictureBox.Image = GetCardImage(card11)

        Dim card12 = deck.DealCard()
        card12PictureBox.Image = GetCardImage(card12)

        Dim card13 = deck.DealCard()
        card13PictureBox.Image = GetCardImage(card13)

        Dim card14 = deck.DealCard()
        card14PictureBox.Image = GetCardImage(card14)

        Dim card15 = deck.DealCard()
        card15PictureBox.Image = GetCardImage(card15)

        Dim card16 = deck.DealCard()
        card16PictureBox.Image = GetCardImage(card16)

        lblPlayerCards.Text = CStr(playercards)




    End Sub ' dealButton_Click

    ' return an image for the Card argument
    Private Function GetCardImage(ByVal card As Card) As Image
        If card IsNot Nothing Then
            ' retrieve specific card image from resources
            Dim pictureResource = My.Resources.ResourceManager.GetObject(
              card.ToString().Replace(" ", ""))
            Return CType(pictureResource, Image) ' return Image
        Else
            dealButton.Enabled = False ' disable the Deal Button
            Return Nothing ' no more cards
        End If



    End Function ' GetCardImage

    Private Sub btnQuick_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnQuick.Click
        discard1PictureBox.Visible = True


        deck.Shuffle() ' shuffles the deck

        Do


            Dim card1 = deck.DealCard()
            card1PictureBox.Image = GetCardImage(card1)

            Dim card2 = deck.DealCard()
            card2PictureBox.Image = GetCardImage(card2)

            MessageBox.Show("Thank you for playing")
            dealButton.Enabled = False
            btnQuick.Enabled = False
        Loop
    End Sub


End Class ' DeckOfCardsTest

卡片

Public Class Card

    Public Enum CardValue
        Ace = 1
        Two = 2
        Three = 3
        Four = 4
        Five = 5
        Six = 6
        Secen = 7
        Eight = 8
        Nine = 9
        Ten = 10
        Jack = 11
        Queen = 12
        King = 13
    End Enum

    Public Enum CardSuit
        Clubs
        Spades
        Hearts
        Diamonds
    End Enum

    Public Property Value As CardValue
    Public Property Suit As CardSuit

    Public Sub New(ByVal value As CardValue, ByVal suit As CardSuit)
        Me.Value = value
        Me.Suit = suit
    End Sub

End Class

纸牌

Public Class DeckOfCards
   Private Const NUMBER_OF_CARDS As Integer = 52 ' number of cards
   Private deck(NUMBER_OF_CARDS - 1) As Card ' array of Card objects
   Private currentCard As Integer ' index of next Card to be dealt
   Private Shared randomNumbers As New Random() ' random number generator

   ' constructor fills deck of Cards
   Public Sub New()
      Dim faces() As String = {"Ace", "Two", "Three", "Four", "Five",
         "Six", "Seven", "Eight", "Nine", "Ten", "Jack", "Queen", "King"}
      Dim suits() As String = {"Hearts", "Diamonds", "Clubs", "Spades"}
        currentCard = 0 ' set currentCard so first Card dealt is deck(0)



        Dim deck(51) As Card
        Dim cardPosition As Integer = 0

        'loop through each suit and each value in that suit setting one of the deck to that   
        For Each suit As Card.CardSuit In [Enum].GetValues(GetType(Card.CardSuit))
            For Each value As Card.CardValue In [Enum].GetValues(GetType(Card.CardValue))
                deck(cardPosition) = New Card(value, suit)
                cardPosition += 1
            Next
        Next



   End Sub ' New

   ' shuffle deck of Cards with simple one-pass algorithm
   Public Sub Shuffle()
      ' after shuffling, dealing should start at deck(0) again
      currentCard = 0 ' reinitialize currentCard

      ' for each Card, pick another random Card and swap them
      For first = 0 To deck.GetUpperBound(0)
         ' select a random number between 0 and 51
         Dim second As Integer = randomNumbers.Next(NUMBER_OF_CARDS)

         ' swap current Card with randomly selected Card
         Dim temp As Card = deck(first) ' store copy of deck(first)
         deck(first) = deck(second) ' move deck(second) to deck(first)
         deck(second) = temp ' move original deck(first) to deck(second)
      Next
   End Sub ' Shuffle

   ' deal one Card
   Public Function DealCard() As Card
      ' determine whether Cards remain to be dealt
      If currentCard <= deck.GetUpperBound(0) Then
         Dim lastCard As Integer = currentCard ' store current card number
         currentCard += 1 ' increment current card number
         Return deck(lastCard)
      Else
         Return Nothing ' no more cards to deal
        End If



    End Function ' DealCard


End Class ' DeckOfCards
4

1 回答 1

0

我可以在您的GetCardImage函数中看到,您正在使用card.ToString().Replace(" ", "")从资源中获取卡片图像名称的名称。

由于您没有提供您的卡片图像在资源中的命名方式,我将假设它们的命名如下:

Club1   Spade1   Heart1   Diamond1    --> For Aces of each suit
Club2   Spade2   Heart2   Diamond2    --> For Two's of each suit
.       .        .        .
.       .        .        .
.       .        .        .
Club13  Spade13  Heart13  Diamond13   --> For Kings of each suit

一般来说,每张牌都被命名为{suitName}{faceValue}

在您的Card类中,添加以下覆盖:

Public Overrides Function ToString() As String
  Dim suit As String = ""

  Select Case Me.Suit
    Case CardSuit.Clubs : suit = "Club"
    Case CardSuit.Diamonds : suit = "Diamond"
    Case CardSuit.Hearts : suit = "Heart"
    Case CardSuit.Spades : suit = "Spade"
  End Select

  Dim value As String = CInt(Me.Value).ToString

  Return suit & value
End Function

在您的GetCardImage函数中,使用 获取卡片图像的名称,现在card.ToString()不需要这样做,Replace()因为您已经在上面的 Overrides 中格式化了名称。

我上面的代码完全基于我对卡片图像如何在资源中命名的假设(即,作为{suitName}{faceValue}格式)。如果您使用不同的命名格式,您所要做的就是修改 Overrides 函数,以便它将为每个卡片套装/值返回匹配的卡片图像名称。

于 2013-05-19T04:44:19.950 回答