سیستم لول آپ بازی
فهرست مطالب
سیستم لول آپ بازی به چه صورت کار میکند ؟
سوالی که به صورت کاملا تخصصی در این مقاله قصد پرداختن به آن را داریم.
سیستم لول آپ عملا اشاره دارد به فرمول رشد و ارتقای کارکتر پلیر در بازی.
این به این معناست که نشان می دهد کارکتر در بازی در چه شرایطی و با چه پارامترهایی می تواند خود را ارتقا دهد.
سیستم لول، بخشی جدایی ناپذیر از مکانیک بازی ها هستند.
در معمولترین سناریو، وقتی بازیکن در نبردی پیروز میشود، امتیازی دریافت خواهد کرد که آن امتیاز منجرب به ارتقای لول آن می شود.
هنگامی که امتیاز به یک آستانه معین می رسد، لول جدیدی اعطا می شود که باعث افزایش آمار، توانایی ها و … کارکتر می شود.
در ادامه با ما همراه باشید تا به شکل کامل در رابطه با این سیستم و نحوه ی کار آن توضیح دهیم.
لول چیست ؟
اجازه دهید از ابتدای کار شروع کنیم و قبل از هر چیزی به مفهوم لول بپردازیم.
لول عددی است که قدرت کلی کارکترها و دشمنان بازی شما را نشان می دهد.
به عنوان مثال، یک جادوگر لول ۱ در ابتدای ماجراجویی که به تازگی وارد آن شده، بسیار ضعیف خواهد بود.
از طرف دیگر، یک جادوگر لول ۸۰ نبردهای زیادی را انجام داده، ماموریت های بی شماری را فتح کرده و با دشمنان قدرتمندی روبرو شده است.
سطوح (لول ها) معمولاً از طریق جمع آوری امتیازهای تجربی (XP) به دست می آیند.
XP ها برای سنجش میزان تجربه یک کارکتر و میزان نزدیک بودن او به کسب سطح جدید استفاده می شوند.
پس از رسیدن به لول جدید، پاداش به بازیکن داده می شود که این فرایند به صورت کامل در مقاله ی سیستم پاداش بازی توضیح داده شده است.
لول نباید تنها به کاراکترها محدود شوند.
آیتمها، سلاحها یا حتی تواناییهای بهدستآمده ممکن است به تنهایی لولی کاملاً جدا از لول اصلی کارکتر داشته باشند.
به عنوان مثال، Final Fantasy V یک سیستم فوقالعاده ارائه میدهد که در آن کارکترهای فردی میتوانند در هر نقطه از بازی به یک کلاس خاص تبدیل شوند.
برای پیشرفت بیشتر با آن کلاس، یک کارکتر باید نوع متفاوتی از امتیازها را جمع می کرد تا بتواند قدرت کامل خود را باز کند.
لول دیزاین در بازی های RPG
در مقاله ای تحت عنوان بازی های RPG در رابطه با این سبک بازی ها توضیح داده ایم؛ اگر این مقاله را خوانده باشید متوجه می شوید که عملا بیس بازی های RPG مبتنی بر رشد و توسعه ی کارکتر و قدرت های آن می باشد.
به صورت کلی چند دلیل وجود دارد که چرا باید یک سیستم لول آپ را به عنوان بخشی از مکانیک بازی RPG خود بگنجانید :
شما به بازیکن حس پیشرفت می دهید.
جای تعجب نیست که ما دوست داریم برای تلاش هایمان در دستیابی به اهداف، پاداش دریافت کنیم.
ایجاد این حس در حین بازی نیز به همین ترتیب است.
هر چه بازیکن برای حل یک مشکل تلاش بیشتری کند، جایزه بهتری دریافت خواهد کرد.
با این حال، برای دادن مقداری معنا و ارزش به یک لول، باید دشواری رسیدن به آن را نیز در نظر داشته باشیم.
در RPG ها سطوح نه تنها نشان دهنده رشد کارکترهای ما هستند، بلکه تعیین می کنند که چقدر آسان خواهد بود که بازیکن بر موانع سر راه خود غلبه کند.
هنگامی که یک کارکتر به لول جدیدی برسد، تسخیر دشمنان در یک منطقه خاص کمی آسان تر می شود.
این یک راه جالب برای هدایت بازیکن در دنیای بازی ایجاد می کند.
هنگامی که یک سیستم لول را به بازی خود معرفی می کنید، می توانید تمام پیچیدگی های مکانیک خود را با سرعتی مناسب و بدون اینکه بازیکن را تحت تاثیر قرار دهید، ارائه دهید.
نمونهای از آن میتوان به مکانیک درخت مهارت در بازی The Witcher 3: Wild Hunt اشاره کرد.
در ساعات اولیه بازی، قهرمان اصلی تنها راه های محدودی برای مقابله با حریفان خود دارد.
با این حال، با جمع آوری امتیازات کافی، بازیکن می تواند پتانسیل جنگی خود را با معرفی اشکال پیچیده تری از حمله و دفاع گسترش دهد.
فرمول های رایج در سیستم لول آپ
برای پیاده سازی یک سیستم لول، ابتدا باید فرمولی برای کسب سطوح متوالی در طول بازی ابداع کنیم.
این فرمول میزان امتیازات تجربی را که کارکتر ما برای رسیدن به یک سطح باید کسب کند را تعیین می کند.
برای ایجاد چالش برای بازیکن، باید آن را به گونهای انجام دهیم که هر سطح جدید نیاز به جمع آوری مقدار فزاینده ای از XP داشته باشد.
در ادامه ما برخی از فرمول های رایج بازی ها را نام خواهیم برد.
Dungeons & Dragons (D&D)
D&D قدیمی ترین منبع الهام برای سیستم های لول آپ مدرن است.
این سیستم مبتنی بر افزایش آستانه امتیاز تجربه بازیکن پس از رسیدن به یک سطح جدید است.
از فرمول بسیار چالش برانگیزی نیز استفاده می کند زیرا تعداد XP به صورت تصاعدی افزایش می یابد:
Pokemon
Pokemon نسل اول دارای دو سیستم تراز است که یکی سریعتر از دیگری حرکت می کند.
حالت سریعتر فرمول XP زیر را دارد :
پس از اعمال فرمول، مجموع محاسبه شده به نزدیکترین عدد صحیح گرد می شود.
Disgea
Disgaea از فرمولی استفاده می کند که با هر سطح جدید امتیاز تجربه را بسیار ملایم افزایش می دهد.
می توان گفت که کاملاً بر خلاف آنچه توسط D&D ارائه شده است:
مشابه پوکمون، مجموع محاسبه شده به نزدیکترین عدد صحیح گرد می شود.
Shining Force II
در این بازی همه کاراکترهای شما با به دست آوردن 100 XP به سطح بالاتری دست می یابند.
مقدار در کل بازی تغییر نمی کند؛ با این حال، چیزی که کسب سطوح را دشوار می کند این واقعیت است که XP به دست آمده پس از هر نبرد بر اساس قدرت شخصیت نسبت به حریف او است.
وقتی کارکتر شما ضعیف تر از دشمنی است که با آن روبروست، حداکثر تجربه (~49 امتیاز) را به دست می آورد.
اگر کارکتر شما کم و بیش با دشمنی که با آن روبروست در یک سطح باشد، تجربه متوسطی به دست خواهد آورد (20-30 امتیاز).
اگر کارکتر شما از دشمنی که با آن روبروست قوی تر باشد، حداقل تجربه (~1-3 امتیاز) را به دست خواهد آورد.
این فرمول را می توان در یک نماد ریاضی مانند زیر نشان داد:
مفاهیم ریاضی برای سیستم لول آپ
خب بیایید کمی وارد ریاضیات و فرمول ها شویم.
شاید از ریاضیات خوشتان نیاید، اما اگر وارد دنیای بازی سازی شدید، امکان فرار از آن وجود ندارد.
Constant
ساده ترین راه برای توسعه فرمول ما این است که آن را طوری بسازیم که XP مورد نیاز با نرخ ثابت افزایش یابد.
برای این منظور، باید از یک تابع خطی (معادله) استفاده کنیم.
همانطور که از نام آن پیداست، تابعی است که یک خط مستقیم را در صفحه دو بعدی توصیف می کند.
رایج ترین شکل برای نوشتن آن معادله slope-intercept است:
وقتی این مقادیر را تغییر می دهیم، می توانیم فرمول منحصر به فرد خود را طراحی کنیم که دارای رشد تند یا ملایم XP باشد.
پیاده سازی این فرمول در سی شارپ نسبتا آسان است.
نمونه ای از تابعی که مقدار کل XP را در سطح فردی برمی گرداند می تواند به این شکل باشد.
double getXP(int lvl, float factor)
{
double xp = (factor * lvl) + 1;
xp = Mathf.Ceil((float)xp);
return xp;
}
توجه داشته باشید که با ()Mathf.Ceil عدد را به کوچکترین عدد صحیح بزرگتر یا مساوی با نتیجه گرد می کنیم.
می توان نوعی گرد کردن را در پایان انجام دهیم تا مطمئن شویم که سیستم لول بر اساس اعداد کامل هستند.
دلیل آن این است که کار با اعداد صحیح به جای اعداد ممیزی Float بسیار آسان تر است.
با این حال، این به شما و طراحی بازی شما بستگی دارد.
در ابتدا آهسته بعدا سریع تر
در برخی موارد شما دوست دارید که XP ابتدا کند و سپس سریعتر افزایش یابد.
اگر ترجیح شما این است، باید از توابع چند جمله ای یا نمایی استفاده کنیم.
چند جمله ای ها
کار کردن با چند جمله ای ها عالی است زیرا می توانند ثابت، متغیر و توان داشته باشند.
علاوه بر این، تعریف دقیق آنها باعث می شود که به راحتی عمل کنند.
به عنوان مثال، هنگامی که دو چند جمله ای را با هم جمع می کنید، یک چند جمله ای دریافت خواهید کرد.
وقتی ضرب می کنید همین قانون صدق می کند.
یعنی در هر نقطه از بازی می توانید فرمول خود را با عملیات ساده حسابی تغییر دهید!
بیایید فرمول خود را با استفاده از یک چند جمله ای تعریف کنیم.
ما در این مثال آن را طوری می سازیم که برای چند سطح اول، XP به آرامی افزایش یابد و سپس بسیار سریع رشد کند.
برای این منظور، ما یک معادله چند جمله ای درجه 9 می نویسیم.
y = (x-2)(x-1)(x-2)(x-2)(x-2)(x-2)(x-2)(x-2)(x-1)+1
جدول زیر رشد امتیاز XP برای 10 آستانه سطح اول را نشان می دهد.
همانطور که به وضوح می بینید، مقادیر آنها در 2-3 سطح اول چندان تغییر نمی کند.
از سطح 5 به بعد XP سر به فلک می کشد.
Lvl = 2 : XP = 1 |
Lvl = 3 : XP = 5 |
Lvl = 4 : XP = 1153 |
Lvl = 5 : XP = 34993 |
Lvl = 6 : XP = 409601 |
Lvl = 7 : XP = 2812501 |
Lvl = 8 : XP = 13716865 |
Lvl = 9 : XP = 52706753 |
Lvl = 10 : XP = 169869313 |
Lvl = 11 : XP = 478296901 |
اجرای این فرمول در سی شارپ می تواند به شکل زیر باشد:
double getXP(int lvl)
{
double xp = (lvl-2)*(lvl-1)*(lvl-2)*(lvl-2)*(lvl-2)*(lvl-2)*(lvl-2)*(lvl-2)*(lvl-1)+1;
xp = Mathf.Ceil((float)xp);
return xp;
}
اگر میخواهید XP شما به آرامی و سپس سریعتر رشد کند، اما به شیوهای ملایمتر تابع نمایی راه حل است.
البته هنگام ایجاد یک فرمول، می توانیم متغیرها را هر طور که می خواهیم تغییر دهیم.
برای هدف بازی ما، یک متغیر ضرب (a) و یک ثابت (c) اضافه می کنیم.
اینها شیب و نقطه عبور خط از محور Y را مشخص می کنند.
وقتی به نمایش جدول زیر نگاه می کنیم، می بینیم که مقادیر به آرامی در حال افزایش است.
Lvl = 2 : XP = 1 |
Lvl = 3 : XP = 2 |
Lvl = 4 : XP = 2 |
Lvl = 5 : XP = 2 |
Lvl = 6 : XP = 3 |
Lvl = 7 : XP = 4 |
Lvl = 8 : XP = 5 |
Lvl = 9 : XP = 6 |
Lvl = 10 : XP = 7 |
Lvl = 11 : XP = 9 |
Lvl = 12 : XP = 12 |
Lvl = 13 : XP = 16 |
Lvl = 14 : XP = 20 |
Lvl = 15 : XP = 26 |
برای پیاده سازی فرمول نمایی که ایجاد کردیم، از تابع داخلی ()Mathf.Pow در سی شارپ استفاده می کنیم.
توجه داشته باشید که با ()Mathf.Floor مقدار را به مقدار انتگرال کوچکتر یا مساوی عدد مشخص شده گرد می کنم.
با این حال، این کاملاً به شما بستگی دارد که چگونه می خواهید این کار را انجام دهید.
double getXP(int lvl, float a, float b, float c)
{
double xp = a * (Mathf.Pow(b, lvl)) + c;
xp = Mathf.Floor((float)xp);
return xp;
}
در ابتدا سریع و سپس آهسته
مدل استاندارد برخی از بازی ها به همین شکل می باشد.
که XP در ابتدا به سرعت بالا می رود اما سپس به سمت سطوح بالاتر کاهش می یابد، بهترین انتخاب شما ریشه n ام یا توابع لگاریتمی است، که ما تنها توابع لگاریتمی را مورد بررسی قرار می دهیم.
با توابع لگاریتمی میتوان به منحنیهای کاملاً مشابهی در مورد ریشه n برسیم.
در اینجا مهمترین متغیری که در معادله شرکت میکند، «پایه» لگاریتم است زیرا تعیین میکند که منحنی با چه سرعتی مسطحتر میشود.
لگاریتم در خالص ترین شکل خود را می توان به صورت زیر نوشت.
لگاریتمها ارتباط نزدیکی با توانها دارند، زیرا نتیجه آنها به ما میگوید که دنبال چه توانی هستیم.
این در ایجاد فرمول اساسی است، زیرا می توانیم شیب منحنی را با دستکاری مقدار “پایه” تنظیم کنیم.
هرچه پایه بالاتر باشد، منحنی سریعتر صاف تر می شود.
زمانی که پایه روی مقادیر پایینتر تنظیم شود، برعکس اتفاق میافتد.
محبوب ترین لگاریتم ها لگاریتم های پایه 2 و پایه 10 به دلیل کاربردی بودن آنها هستند.
با این حال، برای سیستم های لول می توانیم از هر پایه ای که نیاز داریم استفاده کنیم.
با این فرض که ما بازی خود را در یونیتی می سازیم، می توانیم از مزیت تابع ()Mathf.Log استاتیک از پیش تعریف شده C# موجود در System namespace استفاده کنیم.
بیایید فرمول خود را با استفاده از لگاریتم تعریف کنیم.
ما از مقدار ثابت اضافی برای کنترل بهتر موقعیت شروع منحنی استفاده خواهیم کرد.
در معادله بالا، پایه بسیار زیاد است، بنابراین مقدار امتیازات تجربه خیلی سریع “مسطح” می شود.
هنگامی که به محورهای زیر نگاه می کنید، زمانی که پایه خود را پایین می آورید، به وضوح می توانید تفاوت در رشد و سرعت را ببینید.
b=1.1
b=6.2
جدول زیر نشان می دهد که چگونه امتیاز تجربه برای 10 آستانه اول افزایش می یابد.
توجه داشته باشید که مقدار XP که کارکتر شما باید جمع کند برای رسیدن به سطوح بالاتر کم و بیش یکسان می شود.
(Gentle curve) | (Steep curve) |
---|---|
Lvl = 2 : XP = 2 | Lvl = 2 : XP = 9 |
Lvl = 3 : XP = 2 | Lvl = 3 : XP = 13 |
Lvl = 4 : XP = 2 | Lvl = 4 : XP = 16 |
Lvl = 5 : XP = 2 | Lvl = 5 : XP = 18 |
Lvl = 6 : XP = 2 | Lvl = 6 : XP = 20 |
Lvl = 7 : XP = 3 | Lvl = 7 : XP = 22 |
Lvl = 8 : XP = 3 | Lvl = 8 : XP = 23 |
Lvl = 9 : XP = 3 | Lvl = 9 : XP = 25 |
Lvl = 10 : XP = 3 | Lvl = 10 : XP = 26 |
Lvl = 11 : XP = 3 | Lvl = 11 : XP = 27 |
یک بار دیگر، برای پیاده سازی فرمول بالا در سی شارپ، از تابع ()Mathf.Log آن استفاده می کنیم.
راحتی استفاده از این تابع این است که به شما امکان می دهد پایه لگاریتم را با پارامتر دوم مشخص کنید.
double getXP(int lvl, float logBase, float a)
{
double xp = Mathf.Log(lvl, logBase) + a;
xp = Mathf.Ceil((float)xp);
return xp;
}
جمع بندی
در این مقاله به بررسی سیستم لول برای رشد در بازی ها بر اساس فرمول های مختلف پرداختیم.
ابتدا با توضیح مفهوم اصلی سیستم های لول و دلیل استفاده از آنها در بازی ها شروع کردیم.
سپس سطح رشد سیستم ها را مورد بررسی قرار دادیم؛ که بیشتر برای بازی های RPG مطرح بود.
مقاله با نشان دادن اینکه چگونه توابع و مفهوم ریاضی را می توان در توسعه فرمول های منحصر به فرد برای بازی خود استفاده کرد، به پایان رسید.
فرمول های ارائه شده در این مقاله به هیچ وجه نهایی نیستند!
هدف اصلی این بود که به شما صرفا یک نقطه شروعی داده شود.
منبع
مهرسا امینی
برنامه نویس بازی و سایت
برای یک قایق بی هدف، موج ها و حوادث دریا تصمیم گیری می کنند.