BoardGameBuilder
!!! Project now is in very early stage.

Object-oriented framework for build board game logic in python
pip install bgameb
Short example
from typing import Optional
from pydantic import Field
from bgameb import (
Game,
Components,
Player,
Steps,
Step,
Deck,
Card,
Shaker,
Dice,
log_enable
)
if __name__ == '__main__':
log_enable()
class MyPlayer(Player):
deck: Deck
class MyGame(Game):
steps: Steps
shaker: Shaker
me: MyPlayer
opp: MyPlayer
C = Components[Dice | Card | Step]()
G = MyGame(
id="my game",
steps=Steps(id="game steps"),
shaker=Shaker(id="dice shaker"),
me=MyPlayer(
id='Me',
deck=Deck(id="my cards deck")
),
opp=MyPlayer(
id='Opponent',
deck=Deck(id="opponent cards deck")
)
)
C.step0 = Step(id='step0')
C.step1 = Step(id='step1', priority=1)
current_steps = G.steps.deal(C)
last = G.steps.pops()
C.update(
Card(id='First', description='story', count=2)
)
C.update(Card(id='Second', count=1))
card = C.first
card = C['first']
step = C.step0
card = C.by_id('First')
class MyCard(Card):
description: Optional[str] = Field(None, alias='some_bla_bla')
some_text: Optional[str] = 'some texts'
class Config(Card.Config):
fields = {'is_revealed': 'is_open'}
@property
def my_calculated_field(self) -> str:
return self.some_text.upper()
C.update(
MyCard(id='Thierd', description='story', count=3)
)
G.me.deck._counter['yellow'] = 12
G.me.deck._counter['banana'] = 0
G.me.deck.deal(C).shuffle()
C.update(
Dice(id='dice#8', sides=8, count=10)
)
G.shaker.deal(C)
result = C.dice_8.roll()
result = G.shaker.roll()
Documentation
Development
how install project for development.
Typicaly: pip install -e .[dev]
Available cli
make proj-doc
make test
to check simple scenario use python tests/check.py
make test-pypi
to test deploy to testpypi
make log
- insert fragmet name to store new about project
make ipython
run interactive terminal
make check
check flake8 and mypy
Available fragmet naming:
- .feature: Signifying a new feature.
- .bugfix: Signifying a bug fix.
- .doc: Signifying a documentation improvement.
- .removal: Signifying a deprecation or removal of public API.
- .misc: A ticket has been closed, but it is not of interest to users.
make draft
- to check changelog output before release.
make release
- to bump version, build changelog, commit, push tags and changes.
* for version management are used incremental and towncrier for changelog
* project based on pydantic