play.py 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. import pygame
  2. import argparse
  3. import time
  4. from os.path import exists
  5. from pygame.locals import QUIT
  6. from simulation.interface import Interface
  7. from simulation.board import Board
  8. from simulation.player import Player
  9. from simulation.logic.main import Blob_Manager
  10. def main():
  11. parser = argparse.ArgumentParser()
  12. parser.add_argument('--height', type=int, default=40,
  13. help='Board height resolution (default = 40)')
  14. parser.add_argument('--width', type=int, default=100,
  15. help='Board width resolution (default = 100)')
  16. parser.add_argument('--scale', type=int, default=10,
  17. help='Scaling from board resolution to window resolution (default = x10)')
  18. parser.add_argument('--init_from', type=str,
  19. help='Initialize game from a save. Pass the filename in saved dir without extension.')
  20. parser.add_argument('--save_dir', type=str, default="save/",
  21. help='Directory where saves are stored.')
  22. parser.add_argument('--computing_ratio', type=int, default=1,
  23. help='how many times computing loop is done before drawing GUI')
  24. args = parser.parse_args()
  25. if args.init_from is not None:
  26. init_scouters = 0
  27. else:
  28. init_scouters = 3
  29. board = Board(args.width, args.height)
  30. blob = Blob_Manager(board, init_scouters)
  31. player = Player(board, blob)
  32. if args.init_from is not None:
  33. assert exists(args.save_dir + args.init_from + ".board") \
  34. and exists(args.save_dir + args.init_from + ".blob") \
  35. and exists(args.save_dir + args.init_from + ".player")
  36. board.load(args.save_dir + args.init_from + ".board")
  37. blob.load(args.save_dir + args.init_from + ".blob")
  38. player.load(args.save_dir + args.init_from + ".player")
  39. gui = Interface(board, player, blob, args.scale, args.save_dir)
  40. init_counter = 100
  41. timer = time.time()
  42. counter = init_counter
  43. init_computing_ratio = args.computing_ratio
  44. ended = False
  45. while not ended:
  46. computing_ratio = init_computing_ratio
  47. while computing_ratio > 0:
  48. if gui.play or gui.do_step:
  49. blob.move()
  50. board.next_turn()
  51. gui.do_step = False
  52. for event in pygame.event.get():
  53. if event.type == QUIT:
  54. ended = True
  55. else:
  56. gui.event_listener(event)
  57. computing_ratio -= 1
  58. gui.draw()
  59. pygame.time.wait(10)
  60. counter -= 1
  61. if counter == 0:
  62. timing = time.time() - timer
  63. print("Loop mean time : {:.3f}s per iteration".format(timing / init_counter))
  64. counter = init_counter
  65. timer = time.time()
  66. if __name__ == "__main__":
  67. main()