Last active
September 10, 2015 02:20
-
-
Save Mekire/ad15a1d3834fbeb7e6a5 to your computer and use it in GitHub Desktop.
This file contains 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 random | |
import pygame as pg | |
from string import ascii_uppercase | |
SCREEN_SIZE = (500, 500) | |
CAPTION = "Letter Tiles" | |
BACKGROUND_COLOR = pg.Color("darkslategray") | |
class LetterTile(pg.sprite.Sprite): | |
SIZE = (50, 50) | |
def __init__(self, letter, pos, *groups): | |
super(LetterTile, self).__init__(*groups) | |
self.letter = letter | |
self.image = self.make_image(letter) | |
self.rect = self.image.get_rect(topleft=pos) | |
self.clicked = False | |
def make_image(self, letter): | |
image = pg.Surface(LetterTile.SIZE).convert() | |
rect = image.get_rect() | |
image.fill(pg.Color("black")) | |
image.fill(pg.Color("beige"), rect.inflate(-4, -4)) | |
letter = FONT.render(letter, True, pg.Color("black")) | |
letter_rect =letter.get_rect(center=rect.center) | |
image.blit(letter, letter_rect) | |
return image | |
def check_click(self, pos): | |
hit = self.rect.collidepoint(pos) | |
self.clicked = hit | |
return hit | |
def update(self, screen_rect): | |
if self.clicked: | |
self.rect.move_ip(pg.mouse.get_rel()) | |
self.rect.clamp_ip(screen_rect) | |
def draw(self, surface): | |
surface.blit(self.image, self.rect) | |
class App(object): | |
def __init__(self): | |
self.screen = pg.display.get_surface() | |
self.screen_rect = self.screen.get_rect() | |
self.clock = pg.time.Clock() | |
self.fps = 60 | |
self.done = False | |
self.dragging = False | |
self.tiles = self.make_tiles() | |
def make_tiles(self): | |
tiles = pg.sprite.Group() | |
for letter in ascii_uppercase: | |
pos = (random.randrange(self.screen_rect.w), | |
random.randrange(self.screen_rect.h)) | |
LetterTile(letter, pos, tiles) | |
return tiles | |
def event_loop(self): | |
for event in pg.event.get(): | |
if event.type == pg.QUIT: | |
self.done = True | |
elif event.type == pg.MOUSEBUTTONDOWN and event.button == 1: | |
self.on_mouse_down(event) | |
elif event.type == pg.MOUSEBUTTONUP and event.button == 1: | |
self.on_mouse_up(event) | |
def on_mouse_down(self, event): | |
for tile in self.tiles: | |
if not self.dragging and tile.check_click(event.pos): | |
self.dragging = True | |
pg.mouse.get_rel() | |
break | |
def on_mouse_up(self, event): | |
for tile in self.tiles: | |
tile.clicked = False | |
self.dragging = False | |
def update(self): | |
self.tiles.update(self.screen_rect) | |
def render(self): | |
self.screen.fill(BACKGROUND_COLOR) | |
self.tiles.draw(self.screen) | |
pg.display.update() | |
def main_loop(self): | |
while not self.done: | |
self.event_loop() | |
self.update() | |
self.render() | |
self.clock.tick(self.fps) | |
def main(): | |
global FONT | |
pg.init() | |
pg.display.set_caption(CAPTION) | |
pg.display.set_mode(SCREEN_SIZE) | |
FONT = pg.font.Font(None, 50) | |
App().main_loop() | |
pg.quit() | |
sys.exit() | |
if __name__ == "__main__": | |
main() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment