compare.py 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. import argparse
  2. from simulation import board
  3. import pygame
  4. from pygame.locals import QUIT, KEYDOWN, K_ESCAPE
  5. def main():
  6. ap = argparse.ArgumentParser()
  7. ap.add_argument("--first", required=True, help="first board file")
  8. ap.add_argument("--second", required=True, help="second board file")
  9. ap.add_argument("-s", "--scale", type=float, default=10,
  10. help="Scales board resolution by this factor (default: x10)")
  11. ap.add_argument("-o", "--output", type=str, help="Give a name to save the jpeg file")
  12. args = ap.parse_args()
  13. board_1 = board.Board(0, 0)
  14. board_1.load(args.first)
  15. board_2 = board.Board(0, 0)
  16. board_2.load(args.second)
  17. board_comp = board_1.compare(board_2)
  18. if board_comp is None:
  19. return
  20. width = int(board_1.width * args.scale)
  21. height = int(board_1.height * args.scale)
  22. game_surface = pygame.Surface((board_1.width, board_1.height))
  23. pixel_array = pygame.PixelArray(game_surface)
  24. for x in range(board_1.width):
  25. for y in range(board_1.height):
  26. pixel_array[x, y] = (0, 0, 0)
  27. val = max(-255, min(board_comp.get_blob(x, y), 255))
  28. if val < 0:
  29. val = - val # int(-val/2) + 125
  30. pixel_array[x, y] = (val/4, val/4, val)
  31. elif val > 0:
  32. val = val # int(val/2) + 125
  33. pixel_array[x, y] = (val, val/4, val/4)
  34. else:
  35. if not board_comp.is_touched(x, y):
  36. if board_1.is_touched(x, y):
  37. pixel_array[x, y] = (75, 75, 125)
  38. else:
  39. pixel_array[x, y] = (125, 75, 75)
  40. if board_comp.has_food(x, y):
  41. pixel_array[x, y] = (0, board_comp.foods[x, y], 0)
  42. del pixel_array
  43. game_window = pygame.transform.scale(game_surface, (width, height))
  44. if args.output is not None:
  45. pygame.image.save(game_window, args.output)
  46. else:
  47. pygame.init()
  48. window = pygame.display.set_mode((width, height))
  49. window.blit(game_window, (0, 0))
  50. pygame.display.flip()
  51. ended = False
  52. while not ended:
  53. pygame.time.wait(10)
  54. for event in pygame.event.get():
  55. if event.type == QUIT or event.type == KEYDOWN and event.key == K_ESCAPE:
  56. ended = True
  57. if __name__ == "__main__":
  58. main()