【问题标题】:Choose which item to pop from list选择要从列表中弹出的项目
【发布时间】:2022-07-01 03:45:44
【问题描述】:

构建一个“小”纸牌游戏。

让我们看看我的问题。

我可以从牌堆中抽牌,然后将最后抽到的牌放回顶部。

但我想决定哪张卡应该放回顶部!

import random

假设我们有一些“卡片”

Cards = [1,2,3,4,5,6]

Deck Class

class Deck():                             # Deck class definition for deck of cards
    

    def __init__(self, Cards):                   # Creating an empty list of cards. Constructor.
        self.cards = Cards
      
    
    def deal(self, i=-1):                  # Method to deal the top most card of the deck
        return self.cards.pop(i)

    
    def shuffle(self):                     # Method to shuffle the deck of cards
        random.shuffle(self.cards)         # Shuffling the card deck  

还有一个Player Class

class Player():
    
    def __init__(self):


        # creat deck for each player
        self.deck = Deck([1,2,3,4,5,6,7,8]) 
        # shuffle the deck before the hand is drawn
        self.deck.shuffle()
        
        # draw the starthand
        self.hand = []
        for i in range(3):
            card = self.deck.deal()
            self.hand.append(card)
        
                        

    def draw(self):
        card = self.deck.deal()
        return self.hand.append(card)

    
    def on_top(self, i=-1):
        card = self.hand.pop(i)
        return self.deck.cards.append(card)

当播放器被创建时

player_1 = Player()

洗牌,抽出3张牌

让我们检查一下手牌

player_1.hand

[1, 4, 5]

抽牌时

player_1.draw()

并再次手工检查

player_1.hand

[1, 4, 5, 3]

列表中的下一项被绘制。

好的,让我们将项目放回顶部

player_1.on_top()

player_1.hand

[1, 4, 5]


好的,完美。 但是我该如何选择自己放回套牌顶部的卡片呢?

接下来的问题是:

如何在列表中搜索特定Item并选择绘制?

您应该想象数字被卡片的正面所取代。

已经谢谢你帮助我了!

【问题讨论】:

  • 在一般情况下,这可能不是完全正确的对象模型。玩家通常没有一副牌。他们有一只手。一场游戏涉及 1 个以上的玩家,每个玩家都有一手牌。套牌存在并且独立于玩家建模。
  • 在这个游戏中,每个玩家都有自己的一副牌。

标签: python oop random indexing


【解决方案1】:

我不太确定我是否可以为您提供足够的帮助,仍在努力学习 Python OOP,但我会尝试以我的菜鸟心态

我认为按照您定义on_top() 的方式,您可以简单地将i 作为参数给出和索引

>>> player1.on_top(1)    # choosing 4 (with index 1) to be put on top
>>> player1.hand
[1, 5]
  • 现在我假设你的意思是

如何在列表中搜索特定Item并选择绘制?

表示你想on_top()你手中的一张牌(不知道它有哪个索引)

>>> player_1.on_top(player_1.hand.index(5))    # let's say you put away the card 5
>>> player_1.hand
[1]
  • 如果你想从甲板上 draw() 它,必须稍微改变你的功能
...
def draw(self, i=-1):    # adding `i` argument here 
        card = self.deck.deal(i)    # and here
        return self.hand.append(card)
...

这样就可以解决

>>> player_1.draw(player_1.deck.cards.index(5))
>>> player_1.hand
[1, 5]

我猜这种写法会很难读?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-15
    • 2022-12-23
    • 2016-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-09
    相关资源
    最近更新 更多