px8 / python cartridge version 1 __python__ import random DARK_GREY = 5 RED = 8 BLUE = 12 WHITE = 7 GREEN = 11 GREY = 6 BROWN = 4 LEFT_ARROW = 0 RIGHT_ARROW = 1 UP_ARROW = 2 DOWN_ARROW = 3 FONTS = [ "pico8", "bbc", "cbmII", "appleII", ] frame = 0 font_index = 0 msgs = [ ("PX8 Console", GREEN), ("ABCDEFGHIJKLMNOP", RED), ("QRSTUVWXYZ", RED), ("abcdefghijklmnop", RED), ("qrstuvwxyz", RED), ("1234567890", RED), ("!@#$%^&*()-_=+{}", RED), ("[]:;|\?/<>,.'~`", RED), ("You are standing", BLUE), ("at the end of a", BLUE), ("a road before a", BLUE), ("small brick", BLUE), ("building.", BLUE), ("arrows to switch", WHITE) ] mode_index = 0 MODES = [ (128, 128, 1.0), (256, 256, 1.0), (512, 512, 1.0), (512, 256, 1.0), (512, 256, 2.0), (512, 128, 4.0), (1024, 128, 4.0), (800, 600, 800.0/600.0), (1024, 768, 1024.0/768.0), (1920, 1200, 1920.0/1200.0), ] balls = [] MAX_BALL_SIZE = 5 NUM_BALLS = 100 class Ball: def __init__(self): screen_width, screen_height, _ = MODES[mode_index] self.x = random.random() * screen_width self.y = random.random() * screen_height self.vx = random.random() + 0.5 self.vy = random.random() + 0.5 self.size = int(random.random() * MAX_BALL_SIZE) + 1 self.color = int(random.random() * 16) def update(self): screen_width, screen_height, _ = MODES[mode_index] self.x = self.x + self.vx self.y = self.y + self.vy if self.x < 0: self.vx = abs(self.vx) if self.y < 0: self.vy = abs(self.vy) if self.x >= screen_width: self.vx = -abs(self.vx) if self.y >= screen_height: self.vy = -abs(self.vy) def draw(self): rectfill(int(self.x), int(self.y), int(self.x) + self.size, int(self.y) + self.size, self.color) def _init(): global balls mode(*MODES[mode_index]) balls = [Ball() for i in range(NUM_BALLS)] def _update(): global font_index global mode_index mode_changed = False if btnp(LEFT_ARROW): font_index = font_index - 1 if font_index < 0: font_index += len(FONTS) if btnp(RIGHT_ARROW): font_index = (font_index + 1) % len(FONTS) if btnp(DOWN_ARROW): mode_index = mode_index - 1 if mode_index < 0: mode_index += len(MODES) mode(*MODES[mode_index]) mode_changed = True if btnp(UP_ARROW): mode_index = (mode_index + 1) % len(MODES) mode_changed = True if mode_changed: mode(*MODES[mode_index]) for ball in balls: ball.update() def _draw(): width, height, _ = MODES[mode_index] if height == 128: line_height = 8 else: line_height = 10 rectfill(0, 0, width-1, height-1, DARK_GREY) for ball in balls: ball.draw() font(FONTS[font_index]) y = 0 px8_print("Mode: %dx%d (%.1f)" % MODES[mode_index], 0, y, WHITE) y += line_height px8_print("Font: %s" % FONTS[font_index], 0, y, WHITE) y += line_height for msg, color in msgs: px8_print(msg, 0, y, color) y += line_height