Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 10, 2022 19:43:32

EugenPython
Зарегистрирован: 2022-01-10
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите пожалуйста с задачей, буду очень благодарен.

Добрый вечер, я новичок и занимаюсь самообучением и есть задачка, часть я сделал, часть мне помогли, а часть осталась. Был бы рад если бы вы могли помочь и объяснить что и как.
Вот условия:
Есть 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 раундом игры Пьяница.
б)В каждом раунде игрок кидает случайную карту из его колоды.
в)Игрок с самой большой картой побеждает и берет себе две другие карты из тех что выпали у других игроков.
г) Распечатай карты что были в каждом раунде и победитель каждого раунда.

В конце игры распечатай данные игрока что выиграл в игре, если была ничья - распечатай ничью.

Офлайн

#2 Янв. 10, 2022 19:45:43

EugenPython
Зарегистрирован: 2022-01-10
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите пожалуйста с задачей, буду очень благодарен.

Вот тут что вышло пока, хотелось бы узнать если это должно работать и если бы вы могли написать программу что под номером 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)

Офлайн

#3 Янв. 10, 2022 23:30:52

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9731
Репутация: +  843  -
Профиль   Отправить e-mail  

Помогите пожалуйста с задачей, буду очень благодарен.

EugenPython
я новичок и занимаюсь самообучением
Рановато ты начал с объектами. Класс CardGame задаёт класс карточных игр. Вряд ли ты это понимаешь. Следовательно, экземпляром этого класса является объект, имеющий состояние, который взаимодействует с другими объектами через доставку сообщений от себя к ним и от них к себе (выполнение операций над ними со своей стороны и над собой с их стороны). Вряд ли ты это понимаешь. Поэтому одинаковые объекты игроки из класса всех игроков и объект колода из класса всех колод должны не принадлежать композиционно объекту карточная игра из класса всех карточных игр, а взаимодействовать с ним со стороны, так как при завершении жизни объекта карточная игра как игроки, так и колода остаются существовать, а не умирают вместе с карточной игрой, и их можно задействовать в другой карточной игре, просто переставив их состояния в начало. Вряд ли ты это понимаешь.

Поэтому ты, конечно, молодец, что пытаешься познать новое, но тебе ещё рановато работать с объектами, потому что ты ещё ничего не знаешь про это. Надо много чего читать.

Где процесс жизни объекта “карточная игра”? Я вот его у тебя не наблюдаю. Видимо, ты про него и не в курсе даже. У каждого объекта есть процесс жизни в течение которого у него меняются состояния с одного на другое. Поэтому, чтобы сформулировать игру целиком, тебе нужно построить все эти процессы в виде объектной модели, где объекты живут от точки до точки и друг с другом взаимодействуют через сообщения, посылаемые друг другу. Ничего такого я у тебя не наблюдаю. Как будто просто мёртвая пустыня, в которой ничего не происходит.



Отредактировано py.user.next (Янв. 10, 2022 23:33:48)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version