SHARE
TWEET

Untitled

a guest Oct 15th, 2019 70 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. from pygame.locals import *
  2. import pygame
  3.  
  4. class Conductor:
  5.     def __init__(self, pos):
  6.         self.pos = pos
  7.         self.active = False
  8.         self.last_active = False
  9.  
  10. class ConductorLayer:
  11.     def __init__(self, size=[60, 60]):
  12.         self.sf = pygame.Surface(size)
  13.         self.map = [[None] * size[0] for x in xrange(size[1])]
  14.         self.list = []
  15.         self.color_a = (0, 0, 255)
  16.         self.color_b = (255, 255, 255)
  17.        
  18.     def active(self, pos):
  19.         if self.map[pos[1]][pos[0]] != None:
  20.             self.map[pos[1]][pos[0]].active = True
  21.        
  22.     def set(self, pos):
  23.         cnd = Conductor(pos)
  24.         self.list.append(cnd)
  25.         self.map[pos[1]][pos[0]] = cnd
  26.        
  27.     def update(self):
  28.         active = filter(lambda e: e.active, self.list)
  29.        
  30.         for cnd in active:
  31.             if cnd.active:
  32.                 cnd.last_active = self.active
  33.                 pos_u = [cnd.pos[0], cnd.pos[1] - 1]
  34.                
  35.                 m = self.map[pos_u[1]][pos_u[0]]
  36.                 if m and m.last_active == False:
  37.                     self.map[pos_u[1]][pos_u[0]].active = True
  38.                
  39.                 pos_r = [cnd.pos[0] + 1, cnd.pos[1]]
  40.                
  41.                 m = self.map[pos_r[1]][pos_r[0]]
  42.                 if m and m.last_active == False:
  43.                     self.map[pos_r[1]][pos_r[0]].active = True
  44.                
  45.                 pos_d = [cnd.pos[0], cnd.pos[1] + 1]
  46.                
  47.                 m = self.map[pos_d[1]][pos_d[0]]
  48.                 if m and m.last_active == False:
  49.                     self.map[pos_d[1]][pos_d[0]].active = True
  50.                
  51.                 pos_l = [cnd.pos[0] - 1, cnd.pos[1]]
  52.                
  53.                 m = self.map[pos_l[1]][pos_l[0]]
  54.                 if m and m.last_active == False:
  55.                     self.map[pos_l[1]][pos_l[0]].active = True
  56.                
  57.                 cnd.active = False
  58.                
  59.         for cnd in self.list:
  60.             if cnd not in active:
  61.                 cnd.last_active = False
  62.        
  63.     def update_sf(self):
  64.         self.sf.fill(0)
  65.        
  66.         for y in xrange(len(self.map)):
  67.             for x in xrange(len(self.map[y])):
  68.                 if self.map[y][x] != None:
  69.                     color = self.color_a if self.map[y][x].active else self.color_b
  70.                     self.sf.set_at((x, y), color)
  71.  
  72. class App():
  73.     def __init__(self):
  74.         self.screen = pygame.display.set_mode((300, 300))
  75.         self.events = []
  76.         self.keys = []
  77.         self.mouse_pos = [0, 0]
  78.         self.run = False
  79.        
  80.         # layers
  81.         self.conductors = ConductorLayer()
  82.    
  83.     def mainloop(self):
  84.         self.run = True
  85.         draw = False
  86.        
  87.         timer = pygame.time.Clock()
  88.         while self.run:
  89.             timer.tick(20)
  90.            
  91.             self.keys = pygame.key.get_pressed()
  92.             self.mouse_pos = pygame.mouse.get_pos()
  93.            
  94.             if draw:
  95.                 self.conductors.set(
  96.                     [
  97.                         self.mouse_pos[0] / 5,
  98.                         self.mouse_pos[1] / 5
  99.                     ]
  100.                 )
  101.            
  102.             self.events = pygame.event.get()
  103.             for e in self.events:
  104.                 if e.type == pygame.QUIT:
  105.                     self.run = False
  106.                
  107.                 elif e.type == pygame.MOUSEBUTTONUP:
  108.                     if e.button == 1:
  109.                         draw = False
  110.                    
  111.                 elif e.type == pygame.MOUSEBUTTONDOWN:
  112.                     if e.button == 1:
  113.                         draw = True
  114.                    
  115.                     elif e.button == 3:
  116.                         pos = [self.mouse_pos[0] / 5,self.mouse_pos[1] / 5]
  117.                         self.conductors.active(pos)
  118.            
  119.             self.conductors.update_sf()
  120.             self.conductors.update()
  121.             self.screen.fill(0)
  122.             self.screen.blit(
  123.                 pygame.transform.scale(self.conductors.sf, (300, 300)),
  124.                 (0, 0)
  125.             )
  126.            
  127.             pygame.display.update()
  128.        
  129.  
  130. def main():
  131.     app = App()
  132.     app.mainloop()
  133.  
  134. main()
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top