Урок 36. Space Invaders 6 — вороги стріляють
Урок 36. Space Invaders 6 — вороги стріляють
Section titled “Урок 36. Space Invaders 6 — вороги стріляють”Тривалість: 45–60 хв Рівень: Game Developer
🎯 Місія
Section titled “🎯 Місія”Додай ворожі постріли та небезпеку для гравця.
🧠 Ключова ідея
Section titled “🧠 Ключова ідея”if enemies and random.randint(1, 100) == 1: shooter = random.choice(enemies)💡 Пояснення простою мовою
Section titled “💡 Пояснення простою мовою”Кожен кадр ми кидаємо «кості»: якщо випало число 1 зі 100 — один випадковий ворог стріляє. Це робить гру непередбачуваною.
💡 Аналогія: Уяви, що 24 вороги по черзі кидають м’ячі. Кожен кадр кожен може кинути, але шанс малий — 1 з 100. Тож м’ячі летітимуть час від часу, а не постійно.
🧩 Розбираємо по рядках
Section titled “🧩 Розбираємо по рядках”random.randint(1, 100)— випадкове число від 1 до 100;== 1— постріл тільки якщо випало саме 1 (шанс 1%);random.choice(enemies)— обираємо випадкового ворога зі списку;if enemies and ...— перевірка, що список ворогів не порожній (інакшеrandom.choiceпомилиться).
Як працює випадковий ворожий постріл
Section titled “Як працює випадковий ворожий постріл”graph TD
A["Кожен кадр"] --> B{"Список enemies<br/>не порожній?"}
B -- "Ні" --> A
B -- "Так" --> C["random.randint(1,100)"]
C --> D{"Випало 1?"}
D -- "Ні" --> A
D -- "Так" --> E["shooter = random.choice(enemies)"]
E --> F["Створити EnemyBullet<br/>з позиції shooter"]
F --> A
✏️ Основні завдання
Section titled “✏️ Основні завдання”- Створи EnemyBullet.
🙋 Підказка: клас схожий на
Bullet, алеrect.yзбільшується (куля летить вниз). - Випадково обирай shooter.
🙋 Підказка:
random.choice(enemies)обере одного випадкового ворога. - Рухай вниз.
🙋 Підказка:
self.rect.y += self.speed(плюс, бо y росте вниз). - Частота залежить від level.
🙋 Підказка: замість
100використайmax(20, 100 - level * 10)— чим вищий level, тим частіше стріляють.
⭐ Challenge
Section titled “⭐ Challenge”Частота ворожого вогню росте з level.
🧪 Перед запуском
Section titled “🧪 Перед запуском”Хоча б раз за урок спробуй передбачити результат коду до запуску. Після запуску порівняй прогноз із реальністю.
🐞 Debug Mission
Section titled “🐞 Debug Mission”Навмисно зламай одну частину програми. Прочитай traceback або спостережи неправильну поведінку, знайди причину й виправ її.
✅ Урок завершено, якщо Марко може
Section titled “✅ Урок завершено, якщо Марко може”- пояснити головну ідею своїми словами;
- виконати основні завдання без копіювання готового рішення;
- змінити програму під нову вимогу;
- знайти й виправити хоча б одну власну помилку.
🏠 Домашня місія
Section titled “🏠 Домашня місія”Покращ Challenge однією власною ідеєю. Перед кодом сформулюй її одним реченням.
💡 Підказка для дорослого
Section titled “💡 Підказка для дорослого”Не виправляйте код одразу. Краще запитайте: «Що ти очікував? Що сталося? Який рядок за це відповідає? Що можна перевірити?»