我正在设计游戏网站,许多(希望成千上万)玩家会相互同时玩某些纸牌游戏.甲板是标准牌52牌.每张卡都有一套西装和一个等级.卡片将被随机洗牌,处理,挑选,订购,播放.我的问题是,应该Card是枚举,结构还是类?
对于枚举:让每张卡都是字节0..51.因此卡片占用的空间非常小.您可以将手表示为8字节的位集.当需要时,您可以非常快速地计算给定卡的套装和等级:即suit(n)= n/13.这将非常有效.如果需要为Card编写方法,请通过扩展方法编写.
对于struct:不,这就像编写机器代码一样.卡是一种简单的结构,保存的数据非常少,不可变,很小.它没有太多行为,因此将其作为结构并将其视为被动数据结构.当需要时,您可以非常快速地从给定卡计算0..51中的索引.
对于课堂:不,这不是一种面向对象的思维方式.制作卡片课程.让它一成不变.准确创建52个实例.让卡池保存这些实例.因此,当需要黑桃皇后时,它会向卡池询问.即使有数千场比赛正在进行,也会有一个也只有一个黑桃皇后.如果需要,可以在卡中存储索引字段0..51.
我倾向于最后一个选项(课程),但我不确定.我不太担心表现; 在此过程中,我可能会犯更严重的错误.我担心的是我的整个观点可能是错的; 也许这是一个非常简单的决定,我犹豫不决,因为我缺乏其他人拥有的一些知识.
你怎么看?
编辑:关于卡的行为.我认为一张卡片只会知道其他卡片.例如,它可以定义"谁击败谁在桥中"的部分顺序.它不需要知道关于甲板的任何信息.这将是服务器端代码; 当然,它不需要知道在屏幕等上绘制自己.
Eri*_*ert 13
在决定引用类型或值类型时,你应该问自己的基本问题当然是我在逻辑上建模一个值,或者引用的东西?这就是为什么值类型和引用类型首先被称为"值类型"和"引用类型".
您是否计划将"卡片"作为参考处理,就像处理具有身份的物理对象一样?例如,假设您正在为Canasta建模,它同时使用两个标准卡片组进行播放.你是否想要跟踪两个不同的黑桃皇后并将它们视为不同的参考?
或者你会把它们当作价值观,对待数字的方式?你永远不会说"这里的六号与那里的六号不同",因为数字只能通过它们的数值来区分.
制作一张struct或class一张卡片时,卡片的价值应为a enum,而卡片的套装也是一张enum.
制作牌组,你可以使用a class,它包含一个列表card,有类似的操作等Shuffle.
| 归档时间: |
|
| 查看次数: |
7191 次 |
| 最近记录: |