Урок 25. Списки об'єктів — багато ворогів
Урок 25. Списки об’єктів — багато ворогів
Section titled “Урок 25. Списки об’єктів — багато ворогів”Тривалість: 45–60 хв
Рівень: OOP Explorer
🎯 Місія
Section titled “🎯 Місія”Навчися керувати десятками Enemy одним циклом.
🧠 Ключова ідея
Section titled “🧠 Ключова ідея”enemies = [Enemy(100, 50), Enemy(250, 50), Enemy(400, 50)]
for enemy in enemies: enemy.move() enemy.draw(screen)💡 Пояснення простою мовою
Section titled “💡 Пояснення простою мовою”Замість того щоб створювати змінні e1, e2, e3 окремо, ми складаємо всіх ворогів у список і проходимо по ньому циклом for. Один рядок коду керує ВСІМА ворогами — і 3, і 100.
🧩 Розбираємо по рядках
Section titled “🧩 Розбираємо по рядках”enemies = [Enemy(100, 50), Enemy(250, 50), Enemy(400, 50)]# Створюємо список з 3 ворогів одразу
for enemy in enemies: # Для кожного ворога у списку... enemy.move() # ...він рухається enemy.draw(screen) # ...він малюєтьсяgraph TD
A["список enemies"] --> B["Enemy 1 (100,50)"]
A --> C["Enemy 2 (250,50)"]
A --> D["Enemy 3 (400,50)"]
B --> E["for: move() + draw()"]
C --> E
D --> E
E --> F["Екран оновлено"]
🔎 Приклад: запускай і дивись
Section titled “🔎 Приклад: запускай і дивись”class Enemy: def __init__(self, x, y): self.x = x self.y = y self.alive = True
def move(self): self.x += 5
def show(self): print(f" [{self.x}, {self.y}, alive={self.alive}]")
enemies = [Enemy(10, 20), Enemy(50, 20), Enemy(90, 20)]
for e in enemies: e.show()
print("--- рухаємо ---")for e in enemies: e.move()
for e in enemies: e.show()
enemies[1].alive = Falseprint("--- видаляємо мертвих ---")enemies = [e for e in enemies if e.alive]for e in enemies: e.show() # Лише 2 вороги✏️ Основні завдання
Section titled “✏️ Основні завдання”- Створи 10 Enemy.
🙋 Підказка:
enemies = []+ циклfor i in range(10): enemies.append(Enemy(...)) - Дай випадкові координати.
🙋 Підказка:
import randomіrandom.randint(0, 700)для x. - Видаляй переможених.
🙋 Підказка:
enemies = [e for e in enemies if e.alive]— фільтруємо список. - Покажи кількість ворогів.
🙋 Підказка:
print(f"Ворогів: {len(enemies)}")
⭐ Challenge
Section titled “⭐ Challenge”Створи хвилю ворогів, що завершується після знищення всіх.
🧪 Перед запуском
Section titled “🧪 Перед запуском”Хоча б раз за урок спробуй передбачити результат коду до запуску. Після запуску порівняй прогноз із реальністю.
🐞 Debug Mission
Section titled “🐞 Debug Mission”Навмисно зламай одну частину програми. Прочитай traceback або спостережи неправильну поведінку, знайди причину й виправ її.
🌱 Git: перший save point
Section titled “🌱 Git: перший save point”Якщо Git уже встановлено:
git initgit add .git commit -m "My first save point"Поки що достатньо думати про commit як про save point програміста.
✅ Урок завершено, якщо Марко може
Section titled “✅ Урок завершено, якщо Марко може”- пояснити головну ідею своїми словами;
- виконати основні завдання без копіювання готового рішення;
- змінити програму під нову вимогу;
- знайти й виправити хоча б одну власну помилку.
🏠 Домашня місія
Section titled “🏠 Домашня місія”Покращ Challenge однією власною ідеєю. Перед кодом сформулюй її одним реченням.
💡 Підказка для дорослого
Section titled “💡 Підказка для дорослого”Не виправляйте код одразу. Краще запитайте: «Що ти очікував? Що сталося? Який рядок за це відповідає? Що можна перевірити?»