Форум сайта python.su
Добрый вечер, я новичок и занимаюсь самообучением и есть задачка, часть я сделал, часть мне помогли, а часть осталась. Был бы рад если бы вы могли помочь и объяснить что и как.
Вот условия:
Есть 4 класса и потом по ним надо запустить программу.
1.Класс Card. Включает в себя value и suit.
Value 1-13, когда 1-это туз, 2-10 - это 2-10, 11 - это валет, 12 - это королева, 13 - это король. Большее бьет меньшее, туз бьёт всех остальных.
Когда value карт равны смотрят на suit.
Suit 1-4, когда 1-это бубны, 2-это пики,3-это червы, 4-это трефы. Большее бьет меньшее.
Две методы у этого класса:
init что получает value и suit
gt что получает карту и сравнивает её с существующей картой. Если существующая карта выше - возвращаетTrue, если нет- False.
2_Класс Deck
Характеристика класса: включает в себя целую колоду карт - 13 каждого вида, всего 52.
Это будет список/лист Cards
Методы:
cards_shuffle случайный образом перемешивает карты(можно использовать функцию shuffle) метода не получит ничего и ничего не вернет.
init что загрузит целую колоду, то есть создаст целую колоду из 52 карт.
deal_one вытянет одну случайную карту из колоды, должна вернуть(реторн) карту что она вытащила.
3)Класс Player
Характеристики класса: Имя, колода карт игрока и количество карт что игрок получит. количество карт решится в с началом новой игры и по умолчанию будет 26.
Можно будет поменять что количество карт будет другим, в лбом случае количество карт не будет больше 26 и меньше 10.
Методы:
init получит имя игрока и количество карт что нужно раздать каждому игроку(по умолчанию 26, если получит больше 26 или меньше 26, будет 26) Метода загрузит колоду карт игрока как чистый лист.
set_hand - получает колоду карт игры(из deck) г раздает из нее случайные карты для игрока, по количество карт которые этот игрок должен получить. Использовать методу deal_one. метода ничего не возвращает(реторн)
get_card вытаскивает случайную карту и колоды игрока, метода реторн карту что вытащила.
add_card - метода получает карту и добавляет ее в колоду карт игрока. Ничего не реторн.
4) класс CardGame.
Характеристики класса: колода карт (типа DecOfCards) и 2 игрока(типа Player).
Методы класса:
1. _init_ получает имена игроков и количество карт которые нужно распределить каждому игроку(.по умолчанию 26, если получает число выше, чем 26 или ниже 10, число будет равняться 26) Метод вызовет метод newgame в разделе 2: ==>
2. Метод new_game которая размешает колоду и раздаст карты игрокам. Нужно использовать подходящие методы из классов. Метод ничего не возвращает. Метод должен вызываться только из Констрактор. Если по какой-либо причине, метод объявляется после того, как игра уже началась, он распечатает «Ошибка» и ничего не выполнит.
3. Метод get_winner который возвращает победителя из игроков. Победителем является игрок, оставшийся с наибольшим количеством карт и если количество карт одинаковое у обоих игроков, он вернет None
5) Сама программа. Получает имена игроков и начинает новую игру с 26 картами на каждого игрока. В начале игры программа print для каждого игрока его имя и карты что он получил.
а) После начала игры, программа сыграет 10 раундом игры Пьяница.
б)В каждом раунде игрок кидает случайную карту из его колоды.
в)Игрок с самой большой картой побеждает и берет себе две другие карты из тех что выпали у других игроков.
г) Распечатай карты что были в каждом раунде и победитель каждого раунда.
В конце игры распечатай данные игрока что выиграл в игре, если была ничья - распечатай ничью.
Офлайн
Вот тут что вышло пока, хотелось бы узнать если это должно работать и если бы вы могли написать программу что под номером 5 в первом посте.
import random class Card: def __init__(self, value, suit): self.value = value self.suit = suit def __gt__(self, card): if self.value == card.value: return self.suit > card.suit if self.value == 1: return True if card.value == 1: return False return self.value > card.value def __str__(self): return f"{self.value},{self.suit}" class DeckOfCards: def __init__(self): self.cards = [] for value in range(1, 13+1): for suit in range(1, 4+1): self.cards.append(Card(value, suit)) def cards_shuffle(self): random.shuffle(self.cards) def deal_one(self): return self.cards.pop(random.randrange(1, len(self.cards)-1)) def __str__(self): return f"{self.cards}" class Player: def __init__(self, name, cards_quantity=26): self.name = name self.cards_quantity = cards_quantity self.cards = [] def __str__(self): return f"{self.name},{self.cards_quantity},{self.cards}" def set_hand(self, deck: DeckOfCards): for i in range(1, self.cards_quantity+1): self.cards.append(deck.deal_one()) def get_card(self): return self.cards.pop(random.randrange(1, len(self.cards)-1)) def add_card(self, card: Card): self.cards.append(card) class CardGame: deck: DeckOfCards player1: Player player2: Player def __init__(self, player1:Player, player2:Player, cards_quantity): self._game_started = False self.cards_quantity_ = cards_quantity if 10 < cards_quantity < 26 else 26 self.new_game() def new_game(self): if self._game_started: raise Exception("No honey, the game has already begun") self.deck = DeckOfCards() self.deck.cards_shuffle() self.player1 = Player("May", 26) self.player1.set_hand(self.deck) self.player2 = Player("Kay", 26) self.player2.set_hand(self.deck) [/b]
Отредактировано EugenPython (Янв. 10, 2022 20:18:14)
Офлайн
EugenPythonРановато ты начал с объектами. Класс CardGame задаёт класс карточных игр. Вряд ли ты это понимаешь. Следовательно, экземпляром этого класса является объект, имеющий состояние, который взаимодействует с другими объектами через доставку сообщений от себя к ним и от них к себе (выполнение операций над ними со своей стороны и над собой с их стороны). Вряд ли ты это понимаешь. Поэтому одинаковые объекты игроки из класса всех игроков и объект колода из класса всех колод должны не принадлежать композиционно объекту карточная игра из класса всех карточных игр, а взаимодействовать с ним со стороны, так как при завершении жизни объекта карточная игра как игроки, так и колода остаются существовать, а не умирают вместе с карточной игрой, и их можно задействовать в другой карточной игре, просто переставив их состояния в начало. Вряд ли ты это понимаешь.
я новичок и занимаюсь самообучением
Отредактировано py.user.next (Янв. 10, 2022 23:33:48)
Офлайн