-2

在这方面遇到了真正的困难。我有 2 叠卡片.. 用户与计算机。卡片已处理并正确显示,效果很好。现在的问题是我如何实际比较 2 叠牌?所以如果用户说..一个“9”而计算机得到一个“8”,用户就会得到一分。加载了 52 张图像,名称如“AceofClubs.png”。那么,我怎样才能给各自的图像一个比较的值呢?谢谢!

  Public Enum Suit
Diamonds
Spades
Clubs
Hearts

结束枚举

公共枚举 FaceValue 二 = 2 三 = 3 四 = 4 五 = 5 六 = 6 七 = 7 八 = 8 九 = 9 十 = 10 Jack = 11 Queen = 12 King = 13 Ace = 14 End Enum

公共类 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

拥抱面向对象。与其创建一堆数组,不如创建一个对象来保存您的每张卡片,例如

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

然后,您可以利用List您将通过您的算法加载的,例如

 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 纸牌游戏入门工具包,看看它如何代表纸牌、牌组和手牌。

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

查看纸牌游戏入门工具包,特别是查看 CardGameFramework 文件夹,了解 Card、Deck 和 Hand 类的定义。

每只手也将有一个 List(Of Card) 来持有手中的牌。因此,当发牌时,这张牌会从牌库中取出并加入手牌。在入门工具包中,Deck 类有一个 Draw 方法

于 2013-04-30T14:36:26.770 回答