player.py 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. from math import ceil
  2. from random import randrange
  3. from simulation.board import Board
  4. class Player:
  5. def __init__(self, board, blob):
  6. """
  7. :type blob: Blob_Manager
  8. :type board: Board
  9. """
  10. self.board = board
  11. self.blob = blob
  12. self.clean_top = True
  13. def save(self):
  14. return format(self.clean_top, 'd')
  15. def load(self, filename):
  16. with open(filename, 'r') as file:
  17. self.clean_top = file.readline() == '1'
  18. def set_random_food(self, qt, random_top=None):
  19. if random_top is None: # Randomize over all the board
  20. y_offset = 0
  21. y_range = self.board.height
  22. if random_top: # Randomize over the half top board
  23. y_offset = 0
  24. y_range = ceil(self.board.height / 2)
  25. elif not random_top: # Randomize over the half bottom board
  26. y_offset = int(self.board.height / 2)
  27. y_range = ceil(self.board.height / 2)
  28. foods = 0
  29. while foods < qt:
  30. x = randrange(self.board.width)
  31. y = y_offset + randrange(y_range)
  32. if not self.board.has_food(x, y):
  33. if self.set_food(x, y):
  34. foods += 1
  35. def set_food(self, x, y, size=1):
  36. food_put = False
  37. for x_size in range(size):
  38. for y_size in range(size):
  39. if 0 <= x + x_size < self.board.width and 0 <= y + y_size < self.board.height:
  40. if not self.board.board_array[x + x_size, y + y_size].touched:
  41. self.board.board_array[x + x_size, y + y_size].food = True
  42. food_put = True
  43. if not food_put:
  44. print("There is blob there !")
  45. return False
  46. return True
  47. def check_blob_size(self):
  48. size = 0
  49. for x in range(self.board.width):
  50. for y in range(self.board.height):
  51. if self.board.board_array[x, y].touched:
  52. size += 1
  53. return size/(self.board.width * self.board.height) * 100
  54. def clean_board(self):
  55. y_range = ceil(self.board.height/2)
  56. if self.clean_top:
  57. y_offset = 0
  58. else:
  59. y_offset = int(self.board.height/2)
  60. for x in range(self.board.width):
  61. for y in range(y_range):
  62. self.board.reset(x, y_offset + y)
  63. self.blob.reset(x, y_offset + y)
  64. self.clean_top = not self.clean_top