import pygame from pygame.locals import * from elements import * import time BACKGROUND = (0,0,0) BRUSHSIZE = 3 running = True width = 200 height = 200 size = (width, height) PIXELSIZE = 2 screensize = (PIXELSIZE*width, PIXELSIZE*height) screen = pygame.display.set_mode(screensize) clock = pygame.time.Clock() grid = [[None for y in xrange(height+2)] for x in xrange(width+2)] grid[0] = [BOUNDARY]*(height+1) grid[width] = [BOUNDARY]*(height+1) for g in grid: g[4] = BOUNDARY g[-4] = BOUNDARY active_elements = [] w = Water(20,20,grid,active_elements) active_elements.append(w) grid[20][20] = w running = True def getnear(x,y): global grid mousepressed = False paintelement = Water time1s = [] time2s = [] def av(l): return sum(l)/len(l) while running: for event in pygame.event.get(): if event.type == pygame.QUIT: running = False elif event.type == pygame.MOUSEBUTTONDOWN: mousepressed = True elif event.type == pygame.MOUSEBUTTONUP: mousepressed = False elif event.type == pygame.KEYDOWN: if event.key == K_0: paintelement = None elif event.key == K_1: paintelement = Water elif event.key == K_2: paintelement = Wall elif event.key == K_3: paintelement = Fire elif event.key == K_4: paintelement = Oil elif event.key == K_KP_PLUS: BRUSHSIZE += 1 elif event.key == K_KP_MINUS: BRUSHSIZE -= 1 time1 = time.time() map(lambda x:x.act(), active_elements) #for element in active_elements: #element.act() time1 = time.time() - time1 time1s.append(time1) time1 = av(time1s) time2 = time.time() time2 = time.time() - time2 time2s.append(time2) time2 = av(time2s) for item in toremove: toremove.remove(item) del(item) if mousepressed: x0,y0 = pygame.mouse.get_pos() x0 = x0/2 y0 = y0/2 for xs in xrange(BRUSHSIZE): for ys in xrange(BRUSHSIZE): if paintelement is None: x = x0 + xs y = y0 + ys item = grid[x][y] if item is not None: item.remove() #if item in active_elements: #active_elements.remove(grid[x][y]) #grid[x][y] = None else: x = x0 + xs y = y0 + ys if grid[x][y] == None: e = paintelement(x,y,grid,active_elements) e.register() #active_elements.append(e) #grid[x][y] = e ''' screen.fill(BACKGROUND) for x in grid: for element in x: if element is not None: for x in xrange(PIXELSIZE): for y in xrange(PIXELSIZE): screen.set_at((PIXELSIZE*element.x+x,PIXELSIZE*element.y+y),element.color()) ''' print '\r',len(changed), len(changedempty), for pos in changedempty: x0 = pos[0] y0 = pos[1] for x in xrange(PIXELSIZE): for y in xrange(PIXELSIZE): screen.set_at((PIXELSIZE*x0+x,PIXELSIZE*y0+y),BACKGROUND) changedempty[:] = [] for pos in changed: x0 = pos[0] y0 = pos[1] if grid[x0][y0] is None: continue for x in xrange(PIXELSIZE): for y in xrange(PIXELSIZE): screen.set_at((PIXELSIZE*x0+x,PIXELSIZE*y0+y),grid[x0][y0].color()) changed[:] = [] clock.tick(50) pygame.display.flip()