Skip to content

Урок 25. Списки об'єктів — багато ворогів

Урок 25. Списки об’єктів — багато ворогів

Section titled “Урок 25. Списки об’єктів — багато ворогів”

Тривалість: 45–60 хв
Рівень: OOP Explorer

Навчися керувати десятками Enemy одним циклом.

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 = False
print("--- видаляємо мертвих ---")
enemies = [e for e in enemies if e.alive]
for e in enemies:
e.show() # Лише 2 вороги
  1. Створи 10 Enemy. 🙋 Підказка: enemies = [] + цикл for i in range(10): enemies.append(Enemy(...))
  2. Дай випадкові координати. 🙋 Підказка: import random і random.randint(0, 700) для x.
  3. Видаляй переможених. 🙋 Підказка: enemies = [e for e in enemies if e.alive] — фільтруємо список.
  4. Покажи кількість ворогів. 🙋 Підказка: print(f"Ворогів: {len(enemies)}")

Створи хвилю ворогів, що завершується після знищення всіх.

Хоча б раз за урок спробуй передбачити результат коду до запуску. Після запуску порівняй прогноз із реальністю.

Навмисно зламай одну частину програми. Прочитай traceback або спостережи неправильну поведінку, знайди причину й виправ її.

Якщо Git уже встановлено:

Terminal window
git init
git add .
git commit -m "My first save point"

Поки що достатньо думати про commit як про save point програміста.

✅ Урок завершено, якщо Марко може

Section titled “✅ Урок завершено, якщо Марко може”
  • пояснити головну ідею своїми словами;
  • виконати основні завдання без копіювання готового рішення;
  • змінити програму під нову вимогу;
  • знайти й виправити хоча б одну власну помилку.

Покращ Challenge однією власною ідеєю. Перед кодом сформулюй її одним реченням.

💡 Підказка для дорослого

Section titled “💡 Підказка для дорослого”

Не виправляйте код одразу. Краще запитайте: «Що ти очікував? Що сталося? Який рядок за це відповідає? Що можна перевірити?»