The project consists of two parts: (1) redesigning the sprite models and (2) implementing a basic scene/state system support.
The parts of Pygame that currently handle the Sprite objects, while very fundamental for any use of the library, are reportedly not as generic and as feature-full as they should be.
The project would revolve around redesigning and rewriting the core code of the Sprite class to fit the needs described by the community, and to add some system-wide functionality.
Research is required in order to decide on an optimal design pattern for sprites and sprite groups, that would make use of inheritance and would result in a solid generalized base set of classes. This design should also allow users the flexibility of extending and customizing sprites behavior.
The sprite and sprite group classes rewritten in a more generalized manner.
Features that are currently only implemented in some types of sprites (i.e. grouping and collision detecting) rewritten as generic features, provided for all sprite types.
New general features for sprites that were (and will be) suggested by the community;
Easier positioning methods (ability to use a position tuple instead of rects),
Anchor points,
An improved layering system,
Smarter dirty rendering (detecting changes in sprites to automatically mark them as dirty),
Aggregated sprites object implementing the sprite interface,
Other features suggested and found in research.
Pygame currently does not offer any higher level entity that organizes visual objects by game state and logic.
This could be done by implementing a Scene module that would represent a distinct section of the game. As such, it would contain all related sprites encapsulated in this section, and would allow running common actions on them, such as rendering and logic updating (through a Composite or similar pattern).
A scene would also define some events, such as “scene start” and “scene end”. These events would be fired by a new external Director module that would define the game workflow and the relation between scenes.
Research is needed here to decide on a particular design that would be both simple to grasp and maintain, and also memory efficient.
Deliverables:
A stable set of classes implementing the Director/Scene workflow.
Documentation explaining the internal design and the way to use it.