Skip to main content

A pygame utility package that allows you to handle different screens in an organized manner.

Project description

PyPI Github Releases Downloads PyPI Downloads License Docs Versions

Game-State

A state machine for organizing different in-game screens in python.

Table of Contents

Requirements

This library supports python versions 3.8 - 3.14.

Installation

Create and activate a virtual environment in your workspace (optional) and run the following command-

pip install game_state

Note: This package does not have any dependancy on pygame, hence you will need to install them separately on your own. This gives you the freedom to work with pygame, pygame-ce or any other library.

Getting Started

This is an example of creating two screens. One displaying green colour and the other blue with a player.

import pygame
from game_state import State, StateManager
from game_state.utils import MISSING


GREEN = (0, 255, 0)
BLUE = (0, 0, 255)
speed = 200
pygame.init()
pygame.display.init()
pygame.display.set_caption("Game State Example")


class MyBaseState(State["MyBaseState"]):
    window: pygame.Surface = MISSING
    # Attributes we want all our states to share.

    def process_event(self, event: pygame.event.Event) -> None:
        pass

    def process_update(self, dt: float) -> None:
        pass


class MainMenuState(MyBaseState, state_name="MainMenu"):
    def process_event(self, event: pygame.event.Event) -> None:
        if event.type == pygame.QUIT:
            self.manager.is_running = False

        if event.type == pygame.KEYDOWN and event.key == pygame.K_w:
            self.manager.change_state("Game")

    def process_update(self, dt: float) -> None:
        self.window.fill(GREEN)
        pygame.display.update()


class GameState(MyBaseState, state_name="Game"):
    def __init__(self) -> None:
        self.player_x: float = 250.0

    def process_event(self, event: pygame.event.Event) -> None:
        if event.type == pygame.QUIT:
            self.manager.is_running = False

        if event.type == pygame.KEYDOWN and event.key == pygame.K_w:
            self.manager.change_state("MainMenu")

    def process_update(self, dt: float) -> None:
        self.window.fill(BLUE)

        pressed = pygame.key.get_pressed()
        if pressed[pygame.K_a]:
            self.player_x -= speed * dt

        if pressed[pygame.K_d]:
            self.player_x += speed * dt

        pygame.draw.rect(
            self.window,
            "red",
            (self.player_x, 100, 50, 50),
        )
        pygame.display.update()


def main() -> None:
    window = pygame.display.set_mode((500, 600))

    state_manager = StateManager(bound_state_type=MyBaseState, window=window)
    state_manager.load_states(MainMenuState, GameState)
    state_manager.change_state("MainMenu")

    clock = pygame.time.Clock()

    while state_manager.is_running:
        dt = clock.tick(60) / 1000

        for event in pygame.event.get():
            state_manager.current_state.process_event(event)

        state_manager.current_state.process_update(dt)


if __name__ == "__main__":
    main()

You can have a look at the game state guide for a more detailed explaination.

Links

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

game_state-2.4.1.tar.gz (20.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

game_state-2.4.1-py3-none-any.whl (22.0 kB view details)

Uploaded Python 3

File details

Details for the file game_state-2.4.1.tar.gz.

File metadata

  • Download URL: game_state-2.4.1.tar.gz
  • Upload date:
  • Size: 20.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for game_state-2.4.1.tar.gz
Algorithm Hash digest
SHA256 2caae9c9a3a06d40e2a3c14016f261e2eb7af9f0ef6e707e1ee04e6ec8128748
MD5 040312265adc70096f5998e923293772
BLAKE2b-256 dffcb446ca4f29bca20deed86a60181d6b9674c1905e58d14ef4b0195519df2b

See more details on using hashes here.

Provenance

The following attestation bundles were made for game_state-2.4.1.tar.gz:

Publisher: python-publish.yml on Jiggly-Balls/game-state

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file game_state-2.4.1-py3-none-any.whl.

File metadata

  • Download URL: game_state-2.4.1-py3-none-any.whl
  • Upload date:
  • Size: 22.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for game_state-2.4.1-py3-none-any.whl
Algorithm Hash digest
SHA256 6b23e4339fca2cff6bb195dfabe069e28060cdf01844fe13ee9740440be5d803
MD5 98021d2b77bde1e378962f48273a9714
BLAKE2b-256 8b0c6de7f2fa37216fbfa8e6c9b2a09203e0fe7be4fafa0ff70e055ef9c4d69b

See more details on using hashes here.

Provenance

The following attestation bundles were made for game_state-2.4.1-py3-none-any.whl:

Publisher: python-publish.yml on Jiggly-Balls/game-state

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page