Здравствуйте! Создаю игру "пьяница", которая автоматически раздаёт карты игрокам и определяет победителя. Вот мой код:
card.py"""карта"""
class Card:
suits = ["пикей","червей","бубей","треф"]
values = [None, None, "2", "3", "4", "5",
"6", "7", "8", "9", "10",
"валета", "даму", "короля", "туза"]
"""в values первые 2 None для удобной индексации
аля 10=10, 11=Валет, 14=Туз и т.д. """
def __init__(self, v, s):
"""suit и value - целые числа"""
self.value = v
self.suit = s
def __lt__(self, c2):
if self.value < c2.value:
return True
if self.value == c2.value:
if self.suit < c2.suit:
return True
else:
return False
def __gt__(self, c2):
if self.value > c2.value:
return True
if self.value == c2.value:
if self.suit > c2.suit:
return True
else:
return False
def __repr__(self):
""" ex: тройка треф, валет червей """
v = self.values[self.value] + " " \
+ self.suits[self.suit]
return v
deck_of_card.py""" Колода карт """
from random import shuffle, SystemRandom, randint, choice
from card import Card
class Deck:
def __init__(self):
self.cards = []
for i in range(2,15):
for j in range(4):
self.cards.append(Card(i,j))
shuffle(self.cards)
"""ГДЕ-ТО ЗДЕСЬ, Я ДУМАЮ, ОШИБКА """
def rm_card(self):
""" даёт игроку последнюю карту из колоды """
if len(self.cards) == 0:
return
return self.cards.pop()
# пробовал self.cards.pop(self.cards.index(choice(self.cards)))
player.py class Player:
""" Игрок имеет имя
побед по умолчанию - 0
карты пока что нет """
def __init__(self, name):
self.wins = 0
self.card = None
self.name = name
game.py """Игра пьяница"""
from card import Card
from deck_of_cards import Deck
from player import Player
class Game:
def __init__(self):
name1 = input('имя игрока 1: ')
name2 = input('имя игрока 2: ')
self.deck = Deck() # получаем тасованную колоду карт
self.p1 = Player(name1)
self.p2 = Player(name2)
def wins(self, winner):
w = "{} забирает карты"
w = w.format(winner)
print(w)
def draw(self, p1n, p1c, p2n, p2c):
d = "{} кладет {}, а {} кладёт {}"
d = d.format(p1n, p2c, p2n, p2c)
print(d)
def winner(self, p1, p2):
"""определяет победителя"""
if p1.wins > p2.wins:
return p1.name
if p2.wins < p2.wins:
return p2.name
if p1.wins == p2.wins:
p = "Ничья! Никто не"
return p
def play_game(self):
cards = self.deck.cards
print("Let's go!")
m = """Нажмите X для выхода.
Нажмите любую другую клавишу для начала игры. """
response = input(m)
if response.upper() == 'X':
return
while len(cards) >= 2:
p1c = self.deck.rm_card() # берёт последнюю карту из колоды
p2c = self.deck.rm_card() # БЕРЁТ ПРЕДЫДУЩУЮ КАРТУ ПОЧЕМУ ТО
p1n = self.p1.name
p2n = self.p2.name
self.draw(p1n, p2c, p2n, p2c) #вызов метода draw внутри класса
if p1c > p2c:
self.p1.wins += 1
self.wins(self.p1.name) #вызов метода wins внутри класса
elif p1c < p2c:
self.p2.wins += 1
self.wins(self.p2.name)
win = self.winner(self.p1, self.p2)
print ("Игра окончена. {} выиграл".format(win))
game1 = Game()
game1.play_game()
При создании игры игрокам раздаются одни и те же карты, хотя метод pop() при каждом вызове должен возвращать отличное от предыдущего значения.
Помогите, пожалуйста, разобраться, в чём проблема?