map.py 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. from utils import randbool, randcell, randcell2
  2. # 0 - поле
  3. # 1 - дерево
  4. # 2 - река
  5. # 3 - госпиталь
  6. # 4 - апгрейд-шоп
  7. # 5 - огня
  8. CELL_TYPES = '🟩🎄🌊🏥🛍️'
  9. class Map:
  10. def __init__(self, w, h):
  11. self.cells = [[0 for i in range(w)] for j in range(h)]
  12. def check_bounds(self, x, y):
  13. if (x < 0 or y < 0 or x >= self.h or y >= self.w):
  14. return False
  15. return True
  16. def print_map(self, helico):
  17. print('⬛' * (self.w + 2))
  18. for ri in self.cells:
  19. print('⬛', end="")
  20. for ci in range(self.w):
  21. cell = self.cells[ri][ci]
  22. if (helico.x == ri and helico.y == ci):
  23. print('🚁', end="")
  24. elif (cell >= 0 and cell < len(CELL_TYPES)):
  25. print(CELL_TYPES[cell], end="")
  26. print('⬛')
  27. print('⬛' * (self.w + 2))
  28. def generate_rivers(self, l):
  29. rc = randcell(self.w, self.h)
  30. rx, ry = rc[0], rc[1]
  31. self.cells[rx][ry] = 2
  32. while l > 0:
  33. rc2 = randcell2(rx, ry)
  34. rx2, ry2 = rc2[0], rc2[1]
  35. if (self.check_bounds(rx2, ry2)):
  36. self.cells[rx2][ry2] = 2
  37. rx, ry = rx2, ry2
  38. l -= 1
  39. def generate_forest(self, r, mxr):
  40. for ri in self.h:
  41. for ci in self.w:
  42. if randbool(r, mxr):
  43. self.cells[ri][ci] = 1
  44. def generate_tree(self):
  45. c = randcell(self.w, self.h)
  46. cx, cy = c[0], c[1]
  47. if (self.check_bounds(cx, cy) and self.cells[cx][cy] == 0):
  48. self.cells[cx][cy] = 1
  49. def add_fire(self):
  50. c = randcell(self.w, self.h)
  51. cx, cy = c[0], c[1]
  52. if self.cells[cx][cy] == 1:
  53. self.cells[cx][cy] = 5
  54. def update_fires(self):
  55. for ri in range(self.h):
  56. for ci in range(self.w):
  57. cell = self.cells[ri][ci]
  58. if cell == 5:
  59. self.cells[ri][ci] = 0
  60. for i in range(5):
  61. self.add_fire()