Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > разработка игр, графический дизайн и моделирование > Gamedev - cоздание игр: Unity, OpenGL, DirectX
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.10.2012, 21:11   #1
Serg-Grin
Дивиджей
Пользователь
 
Аватар для Serg-Grin
 
Регистрация: 05.01.2009
Сообщений: 84
По умолчанию Параметр "Опыт" в игре

Здравствуйте Уважаемые!
Есть опыт у игрока, и есть заготовка чисел наперёд! [50,90,180 ... и.т.д.]
За определенный бой с противником дают случайный опыт.
Так вот дохожу до числа пример 50 дается (+1) стат к силе!
а у меня получается если я провожу еще один бой то еще раз (+1) к силе!
А мне нужно что бы только раз давалось до 90 набранных очков!!!
Надеюсь кто-то понял...
Или посоветуйте по своему на счет создания в игре опыта!
Впишите в google:
DVJ Serg-Grin
И вы услышите мои песни

Последний раз редактировалось Serg-Grin; 16.10.2012 в 21:15.
Serg-Grin вне форума Ответить с цитированием
Старый 16.10.2012, 21:16   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Код:
int lvlUpExps[]={0,50,90,180,...};
int currentLvlUpExp=50;

while(playerExp>=currentLvlUpExp)
{
    playerStr++;
    lvl++;
    currentLvlUpExp=lvlUpExps[lvl];
}
намек ясен?(а обычно опыт идет с нуля потом, а не выше и выше)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 16.10.2012, 21:34   #3
Serg-Grin
Дивиджей
Пользователь
 
Аватар для Serg-Grin
 
Регистрация: 05.01.2009
Сообщений: 84
По умолчанию

Пепел Феникса, Извините но я изучаю только delphi, вообщем то немного с кода разобрал .. хотелось бы перевести в delphi!
Впишите в google:
DVJ Serg-Grin
И вы услышите мои песни
Serg-Grin вне форума Ответить с цитированием
Старый 16.10.2012, 22:15   #4
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Serg-Grin, начни с основы. У тебя должен быть блок записей pakced record и как минимум 3 записи, отвечающие за опыт:

Код:
UXPMin, UXP, UXPMax: Word; // ограничение 65535
UXP - текущий опыт, он добавляется от боя к бою. UXPMin и UXPMax рассчитываются по формулам, из которых на любом этапе загрузки персонажей можно узнать начальный и конечный опыт для текущего уровня.

Задача: составить уравнение, в котором участвует переменная уровня персонажа. Подсказка: в одной из них будет (ULevel + 1).

Это несложно, ...напрягай извилины
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 17.10.2012, 07:01   #5
Виталий Желтяков
Старожил
 
Аватар для Виталий Желтяков
 
Регистрация: 19.04.2010
Сообщений: 2,702
По умолчанию

При такой организации нужна разбивка на уровни. Набрал опыта, если уровень маленький повышаем его и даём +1 к силе.
Виталий Желтяков вне форума Ответить с цитированием
Старый 17.10.2012, 14:28   #6
EridorBlade
CAE Engineer
Пользователь
 
Аватар для EridorBlade
 
Регистрация: 10.03.2011
Сообщений: 75
По умолчанию

Цитата:
Сообщение от Serg-Grin Посмотреть сообщение
Здравствуйте Уважаемые!
Есть опыт у игрока, и есть заготовка чисел наперёд! [50,90,180 ... и.т.д.]
За определенный бой с противником дают случайный опыт.
Так вот дохожу до числа пример 50 дается (+1) стат к силе!
а у меня получается если я провожу еще один бой то еще раз (+1) к силе!
А мне нужно что бы только раз давалось до 90 набранных очков!!!
Надеюсь кто-то понял...
Или посоветуйте по своему на счет создания в игре опыта!
Лично я использую формулу расчета опыта на уровень. То есть количество опыта которое необходимо набрать на следующем уровне рассчитывается из предыдущего по одной и той же формуле. Я не очень понимаю суть описанной проблемы потому, что очень расплывчато все у вас описано. Если вы хотите чтобы при получении каждого уровня у вас добавлялось +1 к силе, то почему бы к вашему параметру силы не добавить уровень персонажа?

Я бы это организовал так. У вас есть текущий параметр силы, например
StrResult. Варианты прибавления силы могут быть совершенно различны. Если речь идет об элементах рпг, то сила может добавляться от одежды, оружия, артефактов, от принадлежности к расе, классу. Это может быть какой-то бонус или магия. Поэтому я бы создал функцию для расчета параметра силы со всеми входными параметрами. Чтобы не усложнять для вас ограничимся только уровнем. Пусть у вас будет какое-то базовое значение силы StrBasic. LvlResult - текущий уровень

StrResult:=StrBasic+LvlResult;

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

StrResult:=StrBasic+StrLvlBonus;

Исходя из моего опыта составлять какой либо параметр из отдельных бонусов гораздо удобнее, особенно когда у вас этих бонусов в проекте очень много. Так же будет удобно их отделять, менять или убирать.

А ошибка у вас по всей видимости из-за того, что в какой-то момент, при каком-то условии вы начинаете накапливать переменную StrResult (то есть ваш параметр силы). У вас наверняка в коде есть что-то вроде этого: StrResult:=StrResult+1;. Так вот чтобы не возникало таких ошибок, рекомендую никогда не накапливать такие переменные. А делать их составными.
EridorBlade вне форума Ответить с цитированием
Старый 17.10.2012, 15:08   #7
Serg-Grin
Дивиджей
Пользователь
 
Аватар для Serg-Grin
 
Регистрация: 05.01.2009
Сообщений: 84
По умолчанию

EridorBlade, спасибо Вам за такую информацию, с Вашими всеми ответами я понял, что не ожидал на сколько это просто!!! ...Спасибо Всем!)
Впишите в google:
DVJ Serg-Grin
И вы услышите мои песни
Serg-Grin вне форума Ответить с цитированием
Старый 17.10.2012, 17:18   #8
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Serg-Grin, простое накопление не дает возможности корректировать баланс в последствии. Нужны формулы, на которые намекнули еще более явно. Можно уже показать пример. У меня в проекте работают примерно вот такие:

UXPMin = ULevel^2 * k
UXPMax = (ULevel + 1)^2 * k

k - коэффициент прироста опыта. В любой момент можно знать шкалу опыта из данных об уровне персонажа. А далее условия простые. Если текущий опыт от боя UXP >= UXPMax, в переменную хранения пошло очко опыта, им распорядиться можно по усмотрению, т.е. кинуть на стат по выбору. При этом ULevel возрастает на 1, остаток опыта свыше UXPMax пошел в переменную UXP и шкала опыта пересчитывается, т.е. по формулам, показанным выше, определяются новые UXPMin и UXPMax.

Вопрос на засыпку: ...а как узнать ULevel из соотношения скилов и возможно не потраченных баллов опыта? ...я-то знаю, но хочу чтобы ты подумал сам.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его

Последний раз редактировалось Beermonza; 17.10.2012 в 17:20.
Beermonza вне форума Ответить с цитированием
Старый 18.10.2012, 01:32   #9
EridorBlade
CAE Engineer
Пользователь
 
Аватар для EridorBlade
 
Регистрация: 10.03.2011
Сообщений: 75
По умолчанию

А я пошел немного иным путем.
Чтобы не возникало путаницы, постараюсь привести пример в виде аналога для варианта который предлагает Beermonza

Минимальное значение опыта на каждом уровне я не учитываю.
LvlResult - текущий уровень.
Coeff_Inc - коэффициент прироста опыта.
ExpResult - текущее значение опыта, которое накапливается за победы над врагом , квесты, использованные предметы и т.д. В общем все что угодно и на ваше усмотрение .
ExpMax - максимальное значение опыта на текущем уровне. ( то количество опыта которое персонажу нужно набрать, чтобы перейти на следующий уровень)
ExpBasic - базовое значение опыта. ( то количество опыта которое необходимо набрать для получения второго уровня)

ExpMax:=ExpBasic; //первое значение максимального опыта это базовое значение.

Условие изменения ExpMax такое же как и у Beermonza
Если ExpResult>= ExpMax то
ExpMax:=ExpMax*Coeff_Inc ;
здесь же вы можете изменить все необходимые бонусы (прибавить силу и т.д.)

Текущий уровень определяется из максимального значения опыта ExpMax. При этом LvlResult не нужно менять руками в условии. А вот как при такой схеме определить LvlResult я расскажу подробно, но только при условии, что будет решена задачка от
Beermonza
EridorBlade вне форума Ответить с цитированием
Старый 18.10.2012, 15:58   #10
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

EridorBlade, я думаю автор темы не скоро появится, тем более, что уже всех поблагодарил. Мы можем остаться и помочь тем, кто будет еще читать эту тему.

Не вдаваясь в подробности кода, скажи ка, какие именно данные персонажа в твоей модели идут под сохранение в файл? ...те, что касаются опыта.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Опыт Штерна и Герлаха апрол Помощь студентам 0 23.02.2012 23:13
подредактировать античит к игре игре Nhl 09 (античит написан на дельфи) Viper18 Фриланс 3 03.08.2011 17:37
C++ первый опыт [продолжение] kin63camapa Софт 0 26.03.2010 23:19
C++ первый опыт kin63camapa Софт 9 13.03.2010 16:31
Как высчитать опыт? [Smarik] Паскаль, Turbo Pascal, PascalABC.NET 5 22.02.2008 22:34