Список форумов форум

форум "Шахтеры Космоса"

Здрасьте!
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 

Программирование
На страницу 1, 2, 3  След.
 
Начать новую тему   Ответить на тему    Список форумов форум "Шахтеры Космоса" -> Просто треп.
Предыдущая тема :: Следующая тема  
Автор Сообщение
Артём



Репутация: 0    

Зарегистрирован: 27.11.2010
Сообщения: 20

СообщениеДобавлено: Сб Ноя 27, 2010 7:53 pm    Заголовок сообщения: Программирование Ответить с цитатой

У меня вопросик)
как ты сделал квестовую часть и диалоги.

По квестам:

-Как и где их хранить?
-Как их обрабатывать?

По Диалогам:

-Как собственно выглядит этот процесс?
-Где и как их хранить в каком виде?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
AndyLy



Репутация: +2    

Зарегистрирован: 26.10.2010
Сообщения: 198

СообщениеДобавлено: Вс Ноя 28, 2010 1:25 am    Заголовок сообщения: Ответить с цитатой

Наверняка есть куча мест, где объясняют как лучше делать квесты, но я решил не разбираться, а сделать свою, простую систему.
Итак- текст квестов я храню в таком виде:

Квест001
T001>Фраза которую "говорит собеседник"
R002>Ответ 1
R003>Ответ 2
EndAbzac
Т002>Фраза если ответ 1
T003>Фраза если ответ 2
EndY>Завершить диалог
EndAbzac
.........................
СдачаКвеста
T008>Выполнил задачу?
EndY>Да.
L009>Нет.
EndAbzac
T009>Тогда иди выполняй.
EndN>Хорошо иду.
EndAbzac
КвестВыполнен
T010>Молоец. Получай награду!
EndY>Спасибо, пока.
EndAbzac
КонецКвеста

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



Репутация: +2    

Зарегистрирован: 26.10.2010
Сообщения: 198

СообщениеДобавлено: Вс Ноя 28, 2010 1:44 am    Заголовок сообщения: Ответить с цитатой

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

Номер_квеста=001
Имя_квеста=Пообщаться с персонажем.
Кому_сдать_квест=НПС001
.........................
Условия_выдачи_квеста
УровеньИгрока=3
ЕстьПредметТакой-то=Да
Выполнен_квест=ИД010,ИД021
..............
События_при_взятия_квеста
Выдать_Предмет=ИД001
Создать_врага=НПС101
.....................
Условия_принятия_выполненого_квеста
УничтоженаЦельТакакя-то=Да
ЕстьПредметТакой-то=Да
..................
Награда_по_выполнении
Деньги=1000000
Опыт=1000
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
AndyLy



Репутация: +2    

Зарегистрирован: 26.10.2010
Сообщения: 198

СообщениеДобавлено: Вс Ноя 28, 2010 1:59 am    Заголовок сообщения: Ответить с цитатой

В описании характеристик персонажа должна быть строчка со списком квестов, которые он может выдать. Также надо сохранять список выполненных, активных квестов игрока.
При обращении к НПС проверяешь список активных квестов (нет ли задачи которую, надо сдавать этому НПС, если есть- запускаешь диалог с метки СдачаКвеста ), если нет активного квеста, но есть квест который по Условия_выдачи_квеста - можно выдать- считываешь необходимый квест из файла- запускаешь диалог.
Обрабатывать тексты надо по абзацам: весь текст хранится например в массиве QuestText(), считываешь первый абзац во временный массив- ждешь ответ, после (согласно ответу)- переходишь на нужную метку, считываешь абзац и так далее.
При сдаче квеста, (при ответе Да я выполнил.), проводишь проверку согласно Условия_принятия_выполненого_квеста и действуешь согласно результатам.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Артём



Репутация: 0    

Зарегистрирован: 27.11.2010
Сообщения: 20

СообщениеДобавлено: Вс Ноя 28, 2010 11:37 am    Заголовок сообщения: Ответить с цитатой

Надо попробовать! Просто думал сначало использовать базу данных LSQL (лайт).

Инвентарь тоже у тебя так хранится? в текстовом виде?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
AndyLy



Репутация: +2    

Зарегистрирован: 26.10.2010
Сообщения: 198

СообщениеДобавлено: Вс Ноя 28, 2010 1:30 pm    Заголовок сообщения: Ответить с цитатой

Способ хранения не так важен- объемы хранятся небольшие, так что выбирай как тебе удобнее их обрабатывать.
Например инвентарь можно хранить так :
Structure Invent
ПредметИд.s
Количество.l
Состояние.l
............
EndStructure
Соответственно должна быть база данных предметов, чтобы брать данные по ПредметИд:
Structure Items
Спрайт.l
Цена.l
Вес.l
..........
EndStructure
Опять же как удобнее- можно использовать например Map() с ключем ПредметИд, можно массив...
Я например для инвентаря использую массив и переменную хранящую количество предметов. При удалении предмета- сдвигаю массив. База предметов храниться в списке, но я так заморочил.. и переделывать уже не охота.
Самое главное организовать базу данных предметов, поскольку к ней программа будет обращаться много и часто.
Я например использую ИД значимые, например:
Q0214- где Q-тип предмета, 02- номер группы, 14-номер предмета в группе. То есть глядя на ИД уже можно сказать что это за предмет.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Артём



Репутация: 0    

Зарегистрирован: 27.11.2010
Сообщения: 20

СообщениеДобавлено: Ср Сен 14, 2011 9:30 am    Заголовок сообщения: Ответить с цитатой

AndyLy
Привет! твои советы помогают мне)

Уже давно не могу собсно разработать правильное поведение при столкновении с другими объектами.

Например есть платформа, а есть передвигающийся предмет. Надо чтобы предмет не проскакивал через стены. Как это лучше организовать?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
AndyLy



Репутация: +2    

Зарегистрирован: 26.10.2010
Сообщения: 198

СообщениеДобавлено: Ср Сен 14, 2011 2:35 pm    Заголовок сообщения: Ответить с цитатой

Способ простой :
- запоминаешь координаты движущегося объекта (OldX=X: OldY=Y)
- сдвигаешь объект
- проверяешь столкнулся ли объект
- если да- возвращаешь старые значения координат объекта (X=OldX: Y=OldY)

Или я не понял о чем ты спрашиваешь?
_________________
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Артём



Репутация: 0    

Зарегистрирован: 27.11.2010
Сообщения: 20

СообщениеДобавлено: Чт Сен 15, 2011 9:47 am    Заголовок сообщения: Ответить с цитатой

Ну довольно простой способ, только вот фпс упадет?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
AndyLy



Репутация: +2    

Зарегистрирован: 26.10.2010
Сообщения: 198

СообщениеДобавлено: Чт Сен 15, 2011 10:46 am    Заголовок сообщения: Ответить с цитатой

С чего ему падать, из-за пары операторов присвоения и сравнения?
Если объектов у тебя конечно сотни, то делай "умную" проверку: ограничь радиус проверки по координатам объектов.
Упрощенно :
For i=1 to 1000: If PlayerX>Object_1X ; делаешь более детальную проверку и разные необходимые действия с этим объектом.
endif
Next i
Но это если объектов действительно много и если ты делаешь слишком затратную по времени проверку.
_________________
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Артём



Репутация: 0    

Зарегистрирован: 27.11.2010
Сообщения: 20

СообщениеДобавлено: Чт Сен 15, 2011 11:40 am    Заголовок сообщения: Ответить с цитатой

Вообще я сейчас начал писать платформер (чувачок бегает по платформам) и бьет монстров)
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Артём



Репутация: 0    

Зарегистрирован: 27.11.2010
Сообщения: 20

СообщениеДобавлено: Чт Сен 15, 2011 11:44 am    Заголовок сообщения: Ответить с цитатой

конструкция будет иметь примерный характер:

Код:
old_x=current_x ; запоминаем координты
old_y=current_y ;запоминаем координты
current_x+5 ; переместились по иксу (не важно)

If collision()=1 ; вдруг столкнулись
current_x=old_x
current_y=old_y

else ; ничего не произошло столкновения не было
old_x=current_x ; запоминаем координты
old_y=current_y ;запоминаем координты
EndIf
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Артём



Репутация: 0    

Зарегистрирован: 27.11.2010
Сообщения: 20

СообщениеДобавлено: Чт Сен 15, 2011 11:47 am    Заголовок сообщения: Ответить с цитатой

и у тебя случайно нет готовых примеров:

проверка на столкновение:

прямоугольник и прямоугольник
сфера и прямоугольник

прямая и прямоугольник или сфера

треугольник и прямоугольник или сфера

или многоугольник и многоугольник (наверно самое оптимальное)
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Артём



Репутация: 0    

Зарегистрирован: 27.11.2010
Сообщения: 20

СообщениеДобавлено: Чт Сен 15, 2011 2:48 pm    Заголовок сообщения: Ответить с цитатой

Только что проверил этот способ.. Не очень то..
Предмет прилипает к стенкам... К примеру как платформу это не сделаешь, надо чтобы он скользил по поверхности... Но система работает хорошо..
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
AndyLy



Репутация: +2    

Зарегистрирован: 26.10.2010
Сообщения: 198

СообщениеДобавлено: Чт Сен 15, 2011 4:54 pm    Заголовок сообщения: Ответить с цитатой

Цитата:
Предмет прилипает к стенкам...

Естественно, ты его просто останавливаешь. Сделай проверку раздельно и не запоминай координаты дважды:

old_x=current_x ; запоминаем координты
old_y=current_y ;запоминаем координты

current_x+5 ; переместились по иксу (не важно)

If current_x>wall_x: current_x=old_x: endif
If current_y>wall_y: current_y=old_y: endif
_________________
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов форум "Шахтеры Космоса" -> Просто треп. Часовой пояс: GMT + 3
На страницу 1, 2, 3  След.
Страница 1 из 3

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2005 phpBB Group
Вы можете бесплатно создать форум на MyBB2.ru, RSS