Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import os
- import sys
- import random
- import pygame
- # Клас для гравця (оранжевий об'єкт)
- class Player(object):
- def __init__(self):
- self.rect = pygame.Rect(32, 32, 16, 16) # Створюємо прямокутник гравця
- def move(self, dx, dy):
- # Рухаємося по кожній вісі окремо. Зверніть увагу, що ми перевіряємо зіткнення в обох напрямках.
- if dx != 0:
- self.move_single_axis(dx, 0)
- if dy != 0:
- self.move_single_axis(0, dy)
- def move_single_axis(self, dx, dy):
- # Зміщуємо прямокутник гравця
- self.rect.x += dx
- self.rect.y += dy
- # Якщо гравець зіштовхується зі стіною, виправляємо його позицію на основі швидкості
- for wall in walls:
- if self.rect.colliderect(wall.rect):
- if dx > 0: # Рух вправо; зіткнулися з лівим боком стіни
- self.rect.right = wall.rect.left
- if dx < 0: # Рух вліво; зіткнулися з правим боком стіни
- self.rect.left = wall.rect.right
- if dy > 0: # Рух вниз; зіткнулися з верхньою стороною стіни
- self.rect.bottom = wall.rect.top
- if dy < 0: # Рух вверх; зіткнулися з нижньою стороною стіни
- self.rect.top = wall.rect.bottom
- # Клас для представлення стін
- class Wall(object):
- def __init__(self, pos):
- walls.append(self)
- self.rect = pygame.Rect(pos[0], pos[1], 16, 16) # Створюємо прямокутник стіни
- # Ініціалізація Pygame
- os.environ["SDL_VIDEO_CENTERED"] = "1"
- pygame.init()
- # Налаштування вікна
- pygame.display.set_caption("Дістатися до червоного квадрата!")
- screen = pygame.display.set_mode((320, 240)) # Створюємо вікно гри
- clock = pygame.time.Clock()
- walls = [] # Список для зберігання стін
- player = Player() # Створюємо гравця
- # Представлення рівня у вигляді списку рядків. W = стіна, E = вихід
- level = [
- "WWWWWWWWWWWWWWWWWWWWWWWWWW",
- "W W",
- "W WWWWWW W",
- "W WWWW W W",
- "W W WWWW W",
- "W WWW WWWW W",
- "W W W W W",
- "W W W WWW W W",
- "W WWW WWW W W W",
- "W W W W W W W",
- "WWW W WWWWW W W",
- "W W WW W",
- "W W WWWW WWW W",
- "W W E W W W",
- "WWWWWWWWWWWWWWWWWWWWWWWWWW",
- ]
- # Розбираємо рівень з використанням рядків. W = стіна, E = вихід
- x = y = 0
- for row in level:
- for col in row:
- if col == "W":
- Wall((x, y)) # Додаємо стіну
- if col == "E":
- end_rect = pygame.Rect(x, y, 16, 16) # Вказуємо місце виходу
- x += 16
- y += 16
- x = 0
- running = True
- while running:
- clock.tick(60) # Обмежуємо кількість кадрів на секунду
- for e in pygame.event.get():
- if e.type == pygame.QUIT:
- running = False
- if e.type == pygame.KEYDOWN and e.key == pygame.K_ESCAPE:
- running = False
- # Рух гравця при натисканні клавіші
- key = pygame.key.get_pressed()
- if key[pygame.K_LEFT]:
- player.move(-2, 0)
- if key[pygame.K_RIGHT]:
- player.move(2, 0)
- if key[pygame.K_UP]:
- player.move(0, -2)
- if key[pygame.K_DOWN]:
- player.move(0, 2)
- # Додано це, щоб зробити гру трохи цікавішою ;)
- if player.rect.colliderect(end_rect):
- pygame.quit()
- sys.exit()
- # Малюємо сцену
- screen.fill((0, 0, 0)) # Заповнюємо екран чорним кольором
- for wall in walls:
- pygame.draw.rect(screen, (255, 255, 255), wall.rect) # Малюємо стіни
- pygame.draw.rect(screen, (255, 0, 0), end_rect) # Малюємо вихід
- pygame.draw.rect(screen, (255, 200, 0), player.rect) # Малюємо гравця
- pygame.display.flip() # Оновлюємо екран
- clock.tick(360)
Advertisement
Add Comment
Please, Sign In to add comment