green_fr: (Default)
[personal profile] green_fr
Думаю, как дальше развивать занятия программированием с Натанкиным. И вдруг понял, что идеальная задача — это делать то, что и так тебе нравится. В нашем случае — настольные игры. Покемоны, шахматы, колонисты, паровозики.

Сначала можно написать логику игрушки:
* какие предметы есть в игре?
* как они раздаются игрокам?
* из чего состоит игровое поле?
* как описывается положение в игре?
* как делается ход? сколько у него фаз? какие ходы разрешены, какие — нет?
* как разрешаются разные ситуации в игре — кто кого убил, кто взял карточку, к кому перешло поле?

Описали — можно уже поиграть самому с собой, или с соперником за тем же компом. А то и по сети, если есть секрет (прячешь свои карты). И в процессе написания наглядно увидеть, насколько важно точно определять правила.

Но самое интересное — можно писать ботов. Создавать разные версии стратегий / алгоритмов. Стравливать их друг с другом на ночь, и смотреть потом, какая стратегия побеждает чаще. Смотреть автоматически сыгранные партии и совершенствовать алгоритмы. На этом вообще много чего учишь. И то, что бывают оптимальные стратегии, которые не дают гарантированного выигрыша (то есть, есть объективно лучшие и худшие ходы). И то, что бывают кольца алгоритмов, когда каждый выигрывает у предыдущего (то есть, нет одного объективно лучшего алгоритма). Можно писать алгоритмы, следящие только за своей игрой, а можно следить за тем, что пытается сделать противник. Ну и так далее.

Проблема лишь в том, что всё это либо в консольном режиме (ребёнку некрасиво), либо ты убиваешь 10 лет на написание графического интерфейса. Хотя, интерфейс там достаточно одинаковый во всех игрушках: определить какие-то зоны на экране, отрисовывать стандартные элементы: карты из колоды, фишки разного цвета, брошенный кубик.

Вторая проблема — для написания даже чего-то простого (крестики-нолики) нужно написать кучу «ненужного» кода: класс «игрок», класс «поле», класс «игра», метод «не выиграл ли кто» и т.п. Но и эта часть тоже ведь относительно стандартная, по крайней мере для перечисленных игр.

Как следствие, вопрос: никто не слышал о готовом уже framework’е, облегчающем написание игрушек? Как scratch, только с уже сделанными классами и интерфейсами? Или хотя бы для карточных игр (от дурака до Uno).

Date: 2017-03-27 08:18 pm (UTC)
From: [identity profile] stanika.livejournal.com
Пока читала, как раз хотела поделиться, как мой прекрасный мужчина написал Уно на Хаскеле. Но фреймворка нет, прости..

Date: 2017-03-27 08:26 pm (UTC)
From: [identity profile] bostonvip.livejournal.com
попробуйте покопать в сторону программирование на python. Существует для всех платформ. Изучается с полпинка, есть куча готовых библиотек и примеров, в том числе для игр. Например: PyGame. А вообще вот здесь больше информации: https://wiki.python.org/moin/PythonGameLibraries

Edited Date: 2017-03-27 08:32 pm (UTC)

Date: 2017-03-27 08:36 pm (UTC)
From: [identity profile] bostonvip.livejournal.com
Кстати, а профессионалы используют в том числе и вот это: https://unity3d.com/unity. Бесплатно для персонального использования. Но это уже навороченное 2D-3D программирование игр.

Date: 2017-03-27 09:53 pm (UTC)
From: [identity profile] davarix.livejournal.com
+1 про пайтон (это Яша)


Вот есть такой автоматизатор всяких тестов графических интрерфейсов кторый часто используют для создания ботов в игре.
Sikuli IDE https://habrahabr.ru/post/230705/
Я бы взял какую нибудь компьютерную игрушку и попробовал написать к ней бота.

а еще в питоне есть pygame для графики - но там до того что ты хочешь довольно долго пилить.

можно еще самому карты рисовать в терминале - это очень просто
http://codereview.stackexchange.com/questions/82103/ascii-fication-of-playing-cards

Вот это примерно минимальная игрушка 'настоящей' с графикой и по сети.
https://github.com/vincepandolfo/pyscopa - сори комменты там на итальянском.
Edited Date: 2017-03-27 10:09 pm (UTC)

Date: 2017-03-28 09:17 am (UTC)
From: [identity profile] wildest-honey.livejournal.com
я тоже в сторону питона смотрю, но пока я не знаю за что взяться и полька делает свое в скретче. Она такая радостная была когда они с димкой придумали как останавливать падающего человечка на ступеньке: покрасили человечку ноги в красный и поставили проверку, как только красный касается ступеньки, то стоп.

Date: 2017-03-28 09:21 am (UTC)
From: [identity profile] green-fr.livejournal.com
У скретча, на самом деле, есть всё, кроме нужного разрешения. Если там нарисовать игровое поле, то не видно будет ничего. Или там есть какой-то вариант повысить разрешение?

Date: 2017-03-28 11:39 am (UTC)
From: [identity profile] grave--digger.livejournal.com
Ох, почитал - так повеяло студенческими годами... :) Курсовая работа на втором курсе - преферанс. Каждый второй программист ведь, небось, пытался преферанс написать? ;)

Date: 2017-03-28 12:15 pm (UTC)
From: [identity profile] green-fr.livejournal.com
Ты знаешь таких, кто не пытался?! ;-)

Date: 2017-03-28 01:16 pm (UTC)
From: [identity profile] prokofyev.livejournal.com
На Хабре некто GlukKazan периодически писал (https://habrahabr.ru/search/?q=%5BZillions%20of%20Games%202%5D&target_type=posts) про программирование настольных игр с помощью движка Zillions of Games:

Свои шахматы (с танками и вертолетами) (https://habrahabr.ru/post/210468/)
Приручаем ZoG (Часть 1: Волки и Козленок) (https://habrahabr.ru/post/211100/)
...

а потом вообще начал пилить свой движок:

Dagaz: Новое начало (https://habrahabr.ru/post/242547/)

Поизучай, но мне кажется, настольные игры - это сложный предмет для обучения программированию. Всякие викторины-аркады гораздо проще.

Date: 2017-03-28 01:36 pm (UTC)
From: [identity profile] green-fr.livejournal.com
Кстати да, викторину можно попробовать.
Просто в настолки мы уже играемся, там вообще ничего не нужно ребёнку объяснять, только само программирование.

Profile

green_fr: (Default)
green_fr

February 2026

S M T W T F S
1 2 3 4 5 67
8 9 10 11 12 1314
15 16 1718 192021
22 23 24 25262728

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Feb. 26th, 2026 05:03 am
Powered by Dreamwidth Studios