Еще одна попытка написать рогалик на Python/Libtcod
Модераторы: Sanja, Максим Кич
Еще одна попытка написать рогалик на Python/Libtcod
Я тут начитался туториалов на всяких англоязычных сайтах, а потом еще форумов по рогаликам.
В связи с просьба обладателям x64 Линукса потратить 5 минут на тестирование следующего эмм.. техдемо
http://pix.tftpd.net/downloads/alchemyst.zip
Используется Python 2.7, libtcod (должен был в архиве)
Правоверных любителей PEP8 предупреждаю сразу: внутри черви, ад и погибель.
Тем кто решил, э.. поиграть:
- выиграть нельзя,
- инвентаря/предметов (пока?) нет,
- управление с numpad или vi-keys, o - "автопилот", ctrl+q - выход
- ваша консоль будет зафлужена дебагом
Что интересует:
1) А запускается ли вообще?
2) Какая скорость работы (знаю что низкая, но насколько?), использование процессора и памяти. Ну и конфиг, на котором запускалось, если можно
Зачем это было?
1) Чтобы понять, можно ли в принципе написать что-то вменяемое на питоне
2) Попробовать перо в написании AI для мобов
В связи с просьба обладателям x64 Линукса потратить 5 минут на тестирование следующего эмм.. техдемо
http://pix.tftpd.net/downloads/alchemyst.zip
Используется Python 2.7, libtcod (должен был в архиве)
Правоверных любителей PEP8 предупреждаю сразу: внутри черви, ад и погибель.
Тем кто решил, э.. поиграть:
- выиграть нельзя,
- инвентаря/предметов (пока?) нет,
- управление с numpad или vi-keys, o - "автопилот", ctrl+q - выход
- ваша консоль будет зафлужена дебагом
Что интересует:
1) А запускается ли вообще?
2) Какая скорость работы (знаю что низкая, но насколько?), использование процессора и памяти. Ну и конфиг, на котором запускалось, если можно
Зачем это было?
1) Чтобы понять, можно ли в принципе написать что-то вменяемое на питоне
2) Попробовать перо в написании AI для мобов
- Cfyz
- Сообщения: 776
- Зарегистрирован: 30 ноя 2006, 10:03
- Откуда: Санкт-Петербург
- Контактная информация:
Re: Еще одна попытка написать рогалик на Python/Libtcod
Код: Выделить всё
<...>
File "env/local/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd", line 155, in init DijkstraMap (DijkstraMap.c:8857)
ValueError: numpy.dtype has the wrong size, try recompiling
Пытается раскуклиться
Re: Еще одна попытка написать рогалик на Python/Libtcod
Ага, спасибо, позже попробую добавить numpy в экспорт. Или вообще его выкинуть.
К сожалению да. Ибо питон ну оочень тормозной на перелопачивнии больших массивов, что меня собственно и отвращает.нужно ли ее было вообще делать бинарником?
Re: Еще одна попытка написать рогалик на Python/Libtcod
Поправил (вроде) бинарник, обновил архив. Ссылка прежняя:
http://pix.tftpd.net/downloads/alchemyst.zip
http://pix.tftpd.net/downloads/alchemyst.zip
- Uvadzucumi
- Сообщения: 365
- Зарегистрирован: 29 ноя 2011, 07:13
- Откуда: Дубай, ОАЭ (Минск, Беларусь)
- Контактная информация:
Re: Еще одна попытка написать рогалик на Python/Libtcod
запускаетсяthefish писал(а):1) А запускается ли вообще?
медленно , но играть можно. Причина, видимо, в куче действий "невидимых" НПЦ на каждом шаге передвижения, после получения нажатия клавиши.thefish писал(а):2) Какая скорость работы (знаю что низкая, но насколько?), использование процессора и памяти. Ну и конфиг, на котором запускалось, если можно
Процессор: 18% в режиме простоя. 60-70+% при перемещении
Памяти пользует 302 мегабайта.
система:
Скрытый текст: ПОКАЗАТЬ
Меня окружали милые, добрые люди... медленно сжимая кольцо
- Cfyz
- Сообщения: 776
- Зарегистрирован: 30 ноя 2006, 10:03
- Откуда: Санкт-Петербург
- Контактная информация:
Re: Еще одна попытка написать рогалик на Python/Libtcod
К сожалению, что на рабочей Ubuntu 12.04, что на домашне-виртуальной 14.10, одинаково ругается на numpy.
А еще libSDL.so лишняя, так как мало что 32-битная, так еще и не будет загрузчик смотреть либы в локальной директории все равно.
Про то, нужно ли делать библиотеку бинарником -- меня смутило, что в ней только одна функция инициализации, выглядит как будто она ничего полезного не делает.
P. S. Дьявол предлагает расчесать манту.
А еще libSDL.so лишняя, так как мало что 32-битная, так еще и не будет загрузчик смотреть либы в локальной директории все равно.
Про то, нужно ли делать библиотеку бинарником -- меня смутило, что в ней только одна функция инициализации, выглядит как будто она ничего полезного не делает.
P. S. Дьявол предлагает расчесать манту.
Пытается раскуклиться
- Uvadzucumi
- Сообщения: 365
- Зарегистрирован: 29 ноя 2011, 07:13
- Откуда: Дубай, ОАЭ (Минск, Беларусь)
- Контактная информация:
Re: Еще одна попытка написать рогалик на Python/Libtcod
хм...Cfyz писал(а):К сожалению, что на рабочей Ubuntu 12.04, что на домашне-виртуальной 14.10, одинаково ругается на numpy.
Код: Выделить всё
objdump -x ./DijkstraMap.so | grep NEEDED
NEEDED libpthread.so.0
NEEDED libc.so.6
Код: Выделить всё
objdump -x ./libtcod.so | grep NEEDED
NEEDED libz.so.1
NEEDED libSDL-1.2.so.0
NEEDED libGL.so.1
NEEDED libc.so.6
думаю, тут скорее всего в версии питона проблема:
Код: Выделить всё
python --version
Python 2.7.6
зы (оффтоп): в убунте 14-й пофиксили, наконец, переключение раскладок клавиатуры (или у тебя KDE?)
Меня окружали милые, добрые люди... медленно сжимая кольцо
- Cfyz
- Сообщения: 776
- Зарегистрирован: 30 ноя 2006, 10:03
- Откуда: Санкт-Петербург
- Контактная информация:
Re: Еще одна попытка написать рогалик на Python/Libtcod
Тут проблема не в прямой зависимости. Приведу вывод еще раз, чтобы вверх не листать:Uvadzucumi писал(а):не вижу numpy... хотя у меня стоит python-numpy 1:1.8.2-0ubuntu0.1
Код: Выделить всё
File "env/local/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd", line 155, in init DijkstraMap (DijkstraMap.c:8857)
ValueError: numpy.dtype has the wrong size, try recompiling
И вот в Ubuntu 12.04 версия python-numpy 1.6.1 (а у вас -- 1.8.2). Странно только что в 14.04 версия уже 1.8.1, а вот ошибку выдает точно такую же. Python и там, и там использовал 2.7, так это было отмечено топикстартером.StackOverflow писал(а):If a package is compiled against a specific numpy version, say 1.7, then there is no guarantee that the binaries of that package will work with older numpy versions, say 1.6, and very often or most of the time they will not.
У Python, насколько я видел, весьма неплохой PInvoke. Если вся задача это что-то посчитать на native массиве, то не окажется, что проще без numpy?
Я как-то умудрился это переждать: в предыдущем LTS еще работало, в последнем релизе уже работает =)Uvadzucumi писал(а):в убунте 14-й пофиксили, наконец, переключение раскладок клавиатуры (или у тебя KDE?)
Пытается раскуклиться
Re: Еще одна попытка написать рогалик на Python/Libtcod
Ясно, огромное спасибо вам за затраченные усилия!
Вобщем, как я убедился - стоит сделать лишь один шаг в сторону от туториала и Питон моментально превращается в склад грабель. Он очень классный для описания логики/предметов/создания классов, но как дело доходит до перекладывания байтов - он стремительно сдувается. Отдельную радость доставляет, гм, "изобретательно" работающий weakref - поиск оставшихся живых ссылок на объект превращается в увлекательное приключение. А если лишнее старательно не убивать - то широко разрекламированный pickle (кстати я использовал dill, он лучше) начинает сохранять по копии игры на каждый уровень подземелья
Да, и не получается даже собрать нормальный пакет для других версий той же ОС, если есть модули, использующие Cython + numpy. Я уж не говорю про другие ОС. А без Cython и статической типизации перебор даже относительно небольшого массива 120Х80 начинает занимать нестерпимо долгие десятые доли секунды реального времени.
PS Кстати, я когда-то в меру своих поверхностных знаний переписал эти алгоритмы на C, они работали примерно в 100 раз быстрее и жрали в несколько раз меньше памяти. Жаль, что я не умею писать на C
Возможно и проще. Numpy вообще-то и есть самые близкие к нативным массивы. Структура данных там правда вовсе не массив в классическом понимании, но вроде ничего быстрее чем numpy.array для Питона нет. Хотя, получив ваш фидбек и потратив вечер на поиск способа нормальной упаковки приложения, я что-то сильно разочаровался в Питоне. Варианты - либо делать pathfinding статической либой на С и писать биндинги, либо заменять целиком язык программирования на более, гм, "близкий к железу". Пока склоняюсь ко второму варианту.Если вся задача это что-то посчитать на native массиве, то не окажется, что проще без numpy
Симпатично. Жаль что не знал про эту библиотеку, когда начинал писать.P. S. Дьявол предлагает расчесать манту.
Да, все НПЦ честно обрабатываются, более того, некоторые (у которых большая скорость) ходят по нескольку раз между передачей управления игроку. У каждого свой инстанс Дийкстра-карты. Чуть позже были б и свои предпочтения (кого бить, что подбирать итп). Игрок, собственно от НПЦ отличается только тем что у него вместо AI - обработка нажатых кнопокПричина, видимо, в куче действий "невидимых" НПЦ на каждом шаге передвижения
Вобщем, как я убедился - стоит сделать лишь один шаг в сторону от туториала и Питон моментально превращается в склад грабель. Он очень классный для описания логики/предметов/создания классов, но как дело доходит до перекладывания байтов - он стремительно сдувается. Отдельную радость доставляет, гм, "изобретательно" работающий weakref - поиск оставшихся живых ссылок на объект превращается в увлекательное приключение. А если лишнее старательно не убивать - то широко разрекламированный pickle (кстати я использовал dill, он лучше) начинает сохранять по копии игры на каждый уровень подземелья
Да, и не получается даже собрать нормальный пакет для других версий той же ОС, если есть модули, использующие Cython + numpy. Я уж не говорю про другие ОС. А без Cython и статической типизации перебор даже относительно небольшого массива 120Х80 начинает занимать нестерпимо долгие десятые доли секунды реального времени.
PS Кстати, я когда-то в меру своих поверхностных знаний переписал эти алгоритмы на C, они работали примерно в 100 раз быстрее и жрали в несколько раз меньше памяти. Жаль, что я не умею писать на C
Re: Еще одна попытка написать рогалик на Python/Libtcod
Это ещё обиднее тем, что он используется и как язык для научных вычислений, а там иногда бывают очень долгие. Интересно, Perl будет быстрее?thefish писал(а): Вобщем, как я убедился - стоит сделать лишь один шаг в сторону от туториала и Питон моментально превращается в склад грабель.
Re: Еще одна попытка написать рогалик на Python/Libtcod
Сейчас знакомые физики используют R, хвалят неимоверно.Tookser писал(а): Это ещё обиднее тем, что он используется и как язык для научных вычислений, а там иногда бывают очень долгие. Интересно, Perl будет быстрее?
Re: Еще одна попытка написать рогалик на Python/Libtcod
Ясно. Видел только какие-то туториалы по этому языку.thefish писал(а):Сейчас знакомые физики используют R, хвалят неимоверно.Tookser писал(а): Это ещё обиднее тем, что он используется и как язык для научных вычислений, а там иногда бывают очень долгие. Интересно, Perl будет быстрее?
А кстати, о NumPy: есть ли в нём возможность создать статический массив (массив с неизменным размером))? Вернее, интересует, насколько большими будут накладные расходы на то, что массив является динамическим, и как их уменьшить. И чем структура массива NumPy отличается от обычного динамического массива? Поверхностный поиск мало что дал.
Re: Еще одна попытка написать рогалик на Python/Libtcod
Насколько я помню, все numpy-массивы статические. Ресайз массива - это отдельный метод, довольно дорогой по памяти и времени. Структура numpy массивов - вопрос интересный, если вкратце (и если я чудовищно не ошибаюсь), то в отличие от питоновских массивов numpy хранит не ссылки на NxM (произвольных) питоновских объектов, а NxM unboxed значений c типом данных из фиксированного списка - bool, int, uint, float, complex разной битности. Плюс кучу индексов и немножко метаинформации, которые сильно облегчают поиск/сортировку/траснпонирование массива. Вообще мануал по numpy толковый, рекомендую.Tookser писал(а): А кстати, о NumPy: есть ли в нём возможность создать статический массив (массив с неизменным размером))? Вернее, интересует, насколько большими будут накладные расходы на то, что массив является динамическим, и как их уменьшить. И чем структура массива NumPy отличается от обычного динамического массива? Поверхностный поиск мало что дал.
Re: Еще одна попытка написать рогалик на Python/Libtcod
Спасибо! Почитаю.thefish писал(а):Насколько я помню, все numpy-массивы статические. Ресайз массива - это отдельный метод, довольно дорогой по памяти и времени. Структура numpy массивов - вопрос интересный, если вкратце (и если я чудовищно не ошибаюсь), то в отличие от питоновских массивов numpy хранит не ссылки на NxM (произвольных) питоновских объектов, а NxM unboxed значений c типом данных из фиксированного списка - bool, int, uint, float, complex разной битности. Плюс кучу индексов и немножко метаинформации, которые сильно облегчают поиск/сортировку/траснпонирование массива. Вообще мануал по numpy толковый, рекомендую.Tookser писал(а): А кстати, о NumPy: есть ли в нём возможность создать статический массив (массив с неизменным размером))? Вернее, интересует, насколько большими будут накладные расходы на то, что массив является динамическим, и как их уменьшить. И чем структура массива NumPy отличается от обычного динамического массива? Поверхностный поиск мало что дал.
UPD: проверил тут http://wiki.scipy.org/Tentative_NumPy_Tutorial — вроде всё примерно так.
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 39 гостей