Подходи за създаване на скриптов език за описание на настолни игри
И така, да кажем, че искаме да създадем универсален механизъм за игри за настолни игри и искаме да видим скриптов език като своя основа, който помага да се обяснят правилата на играта на двигателя.
Как искаме да бъде?
1) Езикът трябва да бъде възможно най-универсален, за да описва почти всички правила на играта.
2) Независимо от това, езикът трябва да бъде възможно най-опростен, минимум конструкции.
3) Описанието на правилата трябва да бъде лесно за четене за разработчика на игри и за писане на техните игри
4) В повечето случаи игрите могат да бъдат написани чрез допълване/промяна на вече написаното
5) Комуникацията (API) със скрипта трябва да бъде възможно най-опростена. За да можете лесно да пишете ботове и AI.
На пръв поглед изглежда, че никой изобщо няма да има нужда от изразходвани усилия, тъй като рутината не може да бъде намалена, по-лесно е да пишете игри веднага готови.
Но не е така.
Много по-лесно е!
Демиурги и черната кутия
Е, нека си представим, че сме демиурги и сме способни, не, вече сме написали този скриптов език. Да, да, вече. Нека да видим какво може и какво може да направи този език.
Не поставяйте граници там, където няма такива
Например проектът Дагаз (и неговите предшественици Аксиома и ZoG) се фокусира върху настолните игри. Въпреки това е доста трудно дори да се обясни на човек по какво се различава настолната игра от непълната. Какво да кажем, още по-трудно е да го опишем с точни дефиниции на някой програмен език.
Следователно първото и най-важно правило е да не се поставят ограничения там, където няма такива.!
Няма да разглеждаме настолни игри, а настолни игри.
Нека да разгледаме следния списък, който искаме да опишем и да играем с нашия двигател.
- Шах
- Сплит
- Каркасон
- Точки
- Петнайсет
- Домино
- Кристално оцветяване
- Глупак
Е, те са много различни на пръв поглед. Какво ги обединява всички? Наистина ли има нещо?
Да. Обединява ги това
- 1 играч винаги ходи наведнъж
- Почти винаги играчът може да мисли безкрайно дълго
- Всеки път има ограничен брой възможни действия. Играта на точки е изключение (тъй като точка може да се постави навсякъде на безкрайна дъска). За удобство ще намалим леко точките и няма да сменим двигателя
Всичко, само тези ограничения на двигателя!
Всъщност искаме да имаме двигател, който да може да задава 2 основни въпроса: кой върви сега, какви възможни действия може да направи.
И двигателят трябва да може да извърши едно действие - да извърши избраното действие.
Е, може би още едно действие е да изберете предварително действие (например, ако времето, определено за ход приключи и ходът все още не е направен, за да не приключите играта или да изберете произволно действие, можете да изберете предварително действие в този случай).
Няма нужда да поставяте повече ограничения, защото все пак някой ще иска да ги заобиколи.
Но какво, ако пишем покер? Да, и можете да хвърлите карта на глупака, но не можете да я хвърлите. Казването на Pass или избирането на костюма също е действие. Поставянето на поле в Каркасон също е действие.
Къде е тетрисът? Tetris вероятно ще бъде много трудно да се направи, защото това е игра в реално време и едва ли е необходима. Модифицирането на двигателя е лесно, но не е от значение.
Не кастрирайте скриптовия език
Не препоръчвам да следвате принципа - ще получа всички данни от скрипта и ще симулирам в двигателя. По този начин е по-лесен за използване .ini файл като конфигурация, а не ограда на скриптов език, тъй като ще има толкова смисъл.
И как да взема карта за Глупака, когато той отвърна? Просто отново ще преминем на следващо място и ще има само 1 вариант - вземете карта. Ако нещо може да се добави към стойностите на автоматичното действие - тоест, не питайте играча коя опция да изберете.
Нека двигателят не знае нищо за играта. Това е просто конвейер за заявки и красив дисплей. Не повече, но не по-малко.
Където без настройки
Без значение колко проста е комуникацията със скрипта, не можете да правите без настройки.
Глупак може да бъде изигран от двама, трима, четирима, пет или дори шестима. Можете да играете всеки човек за себе си, 2x2, 3x3.
Трябва да изпратим настройки. Добавете още една команда. Добре, две, трябва да проверите състоянието
Играйте първо
Трябва да се помни, че ние създаваме игри. И всички игри са обединени от факта, че
- Играта може да не е започнала
- Играта може да продължи
- Играта може да бъде завършена и да има краен резултат
Нека създадем още няколко отбора, които отразяват нови способности - заредете играта, стартирайте играта, разберете резултата от играта
Отделни мухи от котлети. Език за визуализация
Не гонете прекалено многофункционалност.
Нека си спомним, че ботовете нямат визуализация, но човек е много придирчив и иска да види много красива картина.
Основният извод от това е, че езиците за визуализация и езиците за съобщения обикновено са различни. Преследването на универсалността на скриптовия език не си струва, задачите са различни.