Вступ

На уроці про цикли я казав, що оператор циклу ‘for’ ми залишимо на пізніше. Так, от пізніше – настало! 😉

Цикл “for”

Якщо зовсім просто, то цикл “for” виконує певний набір дій для кожного значення у списку. Давайте одразу перейдемо до простого прикладу із списком.

Як ви бачите, коли цикл виконується, він пробігає по усіх значеннях у списку, що йде одразу за ключовим словом ‘in’. Тоді він призначає значення із списку змінній value, запускає своє тіло (тіло циклу), кожен раз маючи змінну value встановлену у поточне значення із списку. Давайте розглянемо ще один приклад з використанням циклу ‘for’ для закріплення:

Спробуйте перенабрати дану маленьку програму у своєму редакторі і тоді запустити. Вже зрозуміли, що саме вона виконує? І взагалі, працює? … Програма питає ваше ім’я, а тоді друкує кожну літеру вашого імені в окремому рядочку. Що слід тут зауважити:

  • як ми з вами бачимо, стрічки (пам’ятаємо: стрічка – це рядочок тексту) у Python є фактично списком символів. Тобто по ній можна пробігатися як по звичайному списку використовуючи цикл ‘for’.
  • пригадуємо функцію ‘raw_input’ – це вбудована пітонівська функція, яка дозволяє нам приймати ввід від користувача.

Ніби все. Досить все просто з циклом ‘for’. Погодьтеся 🙂

Створення Функції Меню

А тепер давайте троги попишемо програми. На даний момент ми з вами вивчили, що таке змінні, списки, цикли та функції. Цього абсолютно достатньо для нас, щоб трохи погрограмувати! То ж давайте призначимо тепер собі завдання. Завданням буде ГРА! Яка саме – поясню далі у наступній секції. А поки, для гри необхідна функція друкування меню. Тому почнемо саме з неї. Ось код функції з детальними поясненнями і коментарями.

Саме призначення функції може на даний момент бути не до кінця зрозумілим, адже ми ще не дійшли до моменту її використання у нашій грі. Але це ми з’ясуємо пізніше. На даний момент головне, щоб ми з вами розібралися у самій суті даної функції. Я спеціально додав багато коментарів, буквально на кожну стрічку коду. Коментарів, як бачите, значно більше за сам код. В більшості випадків мати коментарі у вашому коді (звичайно не так багато як у прикладі вище, а лише у потрібних місцях, які важко зрозуміти без підказок) є дуже хорошою ідеєю. Особливо, якщо ви плануєте публікувати свій код, щоб інші могли ним користуватися та дописувати у нього, коментарі ніколи не будуть зайвими.

Наша перша “Гра”

Зараз ми з вами напишемо просту текстову приходницьку гру. Звучить цікаво? Гра відбуватиметь лише в одній кімнаті будинку, і в цій кімнаті, окрім дверей, будуть ще 5 предментів. В одному із цих 5-ти предметів будуть знаходитись ключі. Задача гравця знайти ключ і вийти через двері з кімнати. Давайте для початку розберемо хід гри на людській мові. Це ще називається псевдокодом. З його допомогою ми спробуємо окреслити загальний хід (алгоритм) гри.

Тобто, як бачите, суть гри – найти ключ і відкрити ним двері. Щоб знайти ключ – треба по черзі заглядати під різні предмети. Чим швидше – тим краще. А тепер давайте це все перепишемо на мову… звісно, Python 🙂

Так, досить проста, але цікава у кодуванні, гра. Не лякайтеся великої кількості коду у грі, близько 70 рядочків – це просто ‘if’ оператори, які насправді є однією з найпростішим частин програми. Спробуйте запустити гру у власному пітон інтерпретаторі та побавитись. Це також допоможе краще і легше зрозуміти суть коду. Якщо виникають питання стосовно логіки – постіть у коментарі. Але, загалом, надіюсь моїх коментарів у коді є достатньо, щоб осягнути загальну картину. Сподобалось? Якщо так, тоді у наступних уроках спробуємо більше ігор 🙂

Покращуємо Гру

Першим вашим питанням має бути “Ця гра працємо?”. Так. Тоді маєте мене запитати “Ця програма є добре написаною?” Логіка – добра, а от кількість рядочків можна зменшити. В грі ми використали функцію menu і це дозволило нам зменшити велику кількість рядків у програмі. А от ‘while’ цикл виглядає трохи “кучеряво” з усіма її вкладеними підрівнями коду, як на просту програму. Ми можемо це зробити краще! Коли ми з вами познайомимося з класами, ця програма матиме можливість набути значно кращого вигляду. Але покищо ми з вами можемо поправити кількість коду використавши старий добрий метод – створення фукцій. Це те, що ми вже освоїли з попереднього уроку. Напишемо функцію, яка прийматиме 2 аргументи – вибір гравця та місцезнаходження ключа. А повертатиме дана функція одну річ – чи був знайдений ключ. Давайте подивимося:

Тепер маючи функцію check можемо трішки підправити нашу гру і зробити наш головний цикл трохи коротшим. У прикладі внизу я навів лише цикл, адже решта програми залишилася без змін:

Ух! Який маленький тепер цикл! З більше 70ти рядочків на менше 10ти! Звичайно, ви напевно вже здогадалися, що у даному варіанті циклу, ми втратили трохи функціоналу. Як от наприклад – окрема обробка дверей. Тепер усі речі однакові, і кроку з виходом через двері тепер немає. Тепер для виграшу достатньо знайти ключ, і все. Тобто гра стала трошки менш цікавою, а також трохи важчою для подальших можливих змін. Але цьому також можна зарадити декількома змінами у нашій функції check. Якими? Це вже вам на домашнє завдання.

На завершення

Якщо сподобалось, тоді пропоную вам на домашнє завдання спробувати написати власну просту пригодницьку гру на зразок тої, що ми написали протягом даного уроку. При цьому не забувайте звертатися до попередніх уроків по безцінний матеріал, що ми з вами проходили. Якщо важко з новою грою, тоді ось список покращень до нашої вже написаної гри:

  • додати кілька новий речей куди можна ховати ключ
  • замінити замок у дверях, який потребує двох ключів, тобто гравець повинен знайти два ключі, і аж тоді вийти
  • після кімнати запрограмувати вхід в коридор, звідти вихід у кухню, аж тоді на двір. Одним словом на скільки фантазія розіграється 🙂
  • намалювати гру у командній стрічці, 2d варіант. Обриси кімнати, речей. Це вже для advanced юзерів 😉

Дякую за спільно пройдений урок. Мені було цікаво його писати, надіюсь вам цікаво, а головне корисно, його вивчати. Далі розберемо з вами КЛАСИ і трошки ООП! Буде дуже повчально. Але спершу – перепочиньте! 🙂