زبان گیم‌میکر

بندانگشتی|تصویر مربوط به  زبان استودیو gamemaker
**جی‌ام‌ال(gml)** (زبان گیم میکر یا Game Maker Language) یک زبان برنامه‌نویسی مفسری است که برای استفاده به همراه برنامه‌های کاربردی ساخت بازی که Game Maker (گیم میکر) نامیده می‌شود ساخته شده‌است.

اصل این زبان در ابتدا به وسیلهMark Overmars ساخته شد تا سیستم عمل کشیدن و انداختن (بگیر و بکش) "drag-and-drop action" را که در Game Maker استفاده می‌شود تکمیل نماید.
هرچند که در آخرین نسخه اعمال کشیدن و انداختن به GML ترجمه شدند تا بخواهند ازآن به صورت مجزا باشند.
GML به سختی با محیط و فضای Game Maker مجتمع شده. اغلب عناصر مانند بلوک پیکسلها و صداها در داخل Game Maker IDE استفاده شدند (در حالی که می‌توانستند ازفایل‌های خارجی استفاده کنند) 
معماری Game Maker طراحی شده تا اعمالی مانند کشف رویدادها، طراحی سطح و پیکر بندی شی‌ها را اجرا کند بدون آنکه نیاز باشد تا کد آن را به صورت دستی پیاده‌سازی کرد.(اضافات کد را به وسیله محیط تعاملی پیشرفته خود کم کرده‌است.)
یک تصور غلط وجود دارد که می‌گوید زبان‌هایی مانندPascal وC++ به صورت مستقیم در GML به کار رفته‌است.
این تصور اشتباه است و از آنجا ناشی می‌شود که GML این توانایی را دارد که شکلبندی Pascal وC++ را به کار ببرد. (مثلاً"&&" قابل تعویض با "and" می‌باشد.)

## [[کتابخانه|کتابخانه‌ها]] Libraries
در مجموعه دستورالعمل‌های کشیدن و انداختنی کتابخانه نامیده می‌شود. در محیط تعاملی کتابخانه‌ها به عنوان تب‌هایی شامل شکلک‌ها نمایش داده می‌شوند که دستورلعمل نامیده می‌شود.
هر دستورالعمل یک مجموعه متن gml یا یک تابع می‌باشد که کاربر می‌تواند برای بازی به کار برد. با یک سری کتابخانه‌ها ی پیش‌ساخته آماده شده‌است که دستور العمل‌های معمولی است که در اغلب بازی‌ها به کار می‌رود.
نحو و مفاهیم در GML
ساختار GML بسیار شبیه به زبان C است. این شباهت در کاربرد بلوک‌ها و فراخوانی توابع، تخصیص متغیر‌ها، نحو عملگرها و غیره مشهود است.
GML بین متون و عبارات منطقی تفاوت می‌گذارد. برای مثال g
// This is a comment
/* this is a C-Style comment. */

/* temporary variable declaration.
   A temporary variable will be released at the end of a script.
   Note that this doesn't declare it to be of a specific type! */

var xx, yy, nn;

// A conditional. It can also be shortened to "if (can_shoot)".
if (can_shoot = true) // "=" and "==" can be used interchangeably in conditionals
{ // This begins a block of code. You can also use "begin" as with Pascal.

   /* Here we are setting the variable to false. This could also be written as "can_shoot = 0;"
      since Game Maker doesn't distinguish between integer and boolean types. */
   can_shoot = false;

   /* Here you are setting the 0th alarm to five steps. The alarm
      variable will automatically count down to 0, and when it hits 0,
      the alarm0 event will be triggered. */
   alarm[0] = 5;

   /* Here the temporary variable xx is defined implicitly as an integer, 
      and the lengthdir_x function is used. */
   xx = x + lengthdir_x(14, direction);
   yy = y + lengthdir_y(14, direction);

   //This function creates a obj_bullet and then returns its instance id to nn.
   nn = instance_create(xx, yy, obj_bullet);

   /* The with statement allows you to access the fields of an object directly, 
      without having to write statements like nn.speed or nn.direction. */
   with (nn)
   {
      speed = obj_tank.speed + 3;
      direction = obj_tank.direction;
   }
}

GML از تغییرات زیاد در نحو پشتیبانی می‌کند. برای دلیل مثال قبلی می‌تواند به این صورت نیز نوشته شود:

```c
var xx, yy, nn;
if can_shoot = true then begin
   can_shoot := false
   alarm[0] := 5
   xx := x + lengthdir_x(14, direction)
   yy := y + lengthdir_y(14, direction)
   nn := instance_create(xx, yy, obj_bullet)
   with nn begin
      speed := obj_tank.speed + 3
      direction := obj_tank.direction
   end
end
```

در اینجا مثالی از حرکت کلیدهای کنترلی آمده‌است. دستگاه حرکتی دو آرگومان می‌گیرد. مسیر و سرعت. فراخوانی این تابع دو متغیر محلی speed&direction را می‌سازد. که در هر مرحله GML خود نمونه‌ها را به روز رسانی می‌کند:

```c
if (keyboard_check(vk_left)) motion_set(180,4);
if (keyboard_check(vk_up)) motion_set(90,4);
if (keyboard_check(vk_right)) motion_set(0,4);
if (keyboard_check(vk_down)) motion_set(270,4);
if (keyboard_check(vk_nokey)) motion_set(0,0);
```

در اینجا نمونه از یک اسکریپت پیچیده تر یک سطح بازی آمده‌است. بااستفاده از این بازیکن می‌تواند روی تپه و عوارض طبیعی زمین قدم بزند:

```c
if (!place_free(x-4,y))
{
   if (place_free(x-4,y-4))
   {
      x-=4;
      y-=4;
   }
   else if (place_free(x-3,y-5))
   {
      x-=3;
      y-=5;
   }
   else if (place_free(x-2,y-6))
   {
      x-=2;
      y-=6;
   }
}
else
   x-=4;
```

در این جام هم یک کد آمده که سقفی سه بعدی می‌سازد. تابع d3d_start() باید قبلاً فراخوانی شده باشد:

```c
d3d_draw_floor(0,0,0,500,600,1,background1,.01,.01);
```


## صفحات مرتبط
گیم میکر

## منابع

رده:زبان‌های برنامه‌نویسی
رده:زبان‌های برنامه‌نویسی دامنه-مشخص