Apr-26-2019, 07:45 PM
Why would you avoid local variables ? They help keep memory usage down. In classes it helps keep object memory smaller.
My Color Handler
My Color Handler
import pygame class Color: def __getitem__(self, key): return self.__getattr__(key) def __getattr__(self, key): if key == "keys": return pygame.color.THECOLORS.keys() return pygame.Color(key) def group(self, color_name): group = [] for name in pygame.color.THECOLORS.keys(): if color_name in name: group.append(name) return group def main(): color = Color() # Quickly call print("orange", color.orange) print("darkred", color.darkred) print() # Find all colors that include name for c in color.group('blue'): print(c, color[c]) main()Example. My color handler in action
import pygame class Color: def __getitem__(self, key): return self.__getattr__(key) def __getattr__(self, key): if key == "keys": return pygame.color.THECOLORS.keys() return pygame.Color(key) def group(self, color_name): group = [] for name in pygame.color.THECOLORS.keys(): if color_name in name: group.append(name) group.sort() return group # Simple Scene Interface class Scene: def draw(self, surface, game): pass def event(self, event, game): pass def update(self, game): pass class Game: color = Color() def __init__(self, caption, width, height): # Basic pygame setup pygame.display.set_caption(caption) self.rect = pygame.Rect(0, 0, width, height) self.surface = pygame.display.set_mode(self.rect.size) self.clock = pygame.time.Clock() self.running = False self.fps = 30 self.delta = 0 # Scene Interface self.scene = Scene() Game.info = self def mainloop(self): self.running = True while self.running: for event in pygame.event.get(): self.scene.event(event, self) self.keys = pygame.key.get_pressed() self.scene.update(self) self.scene.draw(self.surface, self) pygame.display.flip() self.delta = self.clock.tick(self.fps) class ColorShow(Scene): def __init__(self): self.colors = 'red', 'blue', 'green' self.color_position = 0 self.color_group = Game.color.group('red') self.cg_position = 0 # timer self.interval = 900 self.next_tick = pygame.time.get_ticks() self.font = pygame.font.Font(None, 32) self.render_text(Game.info) def draw(self, surface, game): surface.fill(pygame.Color(self.color_group[self.cg_position])) surface.blit(self.text, self.text_rect) def event(self, event, game): if event.type == pygame.KEYDOWN: if event.key == pygame.K_SPACE: self.color_position = (self.color_position + 1) % len(self.colors) self.color_group = Game.color.group(self.colors[self.color_position]) self.cg_position = 0 self.render_text(game) elif event.key == pygame.K_ESCAPE: game.running = False elif event.type == pygame.QUIT: game.running = False def render_text(self, game): self.text = self.font.render(self.color_group[self.cg_position], 1, pygame.Color('black')) self.text_rect = self.text.get_rect() self.text_rect.y = 10 self.text_rect.centerx = game.rect.centerx def update(self, game): ticks = pygame.time.get_ticks() if ticks > self.next_tick: self.next_tick += self.interval self.cg_position = (self.cg_position + 1) % len(self.color_group) self.render_text(game) def main(): pygame.init() game = Game("Color Show", 400, 300) game.scene = ColorShow() game.mainloop() pygame.quit() main()
99 percent of computer problems exists between chair and keyboard.