From 005a8fb30e10dc2b31e31ada4c8fd47114524e4e Mon Sep 17 00:00:00 2001 From: Leah Alpert Date: Mon, 29 Aug 2011 17:46:45 -0700 Subject: Removed repetitive drawing bug in renderer --- renderer.py | 57 ++++++++++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 46 insertions(+), 11 deletions(-) diff --git a/renderer.py b/renderer.py index bd141c8..0d79dd3 100644 --- a/renderer.py +++ b/renderer.py @@ -17,7 +17,7 @@ class Renderer(object): def color_deref(self, color_str): return Color(color_str) -class PygameRenderer(Renderer): +class PygameGoodRenderer(Renderer): """ Based heavily off of PygameRenderer in SmootLight. Renders Tetris to a @@ -57,17 +57,52 @@ class PygameRenderer(Renderer): disp_x = x if x >= 10: disp_x+=3 - x0 = self.OFFSET[0] - self.SCALE/2 - 3 - y0 = self.OFFSET[1] - 10 - x1 = self.OFFSET[0]+8 + 9*self.SCALE - y1 = self.OFFSET[1]+8 + 19*self.SCALE - b2 = self.SCALE * 13 #x offset for second board - line_endpoints = [((x0,y0), (x0,y1)), ((x0,y1), (x1,y1)), ((x1,y1), (x1,y0)), ((x1,y0), (x0,y0)), - ((x0,y1 - 16), (x1,y1 - 16)), ((x0,y1 - 31), (x1,y1 - 31))] - for p1,p2 in line_endpoints: - pygame.draw.line(self.background, self.color_deref("white"), p1, p2) - pygame.draw.line(self.background, self.color_deref("white"), (p1[0]+b2,p1[1]),(p2[0]+b2,p2[1])) + pygame.draw.rect(self.background, self.color_deref(game_board[(x,y)]), + (self.OFFSET[0] + disp_x*self.SCALE, self.OFFSET[1] + y*self.SCALE, self.SCALE, self.SCALE)) + self.screen.blit(self.background, (0,0)) + pygame.display.flip() + +class PygameRenderer(Renderer): + + """ + Based heavily off of PygameRenderer in SmootLight. Renders Tetris to a + pygame Window. + """ + + DISPLAY_SIZE = (1000,1000) + OFFSET = (100, 100) + SCALE = 15 + RADIUS = 6 + + def __init__(self): + pygame.init() + self.screen = pygame.display.set_mode(self.DISPLAY_SIZE) + self.background = pygame.Surface(self.screen.get_size()) + self.background = self.background.convert() + self.background.fill(Color(0,0,0)) + + def render_game(self, game_board): + self.background.fill(Color(0,0,0)) + x0 = self.OFFSET[0] - self.SCALE/2 - 3 + y0 = self.OFFSET[1] - 10 + x1 = self.OFFSET[0]+8 + 9*self.SCALE + y1 = self.OFFSET[1]+8 + 19*self.SCALE + b2 = self.SCALE * 13 #x offset for second board + line_endpoints = [((x0,y0), (x0,y1)), ((x0,y1), (x1,y1)), ((x1,y1), (x1,y0)), ((x1,y0), (x0,y0)), + ((x0,y1 - 16), (x1,y1 - 16)), ((x0,y1 - 31), (x1,y1 - 31))] + for p1,p2 in line_endpoints: + pygame.draw.line(self.background, self.color_deref("white"), p1, p2) + pygame.draw.line(self.background, self.color_deref("white"), (p1[0]+b2,p1[1]),(p2[0]+b2,p2[1])) + + x_mid = (x0+x1)/2 + self.SCALE + pygame.draw.line(self.background, self.color_deref("white"), (x_mid,y1 - 16),(x_mid,y1 - 31)) + pygame.draw.line(self.background, self.color_deref("white"), (x_mid+b2,y1 - 16),(x_mid+b2,y1 - 31)) + + for (x,y) in game_board: + disp_x = x + if x >= 10: + disp_x+=3 pygame.draw.circle(self.background, self.color_deref(game_board[(x,y)]), (self.OFFSET[0] + disp_x*self.SCALE, self.OFFSET[1] + y*self.SCALE), self.RADIUS) -- cgit v1.2.3