Framework для настольных игрушек
Mar. 27th, 2017 03:37 pmДумаю, как дальше развивать занятия программированием с Натанкиным. И вдруг понял, что идеальная задача — это делать то, что и так тебе нравится. В нашем случае — настольные игры. Покемоны, шахматы, колонисты, паровозики.
Сначала можно написать логику игрушки:
* какие предметы есть в игре?
* как они раздаются игрокам?
* из чего состоит игровое поле?
* как описывается положение в игре?
* как делается ход? сколько у него фаз? какие ходы разрешены, какие — нет?
* как разрешаются разные ситуации в игре — кто кого убил, кто взял карточку, к кому перешло поле?
Описали — можно уже поиграть самому с собой, или с соперником за тем же компом. А то и по сети, если есть секрет (прячешь свои карты). И в процессе написания наглядно увидеть, насколько важно точно определять правила.
Но самое интересное — можно писать ботов. Создавать разные версии стратегий / алгоритмов. Стравливать их друг с другом на ночь, и смотреть потом, какая стратегия побеждает чаще. Смотреть автоматически сыгранные партии и совершенствовать алгоритмы. На этом вообще много чего учишь. И то, что бывают оптимальные стратегии, которые не дают гарантированного выигрыша (то есть, есть объективно лучшие и худшие ходы). И то, что бывают кольца алгоритмов, когда каждый выигрывает у предыдущего (то есть, нет одного объективно лучшего алгоритма). Можно писать алгоритмы, следящие только за своей игрой, а можно следить за тем, что пытается сделать противник. Ну и так далее.
Проблема лишь в том, что всё это либо в консольном режиме (ребёнку некрасиво), либо ты убиваешь 10 лет на написание графического интерфейса. Хотя, интерфейс там достаточно одинаковый во всех игрушках: определить какие-то зоны на экране, отрисовывать стандартные элементы: карты из колоды, фишки разного цвета, брошенный кубик.
Вторая проблема — для написания даже чего-то простого (крестики-нолики) нужно написать кучу «ненужного» кода: класс «игрок», класс «поле», класс «игра», метод «не выиграл ли кто» и т.п. Но и эта часть тоже ведь относительно стандартная, по крайней мере для перечисленных игр.
Как следствие, вопрос: никто не слышал о готовом уже framework’е, облегчающем написание игрушек? Как scratch, только с уже сделанными классами и интерфейсами? Или хотя бы для карточных игр (от дурака до Uno).
Сначала можно написать логику игрушки:
* какие предметы есть в игре?
* как они раздаются игрокам?
* из чего состоит игровое поле?
* как описывается положение в игре?
* как делается ход? сколько у него фаз? какие ходы разрешены, какие — нет?
* как разрешаются разные ситуации в игре — кто кого убил, кто взял карточку, к кому перешло поле?
Описали — можно уже поиграть самому с собой, или с соперником за тем же компом. А то и по сети, если есть секрет (прячешь свои карты). И в процессе написания наглядно увидеть, насколько важно точно определять правила.
Но самое интересное — можно писать ботов. Создавать разные версии стратегий / алгоритмов. Стравливать их друг с другом на ночь, и смотреть потом, какая стратегия побеждает чаще. Смотреть автоматически сыгранные партии и совершенствовать алгоритмы. На этом вообще много чего учишь. И то, что бывают оптимальные стратегии, которые не дают гарантированного выигрыша (то есть, есть объективно лучшие и худшие ходы). И то, что бывают кольца алгоритмов, когда каждый выигрывает у предыдущего (то есть, нет одного объективно лучшего алгоритма). Можно писать алгоритмы, следящие только за своей игрой, а можно следить за тем, что пытается сделать противник. Ну и так далее.
Проблема лишь в том, что всё это либо в консольном режиме (ребёнку некрасиво), либо ты убиваешь 10 лет на написание графического интерфейса. Хотя, интерфейс там достаточно одинаковый во всех игрушках: определить какие-то зоны на экране, отрисовывать стандартные элементы: карты из колоды, фишки разного цвета, брошенный кубик.
Вторая проблема — для написания даже чего-то простого (крестики-нолики) нужно написать кучу «ненужного» кода: класс «игрок», класс «поле», класс «игра», метод «не выиграл ли кто» и т.п. Но и эта часть тоже ведь относительно стандартная, по крайней мере для перечисленных игр.
Как следствие, вопрос: никто не слышал о готовом уже framework’е, облегчающем написание игрушек? Как scratch, только с уже сделанными классами и интерфейсами? Или хотя бы для карточных игр (от дурака до Uno).
no subject
Date: 2017-03-27 08:18 pm (UTC)no subject
Date: 2017-03-27 08:26 pm (UTC)no subject
Date: 2017-03-27 08:36 pm (UTC)no subject
Date: 2017-03-27 09:53 pm (UTC)Вот есть такой автоматизатор всяких тестов графических интрерфейсов кторый часто используют для создания ботов в игре.
Sikuli IDE https://habrahabr.ru/post/230705/
Я бы взял какую нибудь компьютерную игрушку и попробовал написать к ней бота.
а еще в питоне есть pygame для графики - но там до того что ты хочешь довольно долго пилить.
можно еще самому карты рисовать в терминале - это очень просто
http://codereview.stackexchange.com/questions/82103/ascii-fication-of-playing-cards
Вот это примерно минимальная игрушка 'настоящей' с графикой и по сети.
https://github.com/vincepandolfo/pyscopa - сори комменты там на итальянском.
no subject
Date: 2017-03-28 09:17 am (UTC)no subject
Date: 2017-03-28 09:21 am (UTC)no subject
Date: 2017-03-28 11:39 am (UTC)no subject
Date: 2017-03-28 12:15 pm (UTC)no subject
Date: 2017-03-28 01:16 pm (UTC)Свои шахматы (с танками и вертолетами) (https://habrahabr.ru/post/210468/)
Приручаем ZoG (Часть 1: Волки и Козленок) (https://habrahabr.ru/post/211100/)
...
а потом вообще начал пилить свой движок:
Dagaz: Новое начало (https://habrahabr.ru/post/242547/)
Поизучай, но мне кажется, настольные игры - это сложный предмет для обучения программированию. Всякие викторины-аркады гораздо проще.
no subject
Date: 2017-03-28 01:36 pm (UTC)Просто в настолки мы уже играемся, там вообще ничего не нужно ребёнку объяснять, только само программирование.