Okonar

Лабіринт2

Oct 14th, 2023
9
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.68 KB | None | 0 0
  1. import os
  2. import sys
  3. import random
  4. import pygame
  5.  
  6. # Клас для гравця (оранжевий об'єкт)
  7. class Player(object):
  8.  
  9. def __init__(self):
  10. self.rect = pygame.Rect(32, 32, 16, 16) # Створюємо прямокутник гравця
  11.  
  12. def move(self, dx, dy):
  13. # Рухаємося по кожній вісі окремо. Зверніть увагу, що ми перевіряємо зіткнення в обох напрямках.
  14. if dx != 0:
  15. self.move_single_axis(dx, 0)
  16. if dy != 0:
  17. self.move_single_axis(0, dy)
  18.  
  19. def move_single_axis(self, dx, dy):
  20. # Зміщуємо прямокутник гравця
  21. self.rect.x += dx
  22. self.rect.y += dy
  23.  
  24. # Якщо гравець зіштовхується зі стіною, виправляємо його позицію на основі швидкості
  25. for wall in walls:
  26. if self.rect.colliderect(wall.rect):
  27. if dx > 0: # Рух вправо; зіткнулися з лівим боком стіни
  28. self.rect.right = wall.rect.left
  29. if dx < 0: # Рух вліво; зіткнулися з правим боком стіни
  30. self.rect.left = wall.rect.right
  31. if dy > 0: # Рух вниз; зіткнулися з верхньою стороною стіни
  32. self.rect.bottom = wall.rect.top
  33. if dy < 0: # Рух вверх; зіткнулися з нижньою стороною стіни
  34. self.rect.top = wall.rect.bottom
  35.  
  36. # Клас для представлення стін
  37. class Wall(object):
  38.  
  39. def __init__(self, pos):
  40. walls.append(self)
  41. self.rect = pygame.Rect(pos[0], pos[1], 16, 16) # Створюємо прямокутник стіни
  42.  
  43. # Ініціалізація Pygame
  44. os.environ["SDL_VIDEO_CENTERED"] = "1"
  45. pygame.init()
  46.  
  47. # Налаштування вікна
  48. pygame.display.set_caption("Дістатися до червоного квадрата!")
  49. screen = pygame.display.set_mode((320, 240)) # Створюємо вікно гри
  50.  
  51. clock = pygame.time.Clock()
  52. walls = [] # Список для зберігання стін
  53. player = Player() # Створюємо гравця
  54.  
  55. # Представлення рівня у вигляді списку рядків. W = стіна, E = вихід
  56. level = [
  57. "WWWWWWWWWWWWWWWWWWWWWWWWWW",
  58. "W W",
  59. "W WWWWWW W",
  60. "W WWWW W W",
  61. "W W WWWW W",
  62. "W WWW WWWW W",
  63. "W W W W W",
  64. "W W W WWW W W",
  65. "W WWW WWW W W W",
  66. "W W W W W W W",
  67. "WWW W WWWWW W W",
  68. "W W WW W",
  69. "W W WWWW WWW W",
  70. "W W E W W W",
  71. "WWWWWWWWWWWWWWWWWWWWWWWWWW",
  72. ]
  73.  
  74. # Розбираємо рівень з використанням рядків. W = стіна, E = вихід
  75. x = y = 0
  76. for row in level:
  77. for col in row:
  78. if col == "W":
  79. Wall((x, y)) # Додаємо стіну
  80. if col == "E":
  81. end_rect = pygame.Rect(x, y, 16, 16) # Вказуємо місце виходу
  82. x += 16
  83. y += 16
  84. x = 0
  85.  
  86. running = True
  87. while running:
  88.  
  89. clock.tick(60) # Обмежуємо кількість кадрів на секунду
  90.  
  91. for e in pygame.event.get():
  92. if e.type == pygame.QUIT:
  93. running = False
  94. if e.type == pygame.KEYDOWN and e.key == pygame.K_ESCAPE:
  95. running = False
  96.  
  97. # Рух гравця при натисканні клавіші
  98. key = pygame.key.get_pressed()
  99. if key[pygame.K_LEFT]:
  100. player.move(-2, 0)
  101. if key[pygame.K_RIGHT]:
  102. player.move(2, 0)
  103. if key[pygame.K_UP]:
  104. player.move(0, -2)
  105. if key[pygame.K_DOWN]:
  106. player.move(0, 2)
  107.  
  108. # Додано це, щоб зробити гру трохи цікавішою ;)
  109. if player.rect.colliderect(end_rect):
  110. pygame.quit()
  111. sys.exit()
  112.  
  113. # Малюємо сцену
  114. screen.fill((0, 0, 0)) # Заповнюємо екран чорним кольором
  115. for wall in walls:
  116. pygame.draw.rect(screen, (255, 255, 255), wall.rect) # Малюємо стіни
  117. pygame.draw.rect(screen, (255, 0, 0), end_rect) # Малюємо вихід
  118. pygame.draw.rect(screen, (255, 200, 0), player.rect) # Малюємо гравця
  119. pygame.display.flip() # Оновлюємо екран
  120. clock.tick(360)
  121.  
Advertisement
Add Comment
Please, Sign In to add comment