Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Найдите ошибку в коде пожайлуста!

Тимофей Маринич Ученик (124), открыт 2 дня назад
что не так с кодом? Почему спавнится много монстров?

#pgzero
import random

WIDTH = 1200 # Ширина окна
HEIGHT = 800 # Высота окна

TITLE = "Движение" # Заголовок окна игры
FPS = 90 # Количество кадров в секунду

# Переменные
level = "1"
mode = "game"

# Объекты
fon = Actor('fon1', size=(1200,800))
fon2 = Actor('Battleground1', size=(1200,800))
char = Actor('Slime1_Idle_full', (100, 600), size=(75,75))
nextlevel = Actor('statue', (1200, 800))
enemies = []
levels = []

def enemy_generation():
for i in range(1):
x = random.randint(1250, 1400)
y = random.randint(400, 780)
enemy = Actor('Monster_Fly', (x,y), size=(150, 150))
enemy.speed = random.randint(2, 8)
enemies.append(enemy)


# Отрисовка
def draw():
global level, mode
fon.draw()
char.draw()
nextlevel.draw()
if level == '2':
fon2.draw()
char.draw()
# enemy.draw()
for i in range(len(enemies)):
enemies[i].draw()
#движение врагов
def new_enemy():
x = 1300
y = random.randint(400, 780)
enemy = Actor('Monster_Fly', (x,y), size=(150, 150))
enemy.speed = random.randint(2, 8)
enemies.append(enemy)


def enemy_monsters():
for i in range(len(enemies)):
if enemies[i].x > -20:
enemies[i].x -= enemies[i].speed
else:
enemies.pop(i)
new_enemy()




def update(dt):
global level, mode
# Управление
if keyboard.left and char.x > 20:
char.x = char.x - 5
char.image = 'Slime1_Run_body'
elif keyboard.right and char.x < 1180:
char.x = char.x + 5
char.image = 'Slime1_Run_body (1)'
elif keyboard.up and char.y > 400:
char.y = char.y - 5
char.image = 'Slime1_Walk_full'
elif keyboard.down and char.y < 780:
char.y = char.y + 5
char.image = 'Slime1_Idle_full'
else:
char.image = 'Slime1_Idle_full'

if char.colliderect(nextlevel):
level = "2"
if level == "2":
enemy_generation()
enemy_monsters()
new_enemy()
2 ответа
S.H.I. Оракул (73573) 2 дня назад
 import random 
from pgzero.clock import clock
from pgzero.actor import Actor

# --- Настройки окна ---
WIDTH = 1200
HEIGHT = 800
TITLE = "Движение"
FPS = 90

# --- Глобальные переменные ---
level = "1" # текущий уровень
enemies = [] # список врагов

# --- Актёры ---
fon = Actor('fon1', (WIDTH//2, HEIGHT//2), size=(1200,800))
fon2 = Actor('Battleground1', (WIDTH//2, HEIGHT//2), size=(1200,800))
char = Actor('Slime1_Idle_full', (100, 600), size=(75,75))
nextlevel = Actor('statue', (1150, 780), size=(100,100))

# --- Функции спавна и движения врагов ---
def new_enemy():
"""Добавляет одного врага справа за экраном."""
x = WIDTH + 100
y = random.randint(400, HEIGHT - 20)
enemy = Actor('Monster_Fly', (x, y), size=(150,150))
enemy.speed = random.randint(2, 8)
enemies.append(enemy)

def start_spawning():
"""Запускает периодический спавн врагов раз в 2 секунды."""
clock.schedule_interval(new_enemy, 2.0)

def stop_spawning():
"""Останавливает периодический спавн."""
clock.unschedule(new_enemy)

def enemy_monsters():
"""Смещение всех врагов влево и удаление ушедших за экран."""
for enemy in enemies[:]: # итерация по копии списка
enemy.x -= enemy.speed
if enemy.x < -50:
enemies.remove(enemy)

# --- Рисуем всё на экране ---
def draw():
if level == "1":
fon.draw()
else: # level == "2"
fon2.draw()

# всегда рисуем персонажа, портал (nextlevel) и врагов (если есть)
char.draw()
nextlevel.draw()
for e in enemies:
e.draw()

# --- Логика каждого кадра ---
def update(dt):
global level

# --- Управление персонажем ---
if keyboard.left and char.x > 20:
char.x -= 5
char.image = 'Slime1_Run_body'
elif keyboard.right and char.x < WIDTH-20:
char.x += 5
char.image = 'Slime1_Run_body (1)'
elif keyboard.up and char.y > 400:
char.y -= 5
char.image = 'Slime1_Walk_full'
elif keyboard.down and char.y < HEIGHT-20:
char.y += 5
char.image = 'Slime1_Idle_full'
else:
char.image = 'Slime1_Idle_full'

# --- Переход на уровень 2 ---
if char.colliderect(nextlevel) and level == "1":
level = "2"
# сразу накидаем начальную волну
for _ in range(5):
new_enemy()
# и запустим таймер для периодического спауна
start_spawning()

# --- Движение и очистка врагов (только на lvl 2) ---
if level == "2":
enemy_monsters()
Похожие вопросы