Source code for hanabython.Modules.DrawPilePublic

# -*- coding: utf-8 -*-
"""
Copyright François Durand
fradurand@gmail.com

This file is part of Hanabython.

    Hanabython is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    Hanabython is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with Hanabython.  If not, see <http://www.gnu.org/licenses/>.
"""
from hanabython.Modules.Colored import Colored
from hanabython.Modules.Configuration import Configuration


[docs]class DrawPilePublic(Colored): """ The public part of a draw pile. An object of this class represents what is known by all players. In the normal version of the game and all official variants, it is only the number of cards left. :param cfg: the configuration of the game. >>> from hanabython import Configuration >>> draw_pile = DrawPilePublic(cfg=Configuration.STANDARD) >>> print(draw_pile) 50 cards left """ def __init__(self, cfg: Configuration): self.cfg = cfg self.n_cards = cfg.n_cards
[docs] def colored(self) -> str: if self.n_cards == 0: return 'No card left' if self.n_cards == 1: return '1 card left' return str(self.n_cards) + ' cards left'
[docs] def give(self) -> None: """ Give the card from the top of pile. Updates the internal variables of the pile. >>> from hanabython import Configuration >>> draw_pile = DrawPilePublic(cfg=Configuration.STANDARD) >>> print(draw_pile) 50 cards left >>> while draw_pile.n_cards >= 2: ... draw_pile.give() >>> print(draw_pile) 1 card left >>> draw_pile.give() >>> print(draw_pile) No card left """ if self.n_cards > 0: self.n_cards -= 1
if __name__ == '__main__': my_draw_pile = DrawPilePublic(Configuration.STANDARD) my_draw_pile.test_str() print('\nDraw a card: ') my_draw_pile.give() print(my_draw_pile) while my_draw_pile.n_cards >= 2: my_draw_pile.give() print('\nOnce many cards are drawn..') print(my_draw_pile) print('Draw the last card...') my_draw_pile.give() print(my_draw_pile) print('Try to draw another card...') my_draw_pile.give() print(my_draw_pile) import doctest doctest.testmod()