Создадим простую консольную экшен-игру на Python, в которой игрок будет управлять символом и избегать врагов:
pythonimport os
import random
import platform
import time
def clear_screen():
if platform.system().lower() == "windows":
os.system("cls")
else:
os.system("clear")
class Player:
def __init__(self, x, y):
self.x = x
self.y = y
def move(self, dx, dy):
self.x += dx
self.y += dy
class Enemy:
def __init__(self, x, y):
self.x = x
self.y = y
def move(self):
self.x -= 1
def draw_game(player, enemies, width, height):
for y in range(height):
for x in range(width):
if player.x == x and player.y == y:
print("P", end="")
elif any(e.x == x and e.y == y for e in enemies):
print("E", end="")
else:
print(".", end="")
print()
def main():
width, height = 30, 15
player = Player(width // 2, height // 2)
enemies = []
score = 0
while True:
clear_screen()
print(f"Score: {score}")
draw_game(player, enemies, width, height)
if random.random() < 0.1:
enemies.append(Enemy(width - 1, random.randint(0, height - 1)))
for e in enemies:
e.move()
enemies = [e for e in enemies if e.x > 0]
if any(e.x == player.x and e.y == player.y for e in enemies):
print("Game Over!")
break
dx, dy = 0, 0
key = input("Введите направление (w/s/a/d): ").lower()
if key == "w":
dy = -1
elif key == "s":
dy = 1
elif key == "a":
dx = -1
elif key == "d":
dx = 1
player.move(dx, dy)
player.x = max(0, min(width - 1, player.x))
player.y = max(0, min(height - 1, player.y))
score += 1
if __name__ == "__main__":
main()
Сохраните код в файл с расширением ".py", например, "simple_action_game.py", и запустите его с помощью Python. В этой игре вам нужно управлять символом "P" с помощью клавиш "w", "s", "a", "d" и избегать врагов, отображаемых символом "E".
Для добавления г
Продолжаем с того места, где остановились:
python if any(e.x == player.x and e.y == player.y for e in enemies):
print("Game Over!")
running = False
draw_game(screen, player, enemies)
pygame.quit()
if __name__ == "__main__":
main()
Теперь у нас есть графический интерфейс для нашей простой экшен-игры с помощью библиотеки pygame. Игрок управляет зеленым квадратом с помощью клавиш "W", "A", "S", "D", и должен избегать красных квадратов (врагов), которые движутся слева направо. Если игрок сталкивается с врагом, игра завершается.
Извините за это недоразумение. Вот исправленная версия кода:
pythonimport random
import pygame
pygame.init()
# Определение размеров и цветов
Хорошо, вот некоторые изменения, которые необходимо внести в код:
В начале кода, импортируйте библиотеку
pygame
и инициализируйте её после импорта:pythonimport pygame pygame.init()
Замените функцию
main()
на следующую версию:pythondef main(): screen = pygame.display.set_mode((WIDTH, HEIGHT)) pygame.display.set_caption("Simple Action Game") player = Player(GRID_WIDTH // 2, GRID_HEIGHT // 2) enemies = [] clock = pygame.time.Clock() running = True while running: dt = clock.tick(10) for event in pygame.event.get(): if event.type == pygame.QUIT: running = False keys = pygame.key.get_pressed() dx, dy = 0, 0 if keys[pygame.K_w]: dy = -1 elif keys[pygame.K_s]: dy = 1 elif keys[pygame.K_a]: dx = -1 elif keys[pygame.K_d]: dx = 1 player.move(dx, dy) player.x = max(0, min(GRID_WIDTH - 1, player.x)) player.y = max(0, min(GRID_HEIGHT - 1, player.y)) if random.random() < 0.1: enemies.append(Enemy(GRID_WIDTH - 1, random.randint(0, GRID_HEIGHT - 1))) for e in enemies: e.move() enemies = [e for
Продолжаем с того места, где остановились:
python enemies = [e for e in enemies if e.x > 0]
if any(e.x == player.x and e.y == player.y for e in enemies):
print("Game Over!")
running = False
draw_game(screen, player, enemies)
pygame.quit()
if __name__ == "__main__":
main()
Теперь функция main()
будет корректно работать с графическим интерфейсом, используя библиотеку pygame
. В этом измененном коде игра будет запускаться в графическом окне и завершаться, когда игрок сталкивается с врагом.
Ваши результаты указывают на то, что игра была успешно запущена и завершена. Если графическое окно не отображается или закрывается сразу после запуска, возможно, это связано с тем, что окно закрывается после завершения программы.
Чтобы решить эту проблему, мы можем добавить дополнительное ожидание после окончания игры, чтобы у вас было время увидеть результаты:
Замените этот блок кода:
pythonif any(e.x == player.x and e.y == player.y for e in enemies):
print("Game Over!")
running = False
На следующий:
pythonif any(e.x == player.x and e.y == player.y for e in enemies):
print("Game Over!")
pygame.time.wait(3000) # Ожидание 3 секунды (3000 миллисекунд) перед завершением игры
running = False
Это изменение добавит задержку в 3 секунды перед завершением игры после проигрыша, чтобы вы могли увидеть результаты на экране перед закрытием окна.
Извините за путаницу, я заметил ошибку в вашем коде. Последняя строка if __name__ == "__main__":
должна быть выровнена влево. Вот исправленный код:
pythonimport random
import pygame
pygame.init()
# Определение размеров и цветов
WIDTH, HEIGHT = 800, 600
CELL_SIZE = 40
GRID_WIDTH, GRID_HEIGHT = WIDTH // CELL_SIZE, HEIGHT // CELL_SIZE
BACKGROUND_COLOR = (0, 0, 0)
PLAYER_COLOR = (0, 255, 0)
ENEMY_COLOR = (255, 0, 0)
# Определение классов и функций
class Player:
def __init__(self, x, y):
self.x = x
self.y = y
def move(self, dx, dy):
self.x += dx
self.y += dy
class Enemy:
def __init__(self, x, y):
self.x = x
self.y = y
def move(self):
self.x -= 1
def draw_grid(screen):
for x in range(0, WIDTH, CELL_SIZE):
pygame.draw.line(screen, (100, 100, 100), (x, 0), (x, HEIGHT))
for y in range(0, HEIGHT, CELL_SIZE):
pygame.draw.line(screen, (100, 100, 100), (0, y), (WIDTH, y))
def draw_game(screen, player, enemies):
screen.fill(BACKGROUND_COLOR)
draw_grid(screen)
pygame.draw.rect(screen, PLAYER_COLOR, (player.x * CELL_SIZE, player.y * CELL_SIZE, CELL_SIZE, CELL_SIZE))
for e in enemies:
pygame.draw.rect(screen, ENEMY_COLOR, (e.x
Чтобы сделать игру сложнее, вы можете внести несколько изменений в код:
- Увеличьте скорость врагов.
- Увеличьте частоту появления врагов.
- Добавьте случайные движения врагам.
Вот код с изменениями:
pythonimport random
import pygame
pygame.init()
# Определение размеров и цветов
WIDTH, HEIGHT = 800, 600
CELL_SIZE = 40
GRID_WIDTH, GRID_HEIGHT = WIDTH // CELL_SIZE, HEIGHT // CELL_SIZE
BACKGROUND_COLOR = (0, 0, 0)
PLAYER_COLOR = (0, 255, 0)
ENEMY_COLOR = (255, 0, 0)
# Определение классов и функций
class Player:
def __init__(self, x, y):
self.x = x
self.y = y
def move(self, dx, dy):
self.x += dx
self.y += dy
class Enemy:
def __init__(self, x, y):
self.x = x
self.y = y
def move(self):
self.x -= 2 # Увеличиваем скорость врагов
# Добавляем случайное вертикальное движение
self.y += random.choice([-1, 0, 1])
self.y = max(0, min(GRID_HEIGHT - 1, self.y))
def draw_grid(screen):
for x in range(0, WIDTH, CELL_SIZE):
pygame.draw.line(screen, (100, 100, 100), (x, 0), (x, HEIGHT))
for y in range(0, HEIGHT, CELL_SIZE):
pygame.draw.line(screen, (100, 100, 100), (0, y), (WIDTH, y))
def draw_game(screen, player, enemies):
screen.fill(BACKGROUND_COLOR)
draw_grid(screen)
pygame.draw.rect(screen, PLAYER_COLOR, (player.x * CELL_SIZE, player.y * CELL_SIZE, CELL_SIZE, CELL_SIZE))
for e in enemies:
pygame.draw.rect(screen, ENEMY_COLOR, (e.x * CELL_SIZE, e.y * CELL_SIZE, CELL_SIZE, CELL_SIZE))
pygame.display.flip()
def main():
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("Simple Action Game")
player = Player(GRID_WIDTH // 2, GRID_HEIGHT // 2)
enemies = []
clock = pygame.time.Clock()
running = True
while running:
dt = clock.tick(30) # Увеличиваем FPS для более плавного движения
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
keys = pygame.key.get_pressed()
dx, dy = 0, 0
if keys[pygame.K_w]:
dy = -1
elif keys[pygame.K_s]:
dy = 1
elif keys[pygame.K_a]:
dx = -1
elif keys[pygame.K_d]:
dx = 1
player.move(dx, dy)
player.x = max(0, min(GRID_WIDTH - 1, player.x))
player.y = max