Скрипти, скрипти і скрипти! Що ж це таке, програмування для початківців

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

Коротенька довідка або нагадування, це для кого як. Мови програмування поділяються на дві великі групи - компільовані й інтерпретовані.

Перші, за допомогою спеціальної програми компілятора, переводять програму, написану програмістом, в так звані машинні коди, тобто в коди зрозумілі процесору (або процесорам, як окремий випадок) комп'ютера, які процесор може виконувати. У випадку з компілятором програма зберігається на диску і завантажується в пам'ять (RAM) комп'ютера в машинних кодах (умовно кажучи, в нуликах і единичках).

Другі, або інтерпретуються мови програмування, відрізняються тим, що програма, написана програмістом, може відразу завантажуватися в оперативну пам'ять в тому вигляді, в якому вона була написана, і виконуватися крок за кроком, команда за командою, перетворюючись в машинні коди спеціальною програмою інтерпретатором. У випадку з інтерпретатором програма зберігається на диску і завантажується в пам'ять (RAM) комп'ютера в тому вигляді, як була написано програмістом.

Основна перевага компільованих програм в порівнянні з інтерпретуються, це швидкість роботи. Іноді ця швидкість може бути вище на кілька порядків! Інтерпретатори, безумовно, будуть працювати повільніше, так як їм доводиться робити багато побічної роботи крім виконання основної програми. А адже швидкість виконання програми для нас дуже важлива, особливо якщо ми створюємо гру! Адже ми не хочемо бачити сіпаються і гальмують персонажів, тим більше слайд-шоу! Для нас же важливо, буде створений нами персонаж реагувати через 1 мілісекунду або тільки через 10 секунд.

Навіщо нам взагалі використовувати інтерпретована мова програмування для створення ігор? І чи можна його використовувати в принципі? Справа в тому, що у різних мов теж є свої переваги, і одне з них те, що програму можна швидко налагоджувати (тобто виправляти помилки), доповнювати і змінювати. Адже програма зберігається на диску в тому вигляді, як її написав програміст і її не потрібно щоразу перекомпіліровать після виправлення маленької помилки. До речі, тому й розібратися в чужих програмах простіше - мови програмування, особливо орієнтовані на написання скриптів, дуже прості для розуміння, а ось розібратися в машинних кодах без відмінного знання асемблера (що дано далеко не кожному) практично неможливо ...

Тепер про скрипти. Скрипт. це сценарій, від англійського слова «Script». Точно такий же сценарій або роль, як в театральній п'єсі! На форумі Вебгеймера, як з'ясувалося, є багато театралів, людей, які люблять театр і розбираються в ньому. Ось їм-то має бути зрозуміло, про що я веду мову. Ви ніколи не звертали уваги, не замислювалися, чому розробники назвали ігрові файли сценами (scene.4ds, scene2.bin і т.д.), а об'єкти, з яких складаються ці файли акторами (actors)? Або звідки пішло таке поняття як «ігрова сцена»? Справа в тому, що ігрові скрипти-сценарії, особливо для ігор типу «action» (до речі, ще одне слівце з шоу-бізнесу), дуже схожі на сценарії і п'єси театральні, можна сказати, що вони близькі родичі. І в тому і в іншому випадку у нас є сцена з розставленими декораціями і акторами (мізансцена), при цьому у деяких акторів є свій сценарій, своя роль, свій екшен, а у деяких цього немає, вони як би грають в масовці. Але ж і масовка теж важлива, без неї у нас не вийде цілісності, повноти враження від вистави.

Актор, в будь-якому випадку актор, незалежно є у нього роль зі словами і екшеном (свій скрипт) або він грає безсловесну статую. Як я говорив вище, все з чого складається місто, це об'єкти. Це вірно і зрозуміло будь-якому програмісту! Але в той же час будь-який об'єкт є актором на нашій сцені, по термінології програмістів Illusion Softworks, і з точки зору «театрального» підходу до скриптів, про що я говорив вище. Пізніше спробуємо розібратися з цим детальніше, а поки просто запам'ятаємо, що об'єкт і актор, це одне й те саме - називайте як вам зручніше. Головне, щоб ви розуміли, що пляшка і чашка, що стоять в барі біля Луїджі, і сам Луїджі, це і об'єкти, і актори одночасно.

Давно ви були в театрі? Пам'ятайте хоча б, що вам показували на сцені? Будь-яка театральна п'єса, нехай навіть сама геніальна, зводиться всього лише до переміщення акторів по сцені, виголошення ними якихось реплік і виконання якихось дій. Ми не можемо побачити думки героїв, їхні сни, мріяння та іншу нематеріальну дурницю - все це неможливо показати засобами театру. Наприклад, в кінематографі є технічні прийоми як показати дію героїв так, щоб ми зрозуміли - герой спить і бачить сон або мріє (чорно-біле або розфокусовані зображення на екрані, уповільнена зйомка і т.д.), а ось в театрі ми таких прийомів практично позбавлені - тільки чистий екшен, тільки те, що актор робить. Звичайно, можливий режисерський прийом, коли диктор загробним голосом оголосить: «І сниться Вірі Павлівні сон ...», але далі-то справа зведеться знову до дій акторів, тобто, до того ж екшену! Нічого не поробиш, такі умовності і обмеження театру! І практично такі ж обмеження і умовності ми маємо в ігрових скриптах, якщо вже ми погодилися, що вони споріднені за своєю суттю. До речі, голос диктора в іграх частенько замінюється титрами.

Отже, ми побудували сцену, розставили акторів і клали перед ними їх ролі (scripts), тепер вони можуть зіграти нам спектакль, а ми насолодитися видовищем, АЛЕ дуже скоро це нам набридне, адже ми робимо гру, тобто хочемо самі взяти участь у виставі, самому стати актором, а не тільки спостерігати за іншими акторами. Тут є один цікавий момент! Всі актори мають свої ролі, відповідно до яких вони виконують якісь дії, причому так, що з боку може здатися, що актори розумні. Створюється враження, що актори можуть думати і приймати рішення, що вони володіють деяким, досить убогим, але все-таки подобою штучного інтелекту (Artificial Intelligence a.k.a. AI), для простоти часто і кажуть, що ігрові персонажі мають AI. Закономірне питання, а якщо гравець виступає в якості одного з акторів, то чи потрібен гравцеві керуючий його поведінкою скрипт? У гравця є своя голова на плечах, часто і не порожня! Гравець сам може і повинен приймати рішення, в цьому і полягає суть ігрового процесу, навіщо для гравця створювати додатковий скрипт і AI. У найпростішому випадку для взаємодії з AI інших акторів, наприклад: щоб контролювати рівень здоров'я гравця, щоб він не заліз куди не просять, щоб відстежувати коректність проходження місії гравцем (чіти, наприклад), щоб завершити місію, коли вона пройдена. Таким чином, виходить, що якщо для інших акторів скрипти грають в основному керуючу роль, вони думають і приймають рішення за акторів, то у випадку з гравцем, скрипти більше орієнтовані на контроль його поведінки і взаємодії з іншими акторами.

А думати і приймати рішення гравцеві пропонується самому.

Отже, визначення скрипта.

Скрипт (script), це сценарій, що описує і визначає роль одного актора, його властивості, характеристики, поведінку і взаємодію з іншими акторами.

Ви можете запитати, а як же, наприклад, скрипт банди з Alive mod? Адже не один актор становить банду? Дійсно, в банді кілька людей, у кожного з яких свій скрипт і свої функції, наприклад, водій ... Все вірно, кожен з членів банди є окремим актором і має свій окремий скрипт, що описує його поведінку і властивості. АЛЕ, в той же час, разом члени банди складають новий об'єкт або актора, що одне і теж. Якщо вам важко це уявити, то спробуйте уявити, наприклад, цегла! Цегла є об'єктом і відноситься до класу «Будівельні матеріали», з кількох десятків або сотень цегли ми можемо побудувати стіну, яка теж буде одним об'єктом, незважаючи на те, що побудована з безлічі інших об'єктів, тих самих цеглин. А з декількох стін ми побудуємо будинок, який теж є одним об'єктом, просто іншого, більшого класу «Дома», і так далі, до району і міста в цілому. У той же самий час наш маленький цегла нікуди не подівся, він як був, так і залишився об'єктом.

Точно так же перетворюються і скрипти, оскільки кожному об'єкту відповідає один скрипт, а об'єкти можуть об'єднувати в собі безліч інших об'єктів. Ось і виходить, що кожен член банди має свій окремий скрипт, у банди свій скрипт, а у місії свій. Складно уявити? Нічого, в процесі роботи буде зрозуміліше, я сподіваюся. А поки запам'ятаємо, що одним актором можуть управляти кілька різних скриптів, це залежить від того, до якого класу об'єктів він належить, і наскільки складні ролі йому належить виконувати в цих класах.