【问题标题】:Programming Noob needs OOP advice [closed]编程菜鸟需要 OOP 建议 [关闭]
【发布时间】:2019-02-22 06:34:55
【问题描述】:

我一直在用 python 为一个项目制作二十一点游戏,并且已经制作了一副纸牌(见下文)。但我想改用对象来改进它,因为我认为我会帮助我更多地提高我的技能。

我想知道是否有人知道如何,或者我可以从哪里获得一些资源来帮助我学习 OOP(如果这会产生任何场景,对不起,如果我不是这方面的新手)。

import random

deck = []
hand = []

def MakeDeck(deck):
    suits = ['♠','♣','♥','♦']
    values = ['A',2,3,4,5,6,7,8,9,10,'J','Q','K']

    for suit in suits:
        for value in values:
            deck.append((value,suit))

def DrawCard(deck, hand):
    card1 = random.choice(deck)
    deck.remove(card1)
    card2 = random.choice(deck)
    deck.remove(card2)

    hand.append(card1)
    hand.append(card2)

    print("Your hand:\n", hand)


MakeDeck(deck)
DrawCard(deck, hand)

【问题讨论】:

  • python object 在 google 上会产生多个教程/课程。
  • 您的代码与您的问题有什么关系? '但我想使用对象来改进它 [...]' 是一个有点无用的语句,因为一切都是 python 中的对象。

标签: python python-3.x blackjack playing-cards


【解决方案1】:

试试这个:https://realpython.com/python3-object-oriented-programming/

然后你可以阅读官方python文档:https://docs.python.org/3.7/tutorial/classes.html

对于你的例子,制作面向 OOP 的二十一点游戏的一些技巧:

  • 您的游戏需要一副纸牌,我认为职业套牌会是一个好的开始。
  • 这个类应该包含卡片,你可以创建一个代表卡片的类。您将在某处实例化 52 个对象并将它们存储在实例化的 Deck 中。
  • 您可以在 Deck 类中创建方法来管理您的牌组。例如,洗牌或抓牌
  • 然后你有一个游戏,二十一点。请记住,您可以将您的课程 Card 和 Deck 重复用于其他游戏。因此,关于二十一点规则的所有内容(例如,您的牌值)都应该在 BlackJack 类中进行描述。在这里,您可以实例化您的 52 张牌,因为其他游戏有时会使用更少/更多。然后执行游戏规则(回合,谁赢,......)
  • 您可能会创建一个 Player 类来存储有关玩家的信息。

最后的建议,避免代码中出现特殊字符

suits = ['♠','♣','♥','♦']

这会给你带来麻烦。

【讨论】:

  • 非常感谢,我真的需要那个。 XD
  • 两个改进:链接到 python 3 类,python 2 将在 2020 年之前被删除(并且 Q 标记为 3.x)。我将更改为:“特殊字符'可能'会导致麻烦”,因为我一直在 python 中使用 unicode 变量名来编写更多说明性示例。可能会扩展它们在某些情况下造成麻烦的原因。
  • @einsweniger 已编辑,谢谢
  • 我强烈建议不要阅读这个“realpython”的东西,只是浏览第一段我可以发现很多完全无能的东西,比如“实例是具有实际值的类的副本”。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-02-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多