繁体   English   中英

用Python创建二十一点游戏

[英]Creating a Blackjack Game in Python

我是编程的新手,我会加入这里提出问题,做出贡献(当我掌握更多知识时),基本上只是学习并弄清楚编程是否适合我。

我目前正在通过有关Udemy的课程学习Python,并且我正在一个具有里程碑意义的项目中创建二十一点游戏。 对我而言,唯一的规则是使用面向对象的编程并为Card和Deck之类的类创建类。

我看过一些有关OOP的教程,但是我对实现它们并不充满信心,所以我希望可以分享我写的内容,并希望通过此处的互动可以更好地理解。

首先,我制定了一个计划,将项目分解为较小的任务,因为这对我来说是不堪重负的。 这是我的计划:

  1. 用52张牌创建套牌

  2. 为每张卡分配数值(A可以为1或11)

  3. 洗牌

  4. 发牌手和玩家每手被送出2张牌

  5. 询问玩家是否要击打或站立

  6. 庄家必须打到17岁

  7. 比较“积分”以查看谁拥有更多积分

  8. 无论何时,如果有人超过21岁,该人将输掉比赛

我目前只能尝试弄清楚第一部分。 我基本上是在尝试使用OOP和for循环创建一个列表,其中包含所有52张卡,但似乎无法正确处理。

我在下面分享我的代码,这些代码是用Python 2编写的。有什么想法继续吗?

谢谢保罗

编辑#1:谢谢大家的评论和反馈。 我想现在离我越来越近了。 有人可以让我知道我是否做对了,以及如何打印我用来创建牌组的列表,以便能够看到列表中的52张卡片中的每张? 我尝试使用str方法,但看来我做错了。

import random

rank = [2,3,4,5,6,7,8,9,10,'Jack','Queen','King','Ace']
suit = ['Diamonds','Clubs','Hearts','Spade']

class Card(object):

    def __init__(self,rank,suit):
        self.rank = rank
        self.suit = suit

    def __str__(self):
        return self.suit + self.rank

    def grab_suit(self):
        return self.suit

    def grab_rank(self):
        return self.rank

    def draw(self):
        print (self.suit + self.rank)

class Deck(object):
    def __init__(self):
        self.cards = []    
        for i in rank:
            for j in suit:
                self.cards.append(Card(i,j))

    def __str__(self):
        return self.cards()

通常在这里,像您这样的人会提出您要提出的特定问题,而不是“给我一些指示”,因此请准备好抱怨这个问题太广泛。 就是说,我会给您一些提示。

您已经在任何类之外定义了suit和rank数组(也已经翻转了它们的名称,但无论如何)。 那不是面向对象的。 我将它们放在Deck类中,因为这是使用它们的地方。 这样想:每张纸牌不需要知道所有可能的等级和西服,只需要知道它所属的牌组在创建时的等级和西服即可。

我不确定self.deck = self发生了什么。 您想在那里做什么? 在下一行中,您具有self.deck = [] ,并将用Card对象填充它。 听起来不错,但是,将局部变量命名为与其所属的类的名称相同并不是一个好主意。 这将变得令人困惑。 我建议称它为cards ,因为它将是一个充满卡片组的卡片数组。 您的循环看起来不错,但是就在这里: self.deck.append(Card)您没有正确创建Card。 该卡需要知道您要分配给该特定卡的等级和西装。 我会让你自己去做。 祝好运 :)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM