【问题标题】:Go Fish in Python 3在 Python 3 中钓鱼
【发布时间】:2015-01-23 04:01:12
【问题描述】:

下一个 Python 问题...

所以我有一个学生正在使用 Python 3 开发一个自玩游戏 Go Fish 游戏,并且遇到了抽牌问题。问题是程序按顺序向每个玩家发相同的牌,即:玩家 1 得到黑桃 4、方块 2、红心 8 等,玩家 2 得到相同的牌,玩家 3 得到相同的牌,等等)。

我们不确定如何让它为每个玩家重新循环每次抽奖的代码的随机化部分。

谢谢! 首先是套牌模块,其次是游戏代码。

import random

def MakeDeck():
    deck = []
    c = 0
    values = ["Ace", "2", "3", "4", "5", "6", "7", "8", "9", "10", "Jack", "Queen", "King"]
    suits = ["Hearts", "Spades", "Diamonds", "Clubs"]

    for v in values:
        for s in suits:
            deck.append([v,s])

    random.shuffle(deck)

    return deck

现在,游戏代码...

import deck, random, time

fish_deck = deck.MakeDeck()

#for i in fish_deck:
#    print(i[0]+" of "+i[1])

class fisherman():
    name = ""
    hand = []
    sets = []

def ask(player1, player2):
    pause = random.randint(2,5)
    has = []
    choose = randint(0,len(player1.hand)-1)
    value = player1.hand[choose][0]
    for card in player2.hand:
        if card[0] == value:
        has.append(card)
    for card in has:
        player2.hand.remove(card)
    for card in has:
        player1.hand.append(card)
    return_string = player1.name+" asked "+player2.name+" for "+value+"s. "
    print(return_string)
    return_string = player2.name+" had "+str(len(has))+". "
    print(return_string)
    if len(has) == 0:
        draw(player1)
        return_string = player1.name+" had to go fish."
    print(return_string)

def draw(player):
    card = fish_deck.pop()
    player.hand.append(card)

def set_check(player):
    amount = {}
    for card in player.hand:
        if card[0] not in amount.keys():
            amount[card[0]] = 1
        if card[0] in amount.keys():
            amount[card[0]] += 1
    for count in amount.keys():
        if amount[count] == 4:
            print(player.name+" got a set of "+count+"s.")
            player.sets.append(count)
            player.hand[:] = [card for card in player.hand if card[0] == count]

john = fisherman()
john.name = "John"
tim = fisherman()
tim.name = "Tim"
sara = fisherman()
sara.name = "Sara"
kris = fisherman()
kris.name = "Kris"

def play(player1, player2, player3, player4, deck):
    turn = 0
    size = 7
    dealt = 0
    order = [player1, player2, player3, player4]
    random.shuffle(order)
    while dealt < size:
        draw(order[0])
        draw(order[1])
        draw(order[2])
        draw(order[3])
        dealt += 1
    while len(deck) != 0:
        for player in order:
            count = 0
            hand = player.name+"'s hand: "
            for card in player.hand:
                if count < len(player.hand)-1:
                    hand += card[0]+" of "+card[1]+", "
                    count += 1
                elif count == len(player.hand)-1:
                    hand += card[0]+" of "+card[1]+"."
            print(hand)
            count = 0
            sets = player.name+"'s sets: "
            for set in player.sets:
                if count < len(player.sets)-1:
                    sets += set+"s, "
                elif count == len(player.sets)-1:
                    sets += set+"s."
            print(sets)
        other_player = turn
        while other_player == turn:
            other_player = random.randint(0,3)
        ask(order[turn], order[other_player])
        set_check(order[turn])
        if turn >= 3:
            turn = 0
        else:
            turn += 1
        time.sleep(10)
        print("=========================================")

play(john, tim, sara, kris, fish_deck)

【问题讨论】:

  • 与其发布整个代码,不如尝试只发布解决问题所需的最少数量。

标签: python python-3.x


【解决方案1】:
class fisherman():
    name = ""
    hand = []
    sets = []

您的所有fisherman 实例将共享相同的hand 引用,因为这些变量是类变量。如果您希望它们成为单独的实例变量,请在 __init__ 方法中创建它们。

class fisherman():
    def __init__(self):
        self.name = ""
        self.hand = []
        self.sets = []

【讨论】:

  • 与我的答案几乎相同......而且快了一分钟 +1
猜你喜欢
  • 1970-01-01
  • 2023-01-07
  • 2014-12-27
  • 1970-01-01
  • 2020-01-16
  • 2023-04-10
  • 2012-04-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多