-2

これには本当に苦労しました。私は 2 スタックのカードを持っています.. ユーザー対コンピュータ。カードが配られ、適切に表示され、問題なく機能します。問題は、2 つのスタックのカードを実際に比較するにはどうすればよいかということです。したがって、ユーザーが「9」と言い、コンピューターが「8」を取得すると、ユーザーはポイントを獲得します。「AceofClubs.png」などの名前で読み込まれた 52 の画像があります。では、それぞれの画像に比較する値を与えるにはどうすればよいでしょうか? ありがとう!

  Public Enum Suit
Diamonds
Spades
Clubs
Hearts

終了列挙

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

Public Class Card Private ReadOnly faceVal As FaceValue Private isCardUp As Boolean Private ReadOnly suit As Suit

Public ReadOnly Property FaceVal As FaceValue
    Get
        Return Me.faceVal
    End Get
End Property

Public Property IsCardUp As Boolean
    Get
        Return Me.isCardUp
    End Get
    Set(ByVal value As Boolean)
        Me.isCardUp = value
    End Set
End Property

Public ReadOnly Property Suit As Suit
    Get
        Return Me.suit
    End Get
End Property

Public Sub New(ByVal suit As Suit, ByVal faceVal As FaceValue, ByVal isCardUp As Boolean)
    MyBase.New()
    Me.suit = suit
    Me.faceVal = faceVal
    Me.isCardUp = isCardUp
End Sub

Public Overrides Function ToString() As String 
    Return String.Concat("The", Me.faceVal.ToString(), "of", Me.suit.ToString())
End Function

クラス終了

4

2 に答える 2

4

OOPを受け入れます。たくさんの配列を作成する代わりに、それぞれのカードを保持するオブジェクトを作成します。

public class Card
{
   public Image Image {get; set;}
   public string Name {get; set;}
   public int Value {get; set;}
}

List次に、アルゴリズムを介してロードする a を利用できます。

 var myCards = new List<Card> {new Card{Image=...,Name="Ace", Value="12"}};

すべてのカードを適切なリストにロードした後、オブジェクトのプロパティを簡単に比較できます。

 if(computerCard.Value > myCard.Value) ...
于 2013-04-29T18:05:36.037 に答える
1

George が示すように Card クラスを作成したら、おそらく Hand クラスを作成して、各プレイヤーのハンドを保持します。Hand クラスには、ハンドのカードを保持するための List(Of Card) があります。また、カードのデッキを表す Deck クラスを作成することもできます。

VB Card Game スターター キットをダウンロードして、カード、デッキ、ハンドがどのように表されているかを確認してください。

http://visualstudiogallery.msdn.microsoft.com/ba4638ad-a2d2-49e5-ae46-94e0f747cae0

編集: カード ゲーム スターター キットは、次のようなカード クラスを定義します。

Public Enum Suit
    Diamonds
    Spades
    Clubs
    Hearts
End Enum

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

Public Class Card
    Private ReadOnly faceVal As FaceValue
    Private isCardUp As Boolean
    Private ReadOnly suit As Suit

    Public ReadOnly Property FaceVal As FaceValue
        Get
            Return Me.faceVal
        End Get
    End Property

    Public Property IsCardUp As Boolean
        Get
            Return Me.isCardUp
        End Get
        Set(ByVal value As Boolean)
            Me.isCardUp = value
        End Set
    End Property

    Public ReadOnly Property Suit As Suit
        Get
            Return Me.suit
        End Get
    End Property

    Public Sub New(ByVal suit As Suit, ByVal faceVal As FaceValue, ByVal isCardUp As Boolean)
        MyBase.New()
        Me.suit = suit
        Me.faceVal = faceVal
        Me.isCardUp = isCardUp
    End Sub

    Public Overrides Function ToString() As String 
        Return String.Concat("The", Me.faceVal.ToString(), "of", Me.suit.ToString())
    End Function
End Class

次に、Deck クラスで List(Of Card) を使用してカードを保持し、次のように Sub New でデッキを初期化しました。

Public Sub New
    'cards is a List(Of Card) declared elsewhere

    For Each s As Suit in Enum.GetValues(GetType(Suit))
        For Each v As FaceValue in Enum.GetValues(GetType(FaceValue))
            cards.Add(New Card(s, v, true))
        Next
    Next
End Sub

カード ゲームのスターター キットを見てください。具体的には、Card、Deck、および Hand クラスの定義については、CardGameFramework フォルダーを参照してください。

各ハンドには、ハンドにカードを保持するための List(Of Card) もあります。したがって、カードが配られると、そのカードは山札から取り除かれ、手札に加えられます。スターター キットでは、Deck クラスに Draw メソッドがあります。

于 2013-04-30T14:36:26.770 に答える