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

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

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

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

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

ga

قسمت دوم

  • پشته ها

نام دیگر پشته LIFO می باشد (به معنای Last In First Out). یعنی آخرین عنصری که می آید، اول خارج می شود. پشته در کامپیوتر کاربرد های بسیاری دارد. یکی از این کاربرد ها توابع بازگشتی می باشد.

ساختار پشته مانند یک راهروی یکطرفه می باشد.

در تصاویر بالا ابتدا عدد 6 را به پشته Push کرده ایم، سپس از پشته Pop کردیم. به دلیل این که عدد 6 آخرین عددی بود که به درون پشته فرستادیم، عدد 6 بازگردانده می شود. (و از پشته حذف می شود)

توابع زیر برای پشته موجود می باشد:

 

ds_stack_create()

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

ds_stack_destroy(id)

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

ds_stack_clear(id)

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

ds_stack_copy(destination,source)

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

ds_stack_size(id)

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

ds_stack_empty(id)

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

ds_stack_push(id,val)

مقدار val را در بالای پشته ی مورد نظر قرار می دهد.

ds_stack_pop(id)

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

ds_stack_top(id)

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

ds_stack_write(id)

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

ds_stack_read(id,str)

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

 

  • شبکه هاnetwork-web-generic-02

 

شبکه آرایه ای دو بعدی می باشد که می توانید مقدار را به آن اضافه نمایید و یا از آن

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

می توانید مقادیر یک ناحیه از شبکه را تغییر دهید؛ مجموع، میانگین، کمترین مقدار

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

 

با شبکه می توانید یک مزرعه زیبا برای خود طراحی کنید!

 

ds_grid_create(w,h)

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

ds_grid_destroy(id)

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

ds_grid_copy(destination,source)

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

ds_grid_resize(id,w,h)

طول و ارتفاع شبکه ی مورد نظر را تغییر می دهد. توجه کنید که مقادیر قبلی در جای خود در شبکه باقی می مانند.

ds_grid_width(id)

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

ds_grid_height(id)

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

ds_grid_clear(id,val)

تمامی مقادیر در خانه های شبکه ی مورد نظر را به مقدار val تغییر می دهد.

ds_grid_set(id,x,y,val)

مقدار خانه در مختصات ذکر شده در شبکه ی مورد نظر را به val تغییر می دهد.

ds_grid_add(id,x,y,val)

به مقدار خانه در مختصات ذکر شده در شبکه ی مورد نظر val را اضافه می کند. در صورتی که عدد باشد جمع و در صورتی که رشته باشد به انتهای رشته ی قبلی می چسبد.

ds_grid_multiply(id,x,y,val)

همانند تابع قبلی برای ضرب می باشد. این تابع تنها برای اعداد کاربرد دارد.

 

ds_grid_set_region(id,x1,y1,x2,y2,val)

مقدار تمامی خانه ها در ناحیه ی ذکر شده (از طول x1 تا x2 و از ارتفاع y1 تا y2 که به صورت یک مربع می باشد) از شبکه ی مورد نظر را به val تغییر می دهد.

ds_grid_add_region(id,x1,y1,x2,y2,val)

به تمامی مقادیر در ناحیه ی ذکر شده، مقدار val را اضافه می کند. در صورتی که عدد باشد جمع و در صورتی که رشته باشد به انتهای رشته ی قبلی می چسبد.

ds_grid_multiply_region(id,x1,y1,x2,y2,val)

همانند تابع قبلی برای ضرب می باشد. این تابع تنها برای اعداد کاربرد دارد.

ds_grid_set_disk(id,xm,ym,r,val)

مقدار تمامی خانه ها در ناحیه ی دیسک شکل ذکر شده (به مرکز با طول xm و ارتفاع ym و با شعاع r) از شبکه ی مورد نظر را به val تغییر می دهد.

ds_grid_add_disk(id,xm,ym,r,val)

به تمامی مقادیر در ناحیه ی دیسک شکل ذکر شده، مقدار val را اضافه می کند. در صورتی که عدد باشد جمع و در صورتی که رشته باشد به انتهای رشته ی قبلی می چسبد.

ds_grid_multiply_disk(id,xm,ym,r,val)

همانند تابع قبلی برای ضرب می باشد. این تابع تنها برای اعداد کاربرد دارد.

ds_grid_set_grid_region(destination,source,x1,y1,x2,y2,xpos,ypos)

ناحیه با مختصات ذکر شده از شبکه ی source را در مکان با طول xpos و ارتفاع ypos از شبکه ی destination کپی می کند. مقدار در خانه با مختصات x1 و y1 از شبکه ی source در خانه با مختصات xpos و ypos در شبکه ی destination قرار می گیرد. شما می توانید ناحیه ای از یک شبکه را در مکانی دیگر از همان شبکه کپی کنید.

ds_grid_add_grid_region(id,source,x1,y1,x2,y2,xpos,ypos)

ناحیه با مختصات ذکر شده از شبکه ی source را به ناحیه با مکان به طول xpos و ارتفاع ypos از شبکه ی destination اضافه می کند.

ds_grid_multiply_grid_region(id,source,x1,y1,x2,y2,xpos,ypos)

همانند تابع قبلی برای ضرب می باشد. ضرب تنها برای اعداد کاربرد دارد.

ds_grid_get(id,x,y)

مقدار با مختصات x و y از شبکه ی مورد نظر را باز می گرداند.

ds_grid_get_sum(id,x1,y1,x2,y2)

مجموع مقادیر در ناحیه ی ذکر شده از شبکه ی مورد نظر را باز می گرداند. فقط هنگامی که خانه های ناحیه عددی باشند استفاده می شود.

ds_grid_get_max(id,x1,y1,x2,y2)

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

ds_grid_get_min(id,x1,y1,x2,y2)

کوچکترین مقدار در ناحیه ی ذکر شده از شبکه ی مورد نظر را باز می گرداند. فقط هنگامی که خانه های ناحیه عددی باشند استفاده می شود.

ds_grid_get_mean(id,x1,y1,x2,y2)

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

ds_grid_get_disk_sum(id,xm,ym,r)

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

ds_grid_get_disk_max(id,xm,ym,r)

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

ds_grid_get_disk_min(id,xm,ym,r)

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

ds_grid_get_disk_mean(id,xm,ym,r)

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

ds_grid_value_exists(id,x1,y1,x2,y2,val)

اگر مقدار val در ناحیه ی ذکر شده از شبکه ی مورد نظر باشد، مقدار صحیح باز می گرداند.

ds_grid_value_x(id,x1,y1,x2,y2,val)

طول خانه ای که مقدار val در آن در ناحیه ی ذکر شده از شبکه ی مورد نظر وجود دارد باز می گرداند.

ds_grid_value_y(id,x1,y1,x2,y2,val)

ارتفاع خانه ای که مقدار val در آن در ناحیه ی ذکر شده از شبکه ی مورد نظر وجود دارد باز می گرداند.

ds_grid_value_disk_exists(id,xm,ym,r,val)

اگر مقدار val در ناحیه ی دیسکی شکل ذکر شده از شبکه ی مورد نظر باشد، مقدار صحیح باز می گرداند.

ds_grid_value_disk_x(id,xm,ym,r,val)

طول خانه ای که مقدار val در آن در ناحیه ی دیسکی شکل ذکر شده از شبکه ی مورد نظر وجود دارد باز می گرداند.

ds_grid_value_disk_y(id,xm,ym,r,val)

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

 

ds_grid_shuffle(id)

مکان مقادیر شبکه ی مورد نظر را به صورت تصادفی جا به جا می کند.

ds_grid_write(id)

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

ds_grid_read(id,str)

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

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

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

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


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

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