Last active
September 6, 2018 16:53
-
-
Save jdmichaud/814ff322e9ec68a0b5f3d4689b7db2c9 to your computer and use it in GitHub Desktop.
Simple pygame example
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import sys | |
import pygame | |
# Something that look like object literal | |
class Object: | |
def __init__(self, **kwds): | |
self.__dict__.update(kwds) | |
g_event_map = {} | |
def addEventListener(event, handler): | |
g_event_map[event] = handler | |
def removeEventListener(event, handler): | |
del g_event_map[event] | |
def eventLoop(*args): | |
while True: | |
for event in pygame.event.get(): | |
if event.type in g_event_map: | |
if (g_event_map[event.type](event)): | |
draw(*args) | |
def quit(event): | |
pygame.display.quit() | |
pygame.quit() | |
sys.exit() | |
def keyDown(event): | |
print(event) | |
if event.key == 27: | |
quit(event) | |
def mouseDown(event): | |
print(event) | |
def mouseUp(event): | |
print(event) | |
def mouseMove(event, model): | |
print(f'mouseMove {event} {model.pos.x} {model.pos.y}') | |
model.pos.x = event.pos[0] - 10 | |
model.pos.y = event.pos[1] - 10 | |
return True | |
def init(size): | |
pygame.init() | |
return pygame.display.set_mode(size) | |
def draw(model): | |
model.screen.fill((0, 0, 0)) | |
model.pxarray[model.pos.x, model.pos.y] = 0xFF00FF | |
pygame.display.flip() | |
def test(): | |
size = width, height = 512, 512 | |
screen = init(size) | |
pxarray = pygame.PixelArray(screen) | |
pos = Object(x=10, y=10) | |
model = Object( | |
screen=screen, | |
pxarray=pxarray, | |
pos=pos | |
) | |
draw(model) | |
addEventListener(pygame.QUIT, quit) | |
addEventListener(pygame.MOUSEBUTTONDOWN, mouseDown) | |
addEventListener(pygame.MOUSEBUTTONUP, mouseUp) | |
addEventListener(pygame.MOUSEMOTION, lambda event: mouseMove(event, model)) | |
addEventListener(pygame.KEYDOWN, keyDown) | |
eventLoop(model) | |
if __name__ == "__main__": | |
test() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment