Prompt Title: Python экшен игра.

Created 1 year ago
Votes 0
Views 184 times
0
Human: напиши простую экшен игру на пайтоне
ChatGPT:

Создадим простую консольную экшен-игру на Python, в которой игрок будет управлять символом и избегать врагов:

python
import 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".

Human: import os import platform import random 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() &lt; 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 &gt; 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() добавь графический интерфейс
ChatGPT:

Для добавления г

Human: import os import platform import 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 * 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(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() &lt; 0.1: enemies.append(Enemy(GRID_WIDTH - 1, random.randint(0, GRID_HEIGHT - 1))) for e in enemies: e.move() enemies = [e for e in enemies if e.x &gt; 0] if any(e.x == player.x and e.y продолжи кот там где остановился
ChatGPT:

Продолжаем с того места, где остановились:

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", и должен избегать красных квадратов (врагов), которые движутся слева направо. Если игрок сталкивается с врагом, игра завершается.

Human: графическое окно не появляется
ChatGPT:

Извините за это недоразумение. Вот исправленная версия кода:

python
import random import pygame pygame.init() # Определение размеров и цветов
Human: не переписывай код целиком, просто покажи где надо исправить или добавить
ChatGPT:

Хорошо, вот некоторые изменения, которые необходимо внести в код:

  1. В начале кода, импортируйте библиотеку pygame и инициализируйте её после импорта:

    python
    import pygame pygame.init()
  2. Замените функцию main() на следующую версию:

    python
    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(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
Human: продолжи от туда где остановился
ChatGPT:

Продолжаем с того места, где остановились:

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. В этом измененном коде игра будет запускаться в графическом окне и завершаться, когда игрок сталкивается с врагом.

Human: C:\Users\Egor\AppData\Local\Programs\Python\Python311\python.exe D:\pythonSimple_action_game\main.py pygame 2.2.0 (SDL 2.0.22, Python 3.11.2) Hello from the pygame community. https://www.pygame.org/contribute.html Process finished with exit code 0
ChatGPT:

Ваши результаты указывают на то, что игра была успешно запущена и завершена. Если графическое окно не отображается или закрывается сразу после запуска, возможно, это связано с тем, что окно закрывается после завершения программы.

Чтобы решить эту проблему, мы можем добавить дополнительное ожидание после окончания игры, чтобы у вас было время увидеть результаты:

Замените этот блок кода:

python
if any(e.x == player.x and e.y == player.y for e in enemies): print("Game Over!") running = False

На следующий:

python
if 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 секунды перед завершением игры после проигрыша, чтобы вы могли увидеть результаты на экране перед закрытием окна.

Human: import 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 * 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(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() &lt; 0.1: enemies.append(Enemy(GRID_WIDTH - 1, random.randint(0, GRID_HEIGHT - 1))) for e in enemies: e.move() enemies = [e for e in enemies if e.x &gt; 0] if 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 draw_game(screen, player, enemies) pygame.quit() if __name__ == "__main__": main() окно по прежнему не появляется
ChatGPT:

Извините за путаницу, я заметил ошибку в вашем коде. Последняя строка if __name__ == "__main__": должна быть выровнена влево. Вот исправленный код:

python
import 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
Human: спасибо, все заработало но игра слишком легкая, сделай ее сложнее
ChatGPT:

Чтобы сделать игру сложнее, вы можете внести несколько изменений в код:

  1. Увеличьте скорость врагов.
  2. Увеличьте частоту появления врагов.
  3. Добавьте случайные движения врагам.

Вот код с изменениями:

python
import 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
avatar
ferky
Shared 1 prompt
Created 1 year ago

Leave a Comment

Related Tag Prompts

94
0
151
0
Docker Pro
1 year ago 2023-01-29 06:08:59 AIPRM
308
0
MySQL Marvel
1 year ago 2023-02-13 00:05:32 AIPRM
260
0
Ansible Expert
1 year ago 2023-02-01 09:23:50 AIPRM
193
0
PostgreSQL Pro
1 year ago 2023-02-07 03:45:19 AIPRM
114
0
270
1
Dockerize me
1 year ago 2023-02-17 08:27:58 Chad Thompson-Smith