هیچ محصولی به سبد خرید اضافه نکرده اید

دنیای بازی و گیمینگ

آموزش ساختمان داده ها در Game Maker (قسمت اول)

در بازی اغلب شما نیاز دارید اطلاعاتی را ذخیره کنید. برای مثال وسایلی که کاراکتر شما در کوله پشتی خود حمل می کند و شما می خواهید آن را ذخیره کنید. شما می توانید چنین اطلاعاتی را در آرایه ذخیره نمایید، اما هنگامی که بخواهید عملیات پیچیده تری بر روی این آرایه انجام دهید نیاز به کدهای زیادی دارید که سرعت اجرای آن ها بالا نخواهد بود.

برای چنین مواردی گیم میکر ساختمان داده هایی را آماده کرده است که با استفاده از آن ها راحت تر بازی خود را پیاده سازی می کنید.

ga

 

قسمت اول

قبل از استفاده از ساختمان داده ها به چند نکته توجه کنید.

اولین نکته این که وقتی شما یک ساختمان داده تعریف می کنید، به صورت سراسری تعریف می شود و توسط دیگر اشیاء نیز قابل استفاده می باشد. در صورتی که شناسه ی آن ساختمان داده را داشته باشید می توانید توسط هر شی ئی به آن ساختمان داده دسترسی داشته باشید.

همچنین توجه کنید با از بین رفتن شی ئی که آن ساختمان داده را ایجاد کرده ساختمان از بین نمی رود. پس باید ساختمان داده ها را پس از اتمام کار با آن ها از بین ببرید.

در تعداد ساختمان داده ها برای ایجاد یا استفاده کردن همانند متغیرها محدودیتی نمی باشد.

همچنین توجه کنید که با ذخیره کردن بازی توسط توابع Save و Load بازی، ساختمان داده ها ذخیره نمی شوند. در نتیجه می بایست در صورت استفاده از ساختمان داده ها، بازی را با کدی که خودتان می نویسید ذخیره کنید.

هنگام مقایسه مقدارها، برای مثال هنگام جستجو در یک Map یا مرتب کردن List ها گیم میکر بر اساس دقتی که در آن تعیین شده برای مقایسه اعداد تصمیم تصمیم می گیرد. برای مثال دو مقدار (5/3)*3 با 5 برابر نمی باشد. این مقایسه بر اساس دقت پیش فرض گیم میکر یعنی 0.0000001 انجام می شود. شما می توانید این مقدار را با تابع زیر تغییر دهید.

1
ds_set_precision(prec)

هنگامی که تفاوت دو عدد از مقدار تعیین شده برای دقت کمتر باشد، آن دو عدد برابر در نظر گرفته می شوند.

توجه نمایید این تابع تنها برای ساختمان داده ها کاربرد دارد و در مقایسه های دیگر تغییری ایجاد نمی کند.

6 نوع ساختمان داده در گیم میکر وجود دارد.

 

  • صف های اولویت دارfig548_01_0

صف های اولویت دار نوع خاصی از صف می باشند که در آن ها مقادیر دارای اولویت های متفاوت می باشند. ورود و خروج اطلاعات در این صف ها همانند صف های معمولی می باشد، با این تفاوت که مقادیر با اولویت های بیشتر زودتر خارج می شوند. پس هنگام خارج کردن یک مقدار از صف، از بین مقادیر با بیشترین اولویت قدیمی ترین مقدار را انتخاب می کنیم. یک صف نانوایی را تصور کنید که:

در آن قدرت مطرح باشد؛ کسی که زورش بیشتر است، هر چند دیرتر از بقیه وارد

صف شده باشد، مهم نمی باشد و زودتر از دیگران نان خود را گرفته و از صف

خارج می شود!

 

ds_priority_create()

برای استفاده از یک صف اولویت دار، ابتدا باید آن را با این تابع ایجاد کنید. این تابع شناسه ی صف را باز می گرداند که آن را درون متغیری بریزید تا در توابع بعدی استفاده شود. شما می توانید بیش از یک صف اولویت دار ایجاد کنید.

ds_priority_destroy(id)

صف اولویت دار مورد نظر را از بین می برد. پس از اتمام کار با یک صف اولویت دار می بایست فضای اختصاص یافته به آن را با این تابع آزاد کرد.

ds_priority_clear(id)

تمامی عناصر داخل صف اولویت دار را حذف می کند. توجه نمایید که خود صف را حذف نمی کند، بلکه آن را خالی می کند.

ds_priority_copy(destination,source)

تمامی عناصر صف اولویت دار source را در صف اولویت دار destination کپی می کند.

ds_priority_size(id)

تعداد عناصر موجود در صف اولویت دار مورد نظر را باز می گرداند.

ds_priority_empty(id)

اگر صف اولویت دار مورد نظر خالی باشد مقدار صحیح باز می گرداند.

ds_priority_add(id,val,priority)

مقدار جدیدی را بر اساس اولویت آن به صف اولویت دار مورد نظر اضافه می کند.

ds_priority_change_priority(id,val,priority)

اولویت مقدار val در صف اولویت دار مورد نظر را تغییر می دهد.

ds_priority_find_priority(id,val)

اولویت مقدار val در صف اولویت دار مورد نظر را باز می گرداند.

ds_priority_delete_value(id,val)

مقدار val را از صف اولویت دار مورد نظر حذف می کند.

ds_priority_delete_min(id)

قدیمی ترین عنصر با کمترین اولویت را باز می گرداند و از صف حذف می کند.

ds_priority_find_min(id)

قدیمی ترین عنصر با کمترین اولویت را باز می گرداند، اما آن را حذف نمی کند.

ds_priority_delete_max(id)

قدیمی ترین عنصر با بیشترین اولویت را باز می گرداند و از صف حذف می کند.

ds_priority_find_max(id)

قدیمی ترین عنصر با بیشترین اولویت را باز می گرداند، اما آن را حذف نمی کند.

ds_priority_write(id)

رشته ای را باز می گرداند که حاوی اطلاعات عناصر صف اولویت دار مورد نظر می باشد و می توان آن را در فایلی ذخیره کرد.

ds_priority_read(id,str)

رشته ی دریافتی توسط تابع قبل را به صف مورد نظر انتقال می دهد.

 

  • نقشه ها261891-zelda_map

در این ساختار داده، عناصر یک جفت کلید و مقدار می باشند که بر اساس کلید مرتب

می باشند. در آرایه ها و لیست ها، عناصر در اندیس های آرایه ذخیره می شدند که

این اندیس ها عددهایی پشت سر هم بودند؛ اما در نقشه ها می توان به جای اندیس

از کلید استفاده کرد که می تواند رشته نیز باشد. هنگامی که عناصر جدید را به نقشه

اضافه می کنید، بر اساس کلید در جای خود قرار می گیرد. همچنین می توانید کلید

قبلی و بعدی یک کلید را پیدا کنید.

توجه کنید هنگامی که از رشته ها در کلید استفاده می کنید، آن ها بر اساس کد اسکی حروف برای مرتب شدن ارزش گذاری می شوند.

ds_map_create()

برای استفاده از یک نقشه، ابتدا باید آن را با این تابع ایجاد کنید. این تابع شناسه ی نقشه را باز می گرداند که آن را درون متغیری بریزید تا در توابع بعدی استفاده شود. شما می توانید بیش از یک نقشه ایجاد کنید.

ds_map_destroy(id)

نقشه مورد نظر را از بین می برد. پس از اتمام کار با یک نقشه می بایست فضای اختصاص یافته به آن را با این تابع آزاد کرد.

ds_map_clear(id)

تمامی عناصر داخل نقشه را حذف می کند. توجه نمایید که نقشه را حذف نمی کند، بلکه آن را خالی می کند.

ds_map_copy(destination,source)

تمامی عناصر نقشه source را در نقشه destination کپی می کند.

ds_map_size(id)

تعداد عناصر موجود در نقشه مورد نظر را باز می گرداند.

ds_map_empty(id)

اگر نقشه خالی باشد مقدار صحیح باز می گرداند.

ds_map_add(id,key,val)

مقدار val را با کلید key به نقشه مورد نظر می افزاید. این جفت بر اساس کلید در جای خود قرار می گیرد.

ds_map_replace(id,key,val)

مقدار val را جایگزین مقدار عنصر با کلید key در نقشه ی مورد نظر می کند.

ds_map_delete(id,key)

عنصر با کلید key را از نقشه ی مورد نظر را حذف می کند.

ds_map_exists(id,key)

اگر کلید key در نقشه ی مورد نظر وجود داشته باشد مقدار صحیح را باز می گرداند.

ds_map_find_value(id,key)

مقدار کلید key را از نقشه ی مورد نظر باز می گرداند.

ds_map_find_previous(id,key)

همان طور که گفتیم، عناصر در نقشه ها بر اساس کلید مرتب می شوند. این تابع کلید (نه مقدار) قبل (کوچکتر) از کلید ذکر شده را باز می گرداند.

ds_map_find_next(id,key)

این تابع کلید بعد از کلید ذکر شده را باز می گرداند.

ds_map_find_first(id)

اولین (کوچکترین) کلید نقشه را باز می گرداند.

ds_map_find_last(id)

آخرین (بزرگترین) کلید نقشه را باز می گرداند.

ds_map_write(id)

رشته ای را باز می گرداند که حاوی اطلاعات عناصر نقشه می باشد و می توان آن را در فایلی ذخیره کرد.

ds_map_read(id,str)

رشته ی دریافتی توسط تابع قبل را به نقشه مورد نظر انتقال می دهد.

 

  • لیست هاwikiproject_council_project_list_icon-svg

لیست یک سری اطلاعات با ترتیب خاص می باشد. ساختار لیست بسیار شبیه به آرایه

می باشد، با این تفاوت که در لیست به راحتی می توان مقداری را در مکان خاصی از

آن افزود و یا حذف کرد.

ds_list_create()

برای استفاده از یک لیست، ابتدا باید آن را با این تابع ایجاد کنید. این تابع شناسه ی لیست را باز می گرداند که آن را درون متغیری بریزید تا در توابع بعدی استفاده شود. شما می توانید بیش از یک لیست ایجاد کنید.
ds_list_destroy(id)

لیست مورد نظر را از بین می برد. پس از اتمام کار با یک لیست می بایست فضای اختصاص یافته به آن را با این تابع آزاد کرد.

ds_list_clear(id)

تمامی عناصر داخل لیست را حذف می کند. توجه نمایید که لیست را حذف نمی کند، بلکه آن را خالی می کند.

ds_list_copy(destination,source)

تمامی عناصر لیست source را در لیست destination کپی می کند.

ds_list_size(id)

تعداد عناصر موجود در لیست مورد نظر را باز می گرداند.

ds_list_empty(id)

اگر لیست خالی باشد مقدار صحیح باز می گرداند.

ds_list_add(id,val)

مقدار val را به انتهای لیست مورد نظر می افزاید.

ds_list_insert(id,pos,val)

مقدار val را در محل مشخص شده در لیست مورد نظر قرار می دهد. ابتدای لیست اندیس 0 دارد و انتهای لیست برابر با تعداد عناصر منهای 1 می باشد.

ds_list_replace(id,pos,val)

عنصر در خانه ی pos لیست مورد نظر را با val جایگزین می کند.

ds_list_delete(id,pos)

عنصر در خانه ی pos لیست مورد نظر را حذف می کند.

ds_list_find_index(id,val)

مکان عنصر با مقدار val را باز می گرداند. اگر عنصری پیدا نکند مقدار -1 را باز می گرداند.

ds_list_find_value(id,pos)

مقدار عنصری که در مکان pos وجود دارد را باز می گرداند.

ds_list_sort(id,ascend)

لیست مورد نظر را مرتب می کند. اگر پارامتر ascend مقدار true باشد، لیست صعودی مرتب می شود، در غیر این صورت نزولی مرتب می شود.

ds_list_shuffle(id)

مکان عناصر لیست را به صورت تصادفی تغییر می دهد.

ds_list_write(id)

رشته ای را باز می گرداند که حاوی اطلاعات عناصر لیست می باشد و می توان آن را در فایلی ذخیره کرد.

ds_list_read(id,str)

رشته ی دریافتی توسط تابع قبل را به لیست مورد نظر انتقال می دهد.

تصویر پروفایل سید جاوید حسنی

سید جاوید حسنی

به بازی سازی علاقه دارم و امیدوارم از آموزش هایی که براتون میزارم مشکلاتتون حل بشه.


یک دیدگاه بگذارید

لطفا اگر سوالی خارج از موضوع این مطلب دارید آن را در فروم مطرح کنید.