0
내 디자인은 사용자에게 "손"을 보여주기 위해 26 개의 그림 상자 (코드가 10 개까지만 표시됨)를 사용하는 것입니다. 이제 이미지 상자에서 복식을 확인한 다음 그 복식을 지워진 더미로 제거하는 방법은 무엇입니까? 그러니까 2 개의 잭이 있고 3 개의 파이브가 있다면 2 개의 잭이 제거되고 2 개의 파이브 만 제거된다고합시다. 나는 이것을하는 방법을 이해할 수 없다. 내가 그들을 설정하고 다음과 같이 아래 내 코드에서 이름을 지정한 다음은 카드 일치 게임 .. 카드를 비교하는 방법?
Dim faces() As String = {"Ace", "Two", "Three", "Four", "Five",
"Six", "Seven", "Eight", "Nine", "Ten", "Jack", "Queen", "King"}
내 코드뿐만 아니라 컴퓨터 플레이어가있을 것입니다하지만 이것은 단지 플레이어 하나 정말이다.
Deckofcards는
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)
' populate deck array with Card objects
For count = 0 To deck.GetUpperBound(0)
deck(count) = New Card(faces(count Mod 13), suits(count \ 13))
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
당신은 당신의 루프보다 효율적으로 만들 수있는 (그리고'경우 제거 ')를'i + 1'에서'i' (''Cards.Count-2'')로 바꾸면 ...''string'' 또는'int'에서'enum'에 대한 변경이 분명히 좋은 코드이지만, 문제와의 큰 차이! –
@dan - 동의 - 좀 더 효율적일 수 linq 쿼리에 대한 수정했습니다 –
@MattWilko 도움을 주셔서 감사합니다,하지만 카드 클래스를 교체하여 오류가 발생했습니다 "오류 옵션 엄격한 암시 적 변환을 허용하지 않습니다 'String'에서 'DeckOfCardsTest.Card.CardValue'로 변경하십시오. " 및 " 옵션을 엄격하게 설정하면 '문자열'에서 'DeckOfCardsTest.Card.CardSuit'로 암시 적 변환을 할 수 없습니다." 이 코드 부분에 카드 객체가있는 데크 어레이를 채 웁니다. count = 0의 경우 deck.GetUpperBound (0) 데크 (계수) = 새 카드 (면 수 (Mod 13), 수트 (count \ 13)) 다음 – user2382959