Версия для печати темы

Нажмите сюда для просмотра этой темы в оригинальном формате

GBX.ru _ NDS: Программирование _ cave quest

Автор: ripatti Вторник, 24 августа 2010, 19:11

Привет всем))

Чуть больше недели назад стукнуло мне в голову скачать какой нить компилятор с либами под ндс, дабы что нить под эту самую ндс написать. После каноничного хелло ворлд решил написать простенький текстовый квест за пару дней. Пару дней в итоге растянулись раза в 4, а квест получился далеко не простенькимsmile.gif

Результат моих трудов выкладываю здесь.

Квест на английском. Сразу скажу что мой английский ужасен, как минимум в плане грамматики (а уж о литературности и речи не идет). Просто был больший человеческий влом рисовать и вставлять русский шрифт. Но, надеюсь, по контексту будет понятно о чем речь...))

Загрузить файл сюда у меня прав что-то мало, поэтому вот ссылка:
http://rapidshare.com/files/414873564/cave_quest.rar

UPD
Скриншоты:
Присоединённое изображение
Присоединённое изображение
Присоединённое изображение
Присоединённое изображение

UPD
Исходники:
Присоединённый файл  cave_quest_src.rar ( 30.72кб ) Кол-во скачиваний: 82

Автор: Cluster Вторник, 24 августа 2010, 19:14

Ура, ещё один русский разработчик smile.gif
Чуть попозже обязательно посмотрю. А ты писал без использования PAlib?

Автор: ripatti Вторник, 24 августа 2010, 19:16

писал на C++, юзал devkitPro и libnds

Автор: GDomain Вторник, 24 августа 2010, 20:54

Скинь шоты) интересно посмотреть)
та и неначем)

Автор: ripatti Вторник, 24 августа 2010, 21:37

добавил шоты

Автор: p0nt Вторник, 24 августа 2010, 22:05

Английский действительно ни о чем. А так я бы поиграл 8)

Автор: todeskampf Вторник, 24 августа 2010, 22:10

мдэ, онглийский просто шикарен.

Опустив весь остальной надмозг, я бы написал Items in your possession sleepy.gif
Ведь стоило над этим в первую очередь работать, кроме текста то не видно ничего.

Автор: ripatti Вторник, 24 августа 2010, 23:26

Я в первую очередь работал над игровой механикой.

Английский моя беда=_= Он мне еще со школы вообще никак не дается, хотя техническую литературу вроде без проблем читаю и понимаю.

Вот такие вот дела. Если вдруг кому будет интересно - можете переписать текст. Правда, это несколько осложняется тем, что текст врезан в код:D. И текста там не мало... если рассматривать только код - больше 100 Кб получается.

В любом случае развивать дальше то, что есть, я не буду.

Автор: andronidze Вторник, 24 августа 2010, 23:37

Тогда исходники давай smile.gif

Автор: ripatti Вторник, 24 августа 2010, 23:54

Добавил исходники.

Мне не жалко :D

Автор: Chintoi Четверг, 26 августа 2010, 02:20

QUOTE (ripatti @ Среда, 25 августа 2010, 00:26)
Вот такие вот дела. Если вдруг кому будет интересно - можете переписать текст. Правда, это несколько осложняется тем, что текст врезан в кодlol.gif. И текста там не мало... если рассматривать только код - больше 100 Кб получается.

0_0
100 000
сто тысяч символов.
и ни одного правильного предложения.
не стоило ли как-то более полезно потратить усилия?

Автор: ripatti Четверг, 26 августа 2010, 03:21

Что, совсем ни одного?Т_Т

Вообще говоря там куча кода, генерирующего скрипты(иначе бы пришлось ручками писать раз в 20 больше lol.gif) + рукописные условия и действия скриптов. Так что, собственно, английского текста получится килобайт 20-30, не больше. Наверно.

Насчет более полезно потратить - это мое дело как мне тратить мое времяsmile.gif

Я сейчас ковыряю местные графические возможности. Если не заброшу дело, будет еще что нибудь, где в английской грамматике ошибиться невозможно, ибо текст будет сведен к минимуму lol.gif

UPD
Ну чо? lol.gif Кто скачал? Кто прошел?
Или мой английский настолько пугающ, что никто не решился?

Исходники, как я погляжу, скачало 3 человека. К скачавшим: что вы с ними делаете, если не секрет?

А то мне (как бы) интересноsmile.gif

Автор: Chintoi Пятница, 27 августа 2010, 00:32

QUOTE
Вообще говоря там куча кода, генерирующего скрипты(иначе бы пришлось ручками писать раз в 20 больше lol.gif)

Хоть я никогда не писал квесты, но разве есть область, где метапрограммирование эффективнее ооп?
QUOTE
Насчет более полезно потратить - это мое дело как мне тратить мое времяsmile.gif

Это не претензия, просто удивился.
QUOTE
Исходники, как я погляжу, скачало 3 человека.

Все три - Cluster с разных компов.
QUOTE
К скачавшим: что вы с ними делаете

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

Upd Я скачал, включил и умер от попытки понюхать носок. Реалистично. Выключил.

Автор: ripatti Пятница, 27 августа 2010, 02:05

> Хоть я никогда не писал квесты, но разве есть область, где метапрограммирование эффективнее ооп?

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

Далее, квестовый движок можно представить себе как виртуальную машину, в которую загружается весь игровой мир. В скриптах, конечно. А вот для создания скриптов почему бы и метапрограммированием не попользоваться? smile.gif

Ну вот например. В квесте есть одна комбинаторная головоломка (она баян, на самом деле lol.gif), которая включает в себя 1024 состояния, в каждом из которых нужно считать сумму. Однако квестовый движок не работает с числами (ибо 99% головоломок это не нужно и я не пихал числа в движок). Поэтому мне пришлось генерить все 1024 состояния. Это, конечно, издевательство над движком, но раз это сделать возможно, почему бы и нет smile.gif Но вот ручками все прописывать - лучше увольте.

Одно из подземелий генерится по карте. Ибо ошибиться в 30 комнатах кто с кем соединяется - раз плюнуть. И потом тестить все ето... Щщаз smile.gif Ну даже если я не ошибусь - что делать если я захочу позже немного поменять лабиринт? Править эту кучу однообразного кода?

Кроме того, там есть еще одна такая фича как рандом. Например, в данном квесте некоторые головоломки и лабиринты генерятся случайным образом. Ну, думаю, тут все ясно smile.gif

UPD
P.S. кто нить подскажет как нормально делать цитаты в фаст репли?

Автор: boulgin Пятница, 27 августа 2010, 03:14

QUOTE (ripatti @ Пятница, 27 августа 2010, 03:05)

UPD
P.S. кто нить подскажет как нормально делать цитаты в фаст репли?
*


пользуйтесь пунктом ''reply прямо под сообщением того, кого вы хотите цитировать

Автор: Chintoi Пятница, 27 августа 2010, 03:24

QUOTE
Ибо, извините, я не буду для каждого игрового условия создавать кучу объектов - мне проще просто написать парсер грамматики и вставить это все в объект.

Смысл ооп не в том, чтобы плодить объекты, а в том, чтобы сокращать количество кода и увеличивать структурированность и переносить логику в компайл-тайм. 20 КБ на контент и 80 КБ на логику в юзер оутпут приложении это глаза на лоб как нерационально.
QUOTE
Далее, квестовый движок можно представить себе как виртуальную машину, в которую загружается весь игровой мир. В скриптах, конечно. А вот для создания скриптов почему бы и метапрограммированием не попользоваться? smile.gif

Твоя машина - проц. приставки, который недалеко ушел от машины тьюринга, и задача инженера - наиболее рационально её использовать. Добавлять дополнительные прослойки логики почти всегда нерационально. Рационально разделять логику на составные части, тогда выявляется целая куча кода, без которой просто дышать легче.
QUOTE
Ну вот например. В квесте есть одна комбинаторная головоломка (она баян, на самом деле lol.gif), которая включает в себя 1024 состояния, в каждом из которых нужно считать сумму. Однако квестовый движок не работает с числами (ибо 99% головоломок это не нужно и я не пихал числа в движок). Поэтому мне пришлось генерить все 1024 состояния. Это, конечно, издевательство над движком, но раз это сделать возможно, почему бы и нет smile.gif Но вот ручками все прописывать - лучше увольте.

Если ты не пишешь числа непосредственно, это не значит что их нет. Вот готовое обобщенное решение задачи.
class state{
quest_type1 property1;
quest_type2 property2;
...
quest_typen propertym;
integral_type summ_method(){...}
}
container<state> all_states;
for(int i = 0; i < 1024; i++){
state st = {p1(i), p2(i),..., pn(i)};
all_states.push(st);
}
Никаких движков, минимум оверхеда в байтах и рантайме, и, главное, в программерском коде.
QUOTE
Одно из подземелий генерится по карте. Ибо ошибиться в 30 комнатах кто с кем соединяется - раз плюнуть. И потом тестить все ето... Щщаз smile.gif Ну даже если я не ошибусь - что делать если я захочу позже немного поменять лабиринт? Править эту кучу однообразного кода?

Слышал про бинарные деревья?
http://en.wikipedia.org/wiki/Maze_generation_algorithm
И еще STL контейнер map.
QUOTE
Кроме того, там есть еще одна такая фича как рандом. Например, в данном квесте некоторые головоломки и лабиринты генерятся случайным образом. Ну, думаю, тут все ясно smile.gif

В конструкторе глобального объекта и сгенерировать все. Даже с полным рандомом в компайл тайме большая часть будет готова.
QUOTE
P.S. кто нить подскажет как нормально делать цитаты в фаст репли?

[QUОTE]...[/QUОTE]

Автор: ripatti Пятница, 27 августа 2010, 04:29

QUOTE
Смысл ооп не в том, чтобы плодить объекты, а в том, чтобы сокращать количество кода и увеличивать структурированность и переносить логику в компайл-тайм. 20 КБ на контент и 80 КБ на логику в юзер оутпут приложении это глаза на лоб как нерационально.



Собственно для этого я парсеры и засунул туда. Насчет соотношения 20/80 - это только игровой текст (ага, именно тот, который у меня грамматически полностью неверен) добавьте сюда 10 скриптовых условий и 10 для действий, завернем все это в связывающий их код - еще 10. Т.е. на движок и генераторы - 50. Нормально, имхо.

QUOTE
Твоя машина - проц. приставки, который недалеко ушел от машины тьюринга, и задача инженера - наиболее рационально её использовать. Добавлять дополнительные прослойки логики почти всегда нерационально. Рационально разделять логику на составные части, тогда выявляется целая куча кода, без которой просто дышать легче.


Угу... может мне еще текстовый квест на ассемблере написать чтобы переходы выполнялись не за 15мс, а за 1?=_= Оно рисует дольше чем работает моя виртуальная машина. В любой программе пишется наиболее приемлемый код по соотношению "скорость/время написания". В моем случае такой подход полностью оправдан.

QUOTE
Если ты не пишешь числа непосредственно, это не значит что их нет. Вот готовое обобщенное решение задачи.


Я сделал абсолютно то же самое, что вы мне сейчас написали (если что - вы написали генератор состояний). То есть представил числа в понятиях квестового движка. Там прикол просто в том, что если бы он знал что такое число - состояние бы потребовалось одно lol.gif

QUOTE
Слышал про бинарные деревья?
http://en.wikipedia.org/wiki/Maze_generation_algorithm


Ну вот в квесте у меня реализовал рандомный Крускал. Правда, там бинарные деревья как то не нужны...

QUOTE
И еще STL контейнер map.


Вы меня утомляете=_= Хватит меня троллить lol.gif Скачайте исходники и посмотрите что я там использую.

QUOTE
В конструкторе глобального объекта и сгенерировать все. Даже с полным рандомом в компайл тайме большая часть будет готова.


Генерация всего мира происходит в течение тех 3-4 секунд, пока висит сообщение "Loading...". Это вполне приемлемо по производительности. Если бы оно генерилось хотя бы дольше 10 секунд, то, конечно же, пришлось бы отделять рандомные объекты и все остальные и потом перегенерировать только рандомные. Или даже еще круче извращаться. Но у нас 3-4 секунды. Так что зачем создавать себе геморрой? smile.gif

UPD
Ухаха, крутые цитатки lol.gif

Автор: Chintoi Пятница, 27 августа 2010, 06:31

открываю код...
facepalm-facepalm-faceplam-faceplam-raaaage

QUOTE
Нормально, имхо.

Нет. Абсолютно.
QUOTE
Собственно для этого я парсеры и засунул туда. Насчет соотношения 20/80 - это только игровой текст (ага, именно тот, который у меня грамматически полностью неверен) добавьте сюда 10 скриптовых условий и 10 для действий, завернем все это в связывающий их код - еще 10. Т.е. на движок и генераторы - 50.

У тебя уходит целая куча сил на оформление твоего образа мыслей. Того, чего пользователь никогда, никогда, никогда не увидит. Я прошелся по твоему сорсу, стерев все переводы строк, табы и пробелы. Количество кода сократилось на... 16.4%. Это 18 000 бесполезных нажатий на клавиатуру. Стоило один раз написать принт с автоматическим переносом строк (4 строчки), и можно было бы набирать текст просто как текст - без переплетения с синтаксисом яп и логикой - без ручного перевода строк, отступов, кавычек.
QUOTE
Угу... может мне еще текстовый квест на ассемблере написать чтобы переходы выполнялись не за 15мс, а за 1?=_=

Я не советую стирать ВСЕ уровни логики, я советую выбросить ненужные. И я не процессор жалею, а то, как такая дикая способность набирать текст как у тебя тратится вникуда.
QUOTE
Оно рисует дольше чем работает моя виртуальная машина. В любой программе пишется наиболее приемлемый код по соотношению "скорость/время написания". В моем случае такой подход полностью оправдан.

Любая машина делает одно и то же, если результат один. Вопрос в том как она это делает. Можно посчитать 2x2 за одну инструкцию, а можно четыре дня писать для этого исходник с тысячей строк. Виртуальная машина - это как играть в футбол на льду, чесать ухо через голову и ездить на внедорожнике по гоночному треку одновременно. Это оправдано только тогда, когда по-другому никак. Например, когда нужно запускать один код под разными операционками.
QUOTE
Ну вот в квесте у меня реализовал рандомный Крускал. Правда, там бинарные деревья как то не нужны...

Они там есть, ты просто их так закопал, что не знаешь где они. Любой плоский лабиринт наиболее коротко представляется бинарным деревом. См. изоморфизм.
QUOTE
Генерация всего мира происходит в течение тех 3-4 секунд, пока висит сообщение "Loading...". Это вполне приемлемо по производительности.

Тогда зайди в ранний тред про игры на псп и посмотри на количество нытья по поводу того, что на дс вообще нет надписи Loading.
QUOTE
Если бы оно генерилось хотя бы дольше 10 секунд, то, конечно же, пришлось бы отделять рандомные объекты и все остальные и потом перегенерировать только рандомные.

Если писАть правильно, то все что возможно, автоматически захардкодится.
QUOTE
Или даже еще круче извращаться. Но у нас 3-4 секунды. Так что зачем создавать себе геморрой? smile.gif

Куда уж круче извращаться?
QUOTE
UPD
Ухаха, крутые цитатки lol.gif

Наверное не нужно было копипастить как обычно, а набрать одно слово самому.

С английским у тебя отлично. Знаешь все необходимые конструкции, словарный запас хороший, но нет представления об английских частях речи, предлогах и по мелочи.

Автор: ripatti Пятница, 27 августа 2010, 07:05

Да, про автоперенос строки я действительно ступил и догадался далеко не сразу)) А именно когда порядка половины уже было написано. Поэтому забил :D Так что тут соглашусь :)

В плане виртуальной машины - ну, мне так удобнее :) Она автоматически предоставляет интерфейс с пользователем и сама выполняет необходимые мне действия. Как можно видеть в первом посте, я под дс прогаю дней 10, не больше. Возможно, позже сооружу более подходящую под дс архитектуру.

По поводу бинарных деревьев - пожалуйста, не надо=_= Я года 3 занимаюсь спортивным программированием и не по наслышке знаю что это такое, как оно работает и как это использовать. А в Крускале бинарных деревьев нет. Изоморфизм - это вообще другая степь, к структурам данных не относящаяся. Да и вообще, пожалуйста, не надо про производительность:) Я знаю как делать быстро и знаю когда это имеет место.

Насчет английского - неожиданно оО

Автор: Chintoi Пятница, 27 августа 2010, 09:22

QUOTE
Она автоматически предоставляет интерфейс с пользователем и сама выполняет необходимые мне действия.

Ты уверен что язык, которому не первый десяток лет и одной из целей создания которого было дать инструмент построения интерфейсов уже не предоставляет всех возможностей движка, на создание которого ушло пару часов?
QUOTE
Как можно видеть в первом посте, я под дс прогаю дней 10, не больше. Возможно, позже сооружу более подходящую под дс архитектуру.

Да причем тут архитектура, ты же делал что-то куда более конкретное.
QUOTE
По поводу бинарных деревьев - пожалуйста, не надо=_= Я года 3 занимаюсь спортивным программированием и не по наслышке знаю что это такое, как оно работает и как это использовать.

Чем дальше в лес... хотя при чем это тут.
QUOTE
А в Крускале бинарных деревьев нет.

Я сразу не вник как он связан с лабиринтом, но в твоем коде я видел карты из псевдографики, и обход псевдографики. Что мешает нарисовать карту человеческим методом - на бумаге, и записать в виде графа в строчку. Какая разница если результат один? А что если придется добавить третье измерение? Крускал уже бессилен, поскольку является формализованной записью _частного_ случая создания дерева, да еще какая-то псевдографика своих проблем добавляет.
QUOTE
Изоморфизм - это вообще другая степь, к структурам данных не относящаяся.

Я более образно. В плане отображения задумки сцены из игры в её реализацию. Ведь если хотел, чтобы у дракона было именно 3 головы, на чем бы не писал дракона и как длинно, в результате у него все равно должно получиться именно 3 головы.
QUOTE
Да и вообще, пожалуйста, не надо про производительностьsmile.gif Я знаю как делать быстро и знаю когда это имеет место.

Это очень неплохо, вот только если так продолжать, результатом ковыряний с графикой ДСки будет какая-нибудь банальность, которая уже тыщу раз сделана: типа двигающийся спрайт(может даже не один!(найденный в гугле или нарисованный в пейнте)), битмап на экранчике, скроллящийся бэкграунд, самодельная пикающая музычка в ущербном формате, причем файл музычки сгенерирован скриптом на самодельном скрипте, на самодельном движке, написанном на смеси макросов и шаблонной библиотеки. Никто, кроме тебя, не оценит.

Автор: andronidze Пятница, 27 августа 2010, 09:30

Пацаны, я вам травмы нанесу - чо на человека набросились?

Автор: Chintoi Пятница, 27 августа 2010, 09:33

QUOTE (andronidze @ Пятница, 27 августа 2010, 10:30)
Пацаны, я вам травмы нанесу - чо на человека набросились?
*

Предложи что-нибудь лучшее

Автор: ripatti Пятница, 27 августа 2010, 10:10

Охохох... Там не один лабиринт и генерятся они по-разному.
То, что в виде псевдографики - это одно. А Крускалом генерится совершенно другое. Ищите Крускал там, где написал dsu (от disjoint set unoin). И тут нету _бинарных_ деревьев. Дерево то как таковое получается, но оно нифига не бинарное=_=

Почему псевдографика и ее обход, а не граф в одну строчку - я уже говорил - одна опечатка и как бы печаль ее искать. И, кстати, тут тоже нет бинарных деревьев.

Обобщение на 3д... Зачем мне это обобщать на 3д, если у меня, простите, 2д? С 3д это уже совершенно другая задача, которая как бы и не ставилась. И, кстати, Крускал спокойно применим и к 3д.

Чем дальше в лес... Я просто объяснил вам, что я достаточно компетентен в данном вопросе и могу говорить с уверенностью, что это действительно так. О вашай компетентности мне, увы, пока особо ничего не известно.

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

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

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

Да вот хотя бы те же переносы. Ну неужели так влом написать лишние 10-20 Кб? Что для программиста 10-20 Кб? Или для вас это много? Хотя, если бы мысль об автопереносах пришла мне раньше - я бы, конечно, ее реализовал.

Да и о том, что я написал виртуальную машину. Ну какая разница с ней или без. В данном случае она прекрасно прижалась и все работает без багов и тормозов. Конечно же, можно все сделать быстрее и по-другому. И оно тоже будет работать. Но фигли то я не имею права написать виртуальную машину? Я этим карму себе порчу что ли?

В общем, я уже давно потерял нить споров и уже совсем не понимаю что вы мне хотите объяснить :) Поэтому предлагаю прекратить эту бесцельную дискуссию :)

Автор: ripatti Воскресенье, 19 сентября 2010, 07:21

Хех)) Мне интересно - кто нить правит текст? Ну, я чисто из любопытства спрашиваю :)

Уже 20 скачиваний исходников, а последствий не видно. Наверно скачали, ужаснулись и выкинули :D

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

Ну, еще раз повторю вопрос, меня интересующий - что вы делаете с исходниками? :)