-1

だから..今、私はかなり大きな問題を抱えています。カード デッキの写真がありますが、ディール ボタンをクリックしてもまったく表示されません。最初は表示されていましたが、何かを調整したところ表示されなくなりました.3 人のプレーヤーが表示されます。これはプレーヤー 1 のテスト コードです。現在は 16 枚のカードしか設定されていませんが、アイデアはわかります。

また、ダブルスをチェックしてからそれらを破棄パイルに削除するにはどうすればよいですか? 助けてください。この時点で私は自分の能力を超えており、どうすればよいかわかりません。ありがとう!!

Deckofcardsテスト

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()

上記の私のコードは、カード画像がリソースでどのように命名されているかという私の仮定にのみ基づいています (つまり、{suitName}{faceValue}形式)。別の命名形式を使用する場合は、Overrides 関数を変更して、各カードのスーツ/値に一致するカード イメージ名を返すようにするだけです。

于 2013-05-19T04:44:19.950 に答える