Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

PursuedPyBear

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.

A Game Engine

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 extending System. Additionally, it contains a state stack of Scenes simple containers that let you organize game scenes and UI screens in a simple way.

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 system is as simple as calling Engine.signal with a new datatype. 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).

Guiding Principles

Because ppb started to be a game framework great for learning with, the project has a few longterm goals:

Education Friendly

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.

Idiomatic Python

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.

Object Oriented and Event Driven

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 BaseScene. Because ppb doesn't have a master list of events, you can provide new ones simply to add more granular control over your game.

Hardware Library Agnostic

Because 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.

Fun

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.

Try it

Install ppb in the standard method:

pip install ppb

ppb provides a run function that makes it simple to start single screen games.

To make a very simple game, make a directory and add an image file called ship.png to it. Then add the following to a python file and run it.

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(scene_kwargs={"set_up": setup})

Compatibility

ppb is guaranteed compatible with Python 3.6 or later.

Get Involved

The fastest way to get involved is to check out the ongoing discussions. 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

Change Log

0.5.0

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.

New stuff:

  • MouseButton events
  • Key events
  • Add a title to the game window
  • Sprite scaling based on game unit size
  • Keycodes flags
  • New scene change mechanism that uses the event system

Changed stuff:

  • Scene defaults are now class attributes
  • Most Sprite defaults are now class attributes
  • Flags can now be type hinted properly
  • Scenes no longer infinitely respawn their child scenes if running is True.
  • Fixed an issue with the frame being different dimensions to the viewport.
  • Fixed a bug in the Camera.point_in_viewport function
  • Default pixel ratio is now 64:1 (64 pixels to 1 game unit)
  • New (better) run function
  • Other type hinting fixes

Removed stuff:

  • bb attribute removed from sprites

Release files for ppb 0.5.0rc3

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for ppb 0.5.0rc3
File Size Uploaded
ppb-0.5.0rc3.tar.gz 19.9 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for ppb 0.5.0rc3
File Interpreter ABI Platform
ppb-0.5.0rc3-py3-none-any.whl Python 3 none any Details

Total release size: 42.9 kB

Release files / ppb-0.5.0rc3.tar.gz

Download URL ppb-0.5.0rc3.tar.gz
Size 19.9 kB
Tags Source
SHA-256 checksum
How to use checksums
a255a4692889693c303454085bd52c938d23bd2b26137a2eecb96373a9de28bc
BLAKE2b-256 checksum
How to use checksums
438cf19155a4bba8eeeb25ececaa14233f7055a242458722890a57e8f681c578
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/1.11.0 pkginfo/1.4.2 requests/2.19.1 setuptools/40.4.1 requests-toolbelt/0.8.0 tqdm/4.26.0 CPython/3.7.0

Release files / ppb-0.5.0rc3-py3-none-any.whl

Download URL ppb-0.5.0rc3-py3-none-any.whl
Size 23.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
fc7393824755b57f9277a47d2392a001f5c178ae9f9c824be818fb943bb801bf
BLAKE2b-256 checksum
How to use checksums
c41c5f84d5ef19b2a9ad0d8de0739c5b97351ed28ee83a28eb289a3fa6aadc70
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/1.11.0 pkginfo/1.4.2 requests/2.19.1 setuptools/40.4.1 requests-toolbelt/0.8.0 tqdm/4.26.0 CPython/3.7.0

Release history Release notifications | RSS feed

3.2.0

2 release files

1.1

2 release files

1.0

2 release files

0.12.0

2 release files

0.11.0

2 release files

0.9.0

2 release files

0.8.0

2 release files

0.7.0

2 release files

0.6.0

2 release files

0.5.1

2 release files

0.5.0

2 release files

This release

0.5.0rc3 This release

2 release files

0.4.1

2 release files

0.4.0

2 release files

0.3.0

1 release file

0.2.0

1 release file

0.1.0

1 release file

0.1

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page