Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 1 addition & 2 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,6 @@ share/python-wheels/
.installed.cfg
*.egg
MANIFEST
.idea

# PyInstaller
# Usually these files are written by a python script from a template
Expand Down Expand Up @@ -174,7 +173,7 @@ cython_debug/
# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
# and can be added to the global gitignore or merged into this file. For a more nuclear
# option (not recommended) you can uncomment the following to ignore the entire idea folder.
#.idea/
.idea/

# Abstra
# Abstra is an AI-powered process automation framework.
Expand Down
1 change: 1 addition & 0 deletions game_on_pygame/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
"""mypy ругался на error: Source file found twice under different module names: "config" and "game_on_pygame.config."""
23 changes: 23 additions & 0 deletions game_on_pygame/config.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
"""Тут можно настроить характеристики для игрока, обычных врагов и триггер-противника."""
import pygame

# --- Игрок ---
player_size = 32
player = pygame.Rect(50, 50, player_size, player_size)
player_speed = 4
lives = 3
start_pos = player.topleft
is_key_obtained = False


# --- Враги ---
enemy_size = 50
enemies = [
pygame.Rect(150, 150, enemy_size, enemy_size),
pygame.Rect(450, 350, 70, 70)
]
enemy_speed = 1

# ---Триггер противник ---
trigger_enemy = pygame.Rect(25, 535, 32, 32)
trigger_enemy_flag = False
107 changes: 107 additions & 0 deletions game_on_pygame/main.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,107 @@
"""Входной файл для запуска игры."""
import pygame

from game_on_pygame.config import player, player_speed, enemies, enemy_speed, \
start_pos, lives, is_key_obtained, trigger_enemy, trigger_enemy_flag
from game_on_pygame.utils import exit_rect, walls, key_rect, BLUE, GOLDEN, \
GREEN, WHITE, RED, locked_door, trigger_door

# --- Инициализация ---
pygame.init()
WIDTH, HEIGHT = 600, 600
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("Выберись из лабиринта")
clock = pygame.time.Clock()

if __name__ == "__main__":
# --- Основной цикл ---
running = True
while running:
clock.tick(60)
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
if player.colliderect(exit_rect):
print("Ты выиграл!")
running = False

# --- Движение игрока ---
old_player_pos = player.topleft
keys = pygame.key.get_pressed()
if keys[pygame.K_a]:
player.x -= player_speed
if keys[pygame.K_d]:
player.x += player_speed
if keys[pygame.K_w]:
player.y -= player_speed
if keys[pygame.K_s]:
player.y += player_speed

# --- Проверка столкновений со стенами игроком ---
for wall in walls:
if player.colliderect(wall) or (locked_door and player.colliderect(locked_door)):
player.topleft = old_player_pos
if player.colliderect(key_rect):
is_key_obtained = True
locked_door = None
if trigger_door and player.colliderect(trigger_door):
trigger_door = None
trigger_enemy_flag = True

# --- Движение врагов направлено к игроку ---
for enemy in enemies:
old_enemy_pos = enemy.topleft

if player.x > enemy.x:
enemy.x += enemy_speed
elif player.x < enemy.x:
enemy.x -= enemy_speed

if player.y > enemy.y:
enemy.y += enemy_speed
elif player.y < enemy.y:
enemy.y -= enemy_speed

# --- Проверка столкновений со стенами ---
for wall in walls:
if enemy.colliderect(wall):
enemy.topleft = old_enemy_pos

# --- Проверка столкновения с врагами ---
for enemy in enemies:
if player.colliderect(enemy):
lives -= 1
if lives <= 0:
running = False
print("Ты проиграл! Жизней больше не осталось.")
player.topleft = start_pos

# --- Отрисовка ---
screen.fill("grey")
for wall in walls:
pygame.draw.rect(screen, BLUE, wall)
if locked_door:
pygame.draw.rect(screen, GOLDEN, locked_door)
pygame.draw.rect(screen, GREEN, exit_rect)
pygame.draw.rect(screen, WHITE, player)
if not is_key_obtained:
pygame.draw.rect(screen, GOLDEN, key_rect)
for enemy in enemies:
pygame.draw.rect(screen, RED, enemy)
if trigger_enemy_flag:
pygame.draw.rect(screen, RED, trigger_enemy)
trigger_enemy.x += 4.5
if player.colliderect(trigger_enemy):
running = False
print("Тебя догнали! Не отпускай кнопку перемещения и действуй быстро.")

# --- Шрифт для жизней ---
font = pygame.font.Font(None, 36)

# --- Отображение жизней ---
lives_text = font.render(f"Lives: {lives}", True, WHITE)
screen.blit(lives_text, (10, 10))

pygame.display.flip()

pygame.quit()
37 changes: 37 additions & 0 deletions game_on_pygame/utils.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
"""Здесь лежат всякие переменные и окружение."""
import pygame

# --- Цвета ---
WHITE = (255, 255, 255)
RED = (255, 0, 0)
GREEN = (0, 255, 0)
BLUE = (0, 0, 255)
GOLDEN = (225, 215, 0)

# --- Лабиринт (стены) ---
walls = [
pygame.Rect(0, 0, 600, 10), # верх
pygame.Rect(0, 0, 10, 600), # левая
pygame.Rect(0, 590, 600, 10), # низ
pygame.Rect(590, 0, 10, 600), # правая

pygame.Rect(10, 90, 200, 10),
pygame.Rect(200, 90, 10, 200),
pygame.Rect(300, 10, 10, 200),
pygame.Rect(200, 290, 200, 10),
pygame.Rect(400, 290, 10, 100),
pygame.Rect(100, 380, 300, 10),
pygame.Rect(100, 500, 500, 10)
]

# --- Закрытая дверь ---
locked_door = pygame.Rect(10, 500, 100, 10)

# --- Выход ---
exit_rect = pygame.Rect(550, 550, 40, 40)

# --- Ключ для двери ---
key_rect = pygame.Rect(50, 150, 40, 40)

# --- Триггер-стена ---
trigger_door = pygame.Rect(189, 510, 10, 80)
File renamed without changes.
4 changes: 3 additions & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,9 @@ version = "0.1.0"
description = "Add your description here"
readme = "README.md"
requires-python = ">=3.13"
dependencies = []
dependencies = [
"pygame>=2.6.1",
]

[dependency-groups]
dev = [
Expand Down
19 changes: 19 additions & 0 deletions uv.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.