Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from pygame.locals import *
- import pygame
- class Conductor:
- def __init__(self, pos):
- self.pos = pos
- self.active = False
- self.last_active = False
- class ConductorLayer:
- def __init__(self, size=[60, 60]):
- self.sf = pygame.Surface(size)
- self.map = [[None] * size[0] for x in xrange(size[1])]
- self.list = []
- self.color_a = (0, 0, 255)
- self.color_b = (255, 255, 255)
- def active(self, pos):
- if self.map[pos[1]][pos[0]] != None:
- self.map[pos[1]][pos[0]].active = True
- def set(self, pos):
- cnd = Conductor(pos)
- self.list.append(cnd)
- self.map[pos[1]][pos[0]] = cnd
- def update(self):
- active = filter(lambda e: e.active, self.list)
- for cnd in active:
- if cnd.active:
- cnd.last_active = self.active
- pos_u = [cnd.pos[0], cnd.pos[1] - 1]
- m = self.map[pos_u[1]][pos_u[0]]
- if m and m.last_active == False:
- self.map[pos_u[1]][pos_u[0]].active = True
- pos_r = [cnd.pos[0] + 1, cnd.pos[1]]
- m = self.map[pos_r[1]][pos_r[0]]
- if m and m.last_active == False:
- self.map[pos_r[1]][pos_r[0]].active = True
- pos_d = [cnd.pos[0], cnd.pos[1] + 1]
- m = self.map[pos_d[1]][pos_d[0]]
- if m and m.last_active == False:
- self.map[pos_d[1]][pos_d[0]].active = True
- pos_l = [cnd.pos[0] - 1, cnd.pos[1]]
- m = self.map[pos_l[1]][pos_l[0]]
- if m and m.last_active == False:
- self.map[pos_l[1]][pos_l[0]].active = True
- cnd.active = False
- for cnd in self.list:
- if cnd not in active:
- cnd.last_active = False
- def update_sf(self):
- self.sf.fill(0)
- for y in xrange(len(self.map)):
- for x in xrange(len(self.map[y])):
- if self.map[y][x] != None:
- color = self.color_a if self.map[y][x].active else self.color_b
- self.sf.set_at((x, y), color)
- class App():
- def __init__(self):
- self.screen = pygame.display.set_mode((300, 300))
- self.events = []
- self.keys = []
- self.mouse_pos = [0, 0]
- self.run = False
- # layers
- self.conductors = ConductorLayer()
- def mainloop(self):
- self.run = True
- draw = False
- timer = pygame.time.Clock()
- while self.run:
- timer.tick(20)
- self.keys = pygame.key.get_pressed()
- self.mouse_pos = pygame.mouse.get_pos()
- if draw:
- self.conductors.set(
- [
- self.mouse_pos[0] / 5,
- self.mouse_pos[1] / 5
- ]
- )
- self.events = pygame.event.get()
- for e in self.events:
- if e.type == pygame.QUIT:
- self.run = False
- elif e.type == pygame.MOUSEBUTTONUP:
- if e.button == 1:
- draw = False
- elif e.type == pygame.MOUSEBUTTONDOWN:
- if e.button == 1:
- draw = True
- elif e.button == 3:
- pos = [self.mouse_pos[0] / 5,self.mouse_pos[1] / 5]
- self.conductors.active(pos)
- self.conductors.update_sf()
- self.conductors.update()
- self.screen.fill(0)
- self.screen.blit(
- pygame.transform.scale(self.conductors.sf, (300, 300)),
- (0, 0)
- )
- pygame.display.update()
- def main():
- app = App()
- app.mainloop()
- main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement