Ещё один проект рогалика на Python:заметки, вопросы, идеи

Темы, связанные с проектированием и программированием roguelike-игр

Модераторы: Sanja, Максим Кич

Tookser
Сообщения: 155
Зарегистрирован: 08 апр 2010, 11:09

Ещё один проект рогалика на Python:заметки, вопросы, идеи

Сообщение Tookser » 27 дек 2014, 03:32

Загорелся желанием сделать Roguelike на Python (попробовать язык в разработке, разобраться с компиляцией, применить ООП на практике etc.). Выкладывать свои ключевые идеи хочется лишь вместе с их конкретным воплощением в форме исполняемого файла/скрипта, поэтому пока лишь буду лишь задавать вопросы и делать небольшие заметки.

Заметки:
1. Т.к. карта будет не очень большой, а монстры и мир в целом не слишком умными, то не стоит заниматься избыточной оптимизацией, а лучше писать красивый и хорошо структурированный код с использованием ООП.
2. Хотелось бы сделать озвучку игры, но сразу появляется вопрос, откуда брать звуки/музыку. Если делать самому, будет слишком долго и сложно, а поэтому лучше будет найти то, что понравится, под свободной лицензией. Желаемый жанр — какой-нибудь Ambient.
3. Мог бы делать это как 7DRl, но ставить себе такие маленькие сроки не хочется.

Вопросы:
1. Посоветуйте хорошую книгу для понимания ООП. Идеально, если она будет учитывать специфику Python.
2. Ещё не откажусь от различных библиотек/модулей, которые могут пригодиться, а также списка относительно сложных возможностей синтаксиса Python, которые полезно знать. Сейчас создаётся впечатление, что я знаю весь Python, и это стоит нарушить.

Аватара пользователя
Apromix
Мастер
Сообщения: 1236
Зарегистрирован: 04 июл 2011, 10:44
Откуда: Украина, Черновцы
Контактная информация:

Re: Ещё один проект рогалика на Python:заметки, вопросы, иде

Сообщение Apromix » 27 дек 2014, 07:50

Tookser писал(а): Загорелся желанием сделать Roguelike на Python (попробовать язык в разработке, разобраться с компиляцией, применить ООП на практике etc.). Выкладывать свои ключевые идеи хочется лишь вместе с их конкретным воплощением в форме исполняемого файла/скрипта, поэтому пока лишь буду лишь задавать вопросы и делать небольшие заметки.
Замечательно! Сам раньше писал рогалик на Python'е. Для изучения языка самое то!

Аватара пользователя
Jolly Roger
Сообщения: 2973
Зарегистрирован: 27 ноя 2009, 09:10
Откуда: Minsk, Belarus

Re: Ещё один проект рогалика на Python:заметки, вопросы, иде

Сообщение Jolly Roger » 27 дек 2014, 10:58

Добро пожаловать на форум!
Мог бы делать это как 7DRl, но ставить себе такие маленькие сроки не хочется.
Насколько я знаю, люди ставять себе срок не семь календарных дней с начала разработки, а
7*24 часов потраченных на разработку. Это совсем другое дело!
Вполне достаточно, чтобы определиться с поставленой задачей. Например так начался Катаклизм. :wink:
Писать диздок спустя несколько лет разработки и множества изменений концепции - исконная русская девелоперская традиция.

Tookser
Сообщения: 155
Зарегистрирован: 08 апр 2010, 11:09

Re: Ещё один проект рогалика на Python:заметки, вопросы, иде

Сообщение Tookser » 27 дек 2014, 14:33

Apromix писал(а): Замечательно! Сам раньше писал рогалик на Python'е. Для изучения языка самое то!
И как результат? Долго ли писал, и что получилось в итоге?
Jolly Roger писал(а):Добро пожаловать на форум!
Мог бы делать это как 7DRl, но ставить себе такие маленькие сроки не хочется.
Насколько я знаю, люди ставять себе срок не семь календарных дней с начала разработки, а
7*24 часов потраченных на разработку. Это совсем другое дело!
Вполне достаточно, чтобы определиться с поставленой задачей. Например так начался Катаклизм. :wink:
Спасибо!
Вот как. Не знал, но всё равно — таких ограничений ставить пока не хочется. Буду только условно отсчитывать трудодни, уже прошло полтора.

Уже сделал простенькие генераторы карт и сам класс карт. Пока они совсем абстрактные, ни с чем другим не связаны. Объект "Карта" содержит список списков тайтлов и ещё немного служебной информации.
Карты по некоторым причинам будут небольшими, а главное — простыми, и это сужает возможности, но и заставляет подумать подольше. Думаю, как сделать маленький, но разветвлённый лабиринт. Уже есть "листья капусты" и "frogger", и одна добавочная функция, позволяющая делать с лабиринтом на стадии что-то простое.
С небольшим и немного грустным удивлением узнал, что идея моего рогалика неоригинальна, и такой уже есть. Пока не буду знакомиться с конкурентом, может быть, к НГ.
Ещё взволновал вопрос о быстродействии. Рогалики на питоне, насколько я помню, тормозили на моём старом ноутбуке, некоторые слабее, а некоторые показывали ~1 FPS. Думаю, проблема решаема, нужно только правильно выбрать средства визуализации, а сначала можно и через print выводить.

Аватара пользователя
Jolly Roger
Сообщения: 2973
Зарегистрирован: 27 ноя 2009, 09:10
Откуда: Minsk, Belarus

Re: Ещё один проект рогалика на Python:заметки, вопросы, иде

Сообщение Jolly Roger » 27 дек 2014, 14:35

Если ты сможешь закончить рогалик или довести его до чего то вполнеиграбельного, то будь уверен, такой рогалик будет очень оригинален. :wink:
Писать диздок спустя несколько лет разработки и множества изменений концепции - исконная русская девелоперская традиция.

Tookser
Сообщения: 155
Зарегистрирован: 08 апр 2010, 11:09

Re: Ещё один проект рогалика на Python:заметки, вопросы, иде

Сообщение Tookser » 27 дек 2014, 17:11

Вопрос по Python: почему 2.7 при работе с переменной self позволяет изменять параметры self, вызывать методы, меняющие self… Но не позволяет использовать конструкцию self = ... ? Это какая-то неожиданная фича.
И второй вопрос: как лучше всего перебирать списки списков (для чтения или записи)? Иногда не хватает аналога цикла for для чего-то вроде

Код: Выделить всё

for x in thislist:
    x=x**2
(Код выше, к сожалению, не возводит все элементы списка в квадрат.)
Да, это делается с помощью map или list comprehension, или for и enumerate, но нет ли более похожего на код выше способа?

Аватара пользователя
Феникc
Сообщения: 679
Зарегистрирован: 27 ноя 2010, 15:01
Откуда: Челябинск

Re: Ещё один проект рогалика на Python:заметки, вопросы, иде

Сообщение Феникc » 27 дек 2014, 18:30

Рад видеть прибавление в клубе питонистов :)

Насчёт self всё просто. Код вида

Код: Выделить всё

a = AClass()
a.method(5)
де-факто преобразуется в

Код: Выделить всё

a = AClass()
AClass.method(a, 5)
То есть вызов метода через экземпляр - это просто синтаксический сахар для вызова метода класса с передачей в него ссылки на конкретный экземпляр, с которым все изменения и будут производиться.
Из этого следует что self - это обычная переменная, ничем не отличающаяся от любой другой (она даже не обязательно должна называться именно так, это просто общепринятое соглашение), хранящая указатель на объект в памяти (если говорить в терминах С++). Её изменение никоим образом не изменит сам объект, при перезаписи она просто будет указывать на что-то другое. И, очевидно, это никак не повлияет на другие указатели, включая вот то "a", значение (именно значение, просто адрес в памяти) которого и было записано в self при вызове метода.

Касательно списков - ну, для ссылочных типов такой код работать будет, а вот для значимых придётся использовать один из предложенных тобой способов.

Upd:
Из книжек я настоятельно советую... Стандартный мануал! Нет, серьёзно, там описано всё, что нужно знать про питон, причем описано хорошим языком и с примерами, да и переводы на русский имеются во множестве (хотя лично для меня последнее и не критично).
Всё вышесказанное - ИМХО, если не указано обратное.

Tookser
Сообщения: 155
Зарегистрирован: 08 апр 2010, 11:09

Re: Ещё один проект рогалика на Python:заметки, вопросы, иде

Сообщение Tookser » 27 дек 2014, 19:13

Феникс, спасибо за объяснение. Я вроде понимал это, но как-то затупил. Да, знаю про стандартный мануал, он на удивление хорош. А что тогда по ООП? Просто все эти паттерны интересные объекты (извиняюсь за каламбур), но хочется почитать что-то простое про них, а не GoF'а.
Да, ещё есть такой глупый способ — превращать все неизменяемые данные в элемент одноэлементного списка, но это криво.

Tookser
Сообщения: 155
Зарегистрирован: 08 апр 2010, 11:09

Re: Ещё один проект рогалика на Python:заметки, вопросы, иде

Сообщение Tookser » 27 дек 2014, 20:50

Полетел жёсткий диск. Нужно было делать бэкапы часто и сразу. Ничего, в самом худшем случае — напишу заново.

Аватара пользователя
Феникc
Сообщения: 679
Зарегистрирован: 27 ноя 2010, 15:01
Откуда: Челябинск

Re: Ещё один проект рогалика на Python:заметки, вопросы, иде

Сообщение Феникc » 27 дек 2014, 21:27

Про ООП ничего особого посоветовать не могу, сам с ним на уровне "сдал - забыл" знаком.
Скрытый текст: ПОКАЗАТЬ
Решил поискать что-нибудь по теме на сервере кафедры, где папка "Книги" весит десять (!) гигабайт. Из всего этого великолепия ООП посвящено всего четыре файла, да и те находятся в разделе проектирования ПО, а не программирования как такового. Залил на обменник, может и пригодится кому, > http://rusfolder.com/42641240 <. Размер такой большой из-за пдфок.
Полетел жёсткий диск. Нужно было делать бэкапы часто и сразу. Ничего, в самом худшем случае — напишу заново.
Рекомендую завести дропбокс, спасет от таких ситуаций.
Всё вышесказанное - ИМХО, если не указано обратное.

Аватара пользователя
BreakMT
WANDER Team
Сообщения: 933
Зарегистрирован: 27 ноя 2006, 12:16

Re: Ещё один проект рогалика на Python:заметки, вопросы, иде

Сообщение BreakMT » 28 дек 2014, 09:15

Рекомендую завести дропбокс, спасет от таких ситуаций.
Для кода лучше bitbucket, ну или github - если опен сорс.

Tookser
Сообщения: 155
Зарегистрирован: 08 апр 2010, 11:09

Re: Ещё один проект рогалика на Python:заметки, вопросы, иде

Сообщение Tookser » 28 дек 2014, 20:12

Пока ищу удобный редактор кода для iOS, желательно бесплатный и не требующий внешней клавиатуры.

Аватара пользователя
Fantom_019
Сообщения: 132
Зарегистрирован: 20 ноя 2008, 12:03

Re: Ещё один проект рогалика на Python:заметки, вопросы, иде

Сообщение Fantom_019 » 28 дек 2014, 20:38

PyCharm Community edition весьма неплох =)

Tookser
Сообщения: 155
Зарегистрирован: 08 апр 2010, 11:09

Re: Ещё один проект рогалика на Python:заметки, вопросы, иде

Сообщение Tookser » 30 дек 2014, 19:26

Уже нашёл, Code Everywhere. Правда, требует соединения с интернетом, но клавиатура хороша.
Пока думаю об одной, вроде бы простой вещи: как соединить две точки на карте максимально коротким коридором (растризация линии вроде называется). Пока не кодил, только написал заголовок.

Tookser
Сообщения: 155
Зарегистрирован: 08 апр 2010, 11:09

Re: Ещё один проект рогалика на Python:заметки, вопросы, иде

Сообщение Tookser » 30 дек 2014, 21:29

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

Читаю про алгоритмы сглаживания и ищу такой, которой позволит проводить линию (коридор), проходимый игроком только с помощью движения вверх-вниз-вправо-влево. Можно взять какой-нибудь стандартный, получить линию, и пройти полученную линию пройти от одного конца до другого, дополняя отрезок в диагональных стыках.

Ответить

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 4 гостя