首页 > 解决方案 > 在 OOP 中使用方法时,如何保存这些方法所做的调整?(二十一点游戏)

问题描述

我对编码非常陌生,我最终决定使用 OOP 进行编码。我以前编写过一次二十一点,但我没有使用 OOP。为了习惯使用 OOP,我决定使用 OOP 对其进行重新编码,但我遇到了一些问题。首先,我想说卡片/套牌/玩家的基础取自一个关于如何使用 OOP 在 python 中制作卡片组的小教程。就像我说的我是编码新手,但我认为指出这一点很重要,因为卡片/甲板/播放器的基础不是 100% 我的知识产权。但我从视频中了解了套牌/播放器/卡片类是如何协同工作的。我在这个项目中的目标只是更习惯于通过我之前编写过的游戏来处理对象。我还对其进行了一些调整,以便为我的二十一点游戏制定方法。

到目前为止我的代码的 github(如果你看不到它,请告诉我,我为此创建了一个 github,所以我不确定它是否有效):https ://github.com/Michaelj82/card -games/commit/f0582970aee693c76dc48b18a14b0230915371fc (请注意,代码甚至还没有接近完成,并且缺少诸如 Aces 及其旋转值之类的游戏机制。我一直被困在我的问题上,所以我没有从那里开发太多游戏)

最后,我的问题是:当我使用类中的命令时,它们不会保留我之前所做的更改。这是一个例子(但是我很确定这个问题在代码中再次发生):

 #dealing first 2 cards to user
def deal_user(self):
    user = Player()
    if first == 0:
        user.draw(deck)
        user.draw(deck)
        print("Your hand: ")
        user.showhand()
        print("Value of hand: ")
        print(user.blackjack_values())
        blackjack().check_user()

    elif first != 0:
        user.draw(deck)
        print("Your hand: ")
        user.showhand()
        print("Value of hand: ")
        print(user.blackjack_values())
        blackjack().check_user()

我的 github 有所有的代码。这个例子没有显示所有的代码,但是,它显示了我的问题。前两张牌完美运行,它将它们添加到我的 Player 类的 self.hand 列表中,显示它们,计算游戏的值等。

然后,当我执行“blackjack().check_user()”时,它会遍历最终会结束的代码(如果用户决定击中,但我还没有正确编码站在游戏中)到“elif first”之后的代码!= 0" (我尝试使用布尔值,但它们不起作用,这最终起作用了)。在“elif first != 0”之后,它执行 user.draw(deck) 和 user.showhand()。

但是,“elif first != 0”下的 user.draw(deck) 不会附加到第一次发牌时使用的 self.hand 列表(在“if first == 0”下)。我想在我的代码中某处我可能正在重复“self.hand = []”这将摆脱以前的列表?但是,我不确定是否是这种情况,因为如果我连续执行两个“user.draw(deck)”,我可以创建一手多张牌的手牌,但如果中间有任何代码则不行。本质上,如果我连续执行“user.draw(deck)”,我可以将多张卡片附加到 self.hand,但如果我在这些 user.draws 的实例之间放置不同的代码,则之前的 self.hand 会被删除。

如果这很难理解,我很抱歉。如果需要任何澄清,我很乐意解释更多。此外,如果我在这些帖子/一般编码中遗漏了任何礼仪,请告诉我!我特别想解决这个问题,因为它阻碍了游戏的发展,但欢迎所有批评:D

(如果我有点漫不经心,我​​也很抱歉,我想把尽可能多的信息放在那里,这样我才能被理解:))

标签: pythonpython-3.xblackjack

解决方案


推荐阅读