PursuedPyBear, also known as
ppb, exists to be an educational
resource. Most obviously used to teach computer science, it can be a
useful tool for any topic that a simulation can be helpful.
At its core,
ppb provides a number of features that make it perfect
for video games. The
GameEngine itself provides a pluggable subsystem
architecture where adding new features is as simple as subclassing and
System. Additionally, it contains a state stack of
simple containers that let you organize game scenes and UI screens in a
The entire system uses an event system which is as extensible as the
rest of the system. Register new values to existing event types, and
even overwrite the defaults. Adding a new event type to the system is as
simple as firing an instance of your new event class with
Instead of a publisher system, the engine knows everything in its own scope
and only calls objects with appropriate callbacks. The most basic event is
Update and your handlers should match the signature
on_update(self, update_event, signal).
ppb started to be a game framework great for learning with,
the project has a few longterm goals:
Non-technical educators should feel comfortable after very little training. While some programming knowledge is required, the ability to think in objects and responses to events allows educators to only focus on their lessons.
A project built on
ppb should look like idiomatic Python. It also
should look like modern Python. As such, we often add new language
features as soon as they’re available, letting a new user always know
ppb runs on the latest Python.
ppb games are built out of instances of objects that inherit from
EventMixin. Each object only has enough information to respond to the
event provided, which always includes the current
ppb doesn’t have a master list of events, you can provide new ones
simply to add more granular control over your game.
ppb strongly tries to be extensible and pluggable, each
hardware extension can provide its own hooks to
ppb, and you can
nearly seamlessly switch between various Python libraries.
One of the maintainers put it best:
If it’s not fun to use, we should redo it
ppb is about filing off the rough edges so that the joy of creation and discovery are both emphasized. A new user should be able to build their first game in a few hours, and continue exploring beyond that.
Install ppb in the standard method:
pip install ppb
ppb provides a
run function that makes it simple to start single
To make a very simple game, make a directory and add an image file
ship.png to it. Then add the following to a python file and
import ppb class Ship(ppb.BaseSprite): def on_update(self, update_event, signal): self.position += 0, -(4 * update_event.time_delta) def setup(scene): scene.add(Ship(pos=(0, 3.5))) ppb.run(setup=setup)
ppb is guaranteed compatible with Python 3.6 or later.
The fastest way to get involved is to check out the ongoing
If you’re already using
ppb feel free to report bugs, suggest
enhancements, or ask for new features.
If you want to contribute code, definitely read the relavant portions of Contributing.MD
The bear in the logo is named Binny, and we have some facts about them
There have been problems found sometimes with the latest MacOS (Mojave) and PyGame 1. Specifically, it’ll look black until the user interacts with the window.
The big headline is the Asset Revamp. Instead of just passing around strings (and the whole resource path concept), actual
Asset objects are given to systems. (api reference,
Good news, everyone! A release cycle has come to a close, resulting in
and (drumroll please),
ppb-vector v1.0, a stable release!
0.6.0b1 is now out! Want to try our new Animation feature?
Ok, so the PPB project has had a bit of a problem where we go too long between releases, and as the pile of unreleased features and changes grows, we get the question:
The development team has been hard at work improving
ppb-vector, but we reached a place where
releasing a new version of
ppb-vector would break
ppb. So we’ve pinned
ppb-vector in 0.5.1
to the prerelease versions of
ppb-vector. Congrats, your code should just keep working!
We went for a smaller release, but we got a lot done for it only being a few months. The most important bits are that all of the input events are in! Some cool stuff includes sprites scaling automatically and a new way to move between scenes that uses the event system. That means the old method is officially deprecated.