RPG is a 2d role-playing game. Currently in development. Core developer goals for this project are to:
- Explore game dev in Python (e.g. using Pyglet and PyGame)
- Explore UI (e.g. using PyQt5) and low-level graphics (e.g. using OpenGL, PyOpenGL) libraries
- Integrate python with low-level compiled code (e.g. C)
- Use best practices in Python packaging (e.g. adhering to PyPA, using setuptools)
- Use best development practices in CI/CD solutions and documentation (e.g. Flake8, PyTest, Tox, Travis CI, Github Actions, ReadTheDocs)
- Use best practices in OOP Design Patterns.
-
Python Game Dev
-
UI & Graphics
-
Python Bindings
-
Python Packaging
-
CI/CD and Documentation
-
OOP
-
Design Patterns:
- (Creational) Abstract Factory*; Factory Method*; Prototype
- (Structural) Composite*; Decorator*; Facade; Flyweight
- (Behavioral) State*; Chain of Responsibility; Command; Observer; Visitor; Mediator; Visitor; Strategy; Interpreter
-
Classes:
- Class constructor methods & dependency injection
- Designing subclass constructors from superclass constructors
- Composition (interface) inheritance vs. implementation inheritance
- Multiple inheritance & mix-ins
- Enumeration classes
- Importing classes
- Class destructor methods
- Types:
- Abstract
- AllowedSubclasses
- ConstructOnLoad
- Inferior classes (for overloaded graphics functions)
- Sealed
-
Fields:
- Constant properties
- Dynamic (Instance) Properties
- Static Data
- Property get/set methods
- Property events/listeners ('event.proplistener')
- Types:
- AbortSet
- Abstract
- Access
- GetAccess
- SetAccess
- Constant
- Dependent
- GetObservable
- SetObservable
- Hidden
- NonCopyable
- Transient
-
Events (& Listeners):
- Trigger events for listeners both tied and untethered to event source ('notify')
- Determine if any listeners currently exist for event ('event.haslistener')
- Deactivate and reactivate listeners
- Pass extra event data to a listener callback ('notify(obj, 'evt', evtdata)) by subclassing 'event.EventData' and adding a new property to that subclass
- Execute listeners in a specific order
- Have a listener recursively trigger the same event (via the 'Recursive' property of a listener object) - (but make sure the listener callback changes the object data in some way such that infinite recursion does not occur)
- Save and restore a listener
- Types:
- Hidden
- ListenAccess
- NotifyAccess
-
Extras:
- Save and load process for objects
- Property initialization order dependency
- Class introspection and metadata
- Class arrays and class hierarchical heterogeneous arrays
docs\: documentation and examples and development guidelinesrpg\: game source codetests\: unit and integration testschangelog.md: an up-to-date changelog describing latest features and their commitsenv.yml: dependencies file for condapyproject.toml: specifies build toolsrequirements.txt: dependencies file for pip and setuptoolssetup.py: configures and packages the source codetox.ini: tox file for running tests on package installs across environments
- Clone this repo and install package in editable mode:
- Using semantic versioning
- Contributing:
- see project organization and style guidelines
- All work should be done on feature branches. All work should be flaked and include tests. PRs from feature branches should be sent to
dev. On a new release,devis merged intomain. CI runs ondevandmain. - On any merges into
dev, the following should be updated (as necessary):readme.mddocs\- root directory config files
changelog.md
- Github Issues and Projects should be used to track and organize development.