Advertisement
Guest User

Untitled

a guest
Oct 15th, 2019
113
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.95 KB | None | 0 0
  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()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement