Skip to main content

A collection of frameworks used to display ASCII or Pygame graphics

Project description

DisplayLib

A collection of frameworks used to display ASCII or Pygame graphics in an infite world

Requires Python version >= 3.10


Submodules

  • template
  • ascii (default)
  • pygame

Networking support

DisplayLib provides mixin classes for enabling networking. Networking is available in each submodule through dl.networking (when using import displaylib.[mode] as dl).

To create a Client, use:

class MyApp(dl.Engine, dl.Client): ...

Creating a Server is as simple as:

class MyServer(dl.Engine, dl.Server): ...

Example using displaylib in ascii mode:

import displaylib.ascii as dl
# mode selected   ^^^^^


class Square(dl.Node2D, dl.Texture):
    def __init__(self, parent: dl.Node | None = None, x: int = 0, y: int = 0) -> None:
        super().__init__(parent, x, y) # the most important arguments to pass down
        self.texture = [ # you can use this style to define its visual
            [*"OO+OO"], # the "+" represents transparancy
            [*"O+++O"], # changed through `dl.Node2D.cell_transparancy`
            [*"OO+OO"]
        ]

    def _update(self, delta: float) -> None: # called every frame
        if len(self.texture[1]) == 5: # modifying the middle line
            self.texture[1].append(")")
        else:
            self.texture[1].pop()
    

class App(dl.Engine):
    def _on_start(self) -> None: # use this instead of __init__
        # -- config
        dl.Screen.cell_transparant = "+" # represents transparancy
        dl.Screen.cell_default = "." # changes background default
        # -- create nodes
        self.my_square = Square(x=5, y=3)
        # nodes are kept alive by `Node.nodes` (dict) by default
        # this means `del self.my_square` is needed to fully free it
        self.direction = 1
    
    def _update(self, delta: float) -> None: # called every frame
        if self.direction == 1:
            self.my_square.position.x += 1
            if self.my_square.position.x == 22:
                self.direction = -1
        elif self.direction == -1:
            self.my_square.position.x -= 1
            if self.my_square.position.x == 4:
                self.direction = 1

if __name__ == "__main__":
    # autorun on instance creation
    app = App(tps=4, width=24, height=8)

Example using displaylib in pygame mode:

import displaylib.pygame as dl
# mode selected   ^^^^^^
import pygame # import pygame

import random
import math


class Cirlce(dl.Node2D):
    def __init__(self, parent: dl.Node | None = None, x: int = 0, y: int = 0) -> None:
        super().__init__(parent, x, y)
        self.radius = 20
        self.width = 2
        self.time_elapsed = 0.0
    
    def _update(self, delta: float) -> None:
        self.time_elapsed += delta
        self.width = round(math.cos(self.time_elapsed) * 3 +5)
    
    def _render(self, surface: pygame.Surface) -> None:
        pygame.draw.circle(surface, (200, 50, 255), (self.position.x, self.position.y), self.radius, self.width)


class App(dl.Engine):
    def _on_start(self) -> None:
        print("= Started Pygame program")
        self.circle = Cirlce(x=200, y=100)
        self.elapsed_time = 0.0
    
    def _update(self, delta: float) -> None:
        self.circle.position = dl.Vec2(
            math.cos(self.elapsed_time) * 50,
            math.sin(self.elapsed_time) * 50
        ) + dl.Vec2i(200, 100)
        self.elapsed_time += delta
    
    def _render(self, surface: pygame.Surface) -> None:
        pygame.draw.line(surface, color=(random.randint(0, 255), random.randint(0, 255), random.randint(0, 255)), start_pos=(50, 50), end_pos=(200, 100), width=5)


if __name__ == "__main__":
    app = App("Pygame example using DisplayLib")

Project details


Download files

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

Source Distribution

displaylib-0.0.7.tar.gz (26.2 kB view details)

Uploaded Source

File details

Details for the file displaylib-0.0.7.tar.gz.

File metadata

  • Download URL: displaylib-0.0.7.tar.gz
  • Upload date:
  • Size: 26.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.10.8

File hashes

Hashes for displaylib-0.0.7.tar.gz
Algorithm Hash digest
SHA256 3df171a7085bcc570094f7571abb163d7c71db03b5bd424588df2df9a5e6f16e
MD5 d965c7c9ffb7014a6f4665f9b1138e65
BLAKE2b-256 e278f031797802ce3fb15dc806e9add90b8e268d6b7d5fcef5d2a29e4330c30c

See more details on using hashes here.

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