یاد بگیرید که چگونه اولین بازی ساده خود را از ابتدا تا انتها ایجاد کنید.
اگر به دنبال یادگیری ساخت بازی هستید، PICO-8 یک ابزار عالی برای استفاده است. میتوانید بازیهای سبک 8 بیتی و یکپارچهسازی با سیستمعامل بسازید و آنها را به صورت آنلاین برای هر کسی توزیع کنید.
PICO-8 ویرایشگر و آهنگساز موسیقی خود را برای ساخت بازی های مستقل کامل ارائه می دهد. برای آشنایی با نحوه عملکرد PICO-8، بهتر است ساده شروع کنید.
اجرای کنسول PICO-8
PICO-8 یک کنسول مجازی و ابزار توسعه بازی است. شما می توانید از آن برای ساخت و توزیع بازی های ساده به سبک یکپارچهسازی با سیستمعامل استفاده کنید.
با دریافت برنامه PICO-8 و اجرای آن شروع کنید:
- نرم افزار را از صفحه اصلی itch.io آن خریداری و دانلود کنید. میتوانید PICO-8 را برای Windows، macOS یا Linux دانلود کنید.
- برنامه را اجرا کنید و باید صفحه راه اندازی مانند این را ببینید: این خط فرمان PICO-8 است که می توانید از آن برای بارگیری و اجرای کارتریج ها، همراه با چندین عمل دیگر که در ویکی PICO-8 مستند شده اند، استفاده کنید.
استفاده اولیه از ویرایشگر کد
شما می توانید با استفاده از ویرایشگر کد برای ایجاد یک برنامه ساده و سپس اجرای آن، ایده ای از نحوه کار برنامه نویسی PICO-8 بدست آورید.
- در صفحه بوت، ESC را فشار دهید تا ویرایشگر کد را وارد کنید. شما باید یک صفحه عمدتاً خالی ببینید:
- ویرایشگر کد اساسی است اما استفاده از آن آسان است. در حال حاضر، با ساده ترین برنامه شروع کنید: PRINT (“HELLO, WORLD”)
- وقتی کد بالا را وارد کردید، ESC را فشار دهید تا به صفحه بوت بازگردید.
- اکنون می توانید برای اجرای برنامه خود RUN را تایپ کنید. باید متن “HELLO, WORLD” را خروجی دهد.
PRINT("HELLO, WORLD")
PICO-8 از زیر مجموعه ای استفاده می کند
Lua، یک زبان برنامه نویسی محبوب gamedev
.
نوشتن یک بازی ساده
هنگامی که با نوشتن کد PICO-8 و اجرای آن راحت شدید، وقت آن است که یک بازی ساده را امتحان کنید. تیک تاک یک انتخاب عالی برای شروع بازی است زیرا:
- این مبتنی بر نوبت است، بنابراین لازم نیست نگران زمان بندی چیزی باشید.
- این شامل منطق بسیار کمی است که اساساً فقط از دو قانون تشکیل شده است.
- نیازهای گرافیکی بسیار ساده ای دارد.
کد کامل این بازی ساده در یک مخزن GitHub موجود است. می توانید این فایل را دانلود کنید، آن را در پوشه کارتریج محلی خود ذخیره کنید و با PICO-8 باز کنید.
برای باز کردن پوشه کارتریج محلی خود در مرورگر فایل رایانه خود، تایپ کنید
FOLDER
در خط فرمان PICO-8.
معرفی حلقه بازی
از هر زبانی که استفاده می کنید، توسعه بازی معمولاً حول یک “حلقه بازی” متمرکز می شود. از فرآیند زیر تشکیل شده است:
- دریافت ورودی کاربر
- وضعیت بازی را به روز کنید
- بازی را بکشید
PICO-8 از طریق توابع _init()، _update() و _draw() از یک حلقه بازی پشتیبانی داخلی عالی دارد. این توابع خاص هستند زیرا PICO-8 در صورت لزوم آنها را به طور خودکار فراخوانی می کند.
با ایجاد اسکلت یک بازی می توانید نحوه کار اینها را ببینید. این نسخه اول یک مکان نما را روی صفحه نمایش می دهد که با حرکت ماوس حرکت می کند.
با تنظیم هر اقدام مورد نیاز در _init() شروع کنید. این تابع به طور دقیق بخشی از حلقه بازی نیست زیرا فقط یک بار در هنگام شروع اجرا می شود. برای یک بازی که نیاز به ورودی ماوس دارد، باید یک تماس ویژه برای فعال کردن آن برقرار کنید:
function_init()
-- enable mouse
poke(0x5f2d, 1)
end
تابع _update ورودی کاربر و بهروزرسانی وضعیت بازی شما را کنترل میکند. برای پشتیبانی از ورودی ماوس، این مکان برای پیگیری موقعیت اشاره گر است.
function_update()
mousex = stat(32)
mousey = stat(33)
end
توجه داشته باشید که متغیرهای PICO-8 به طور پیش فرض جهانی هستند، بنابراین هر تابعی در برنامه شما به mousex و mousey دسترسی خواهد داشت. PICO-8 شامل آمار به عنوان یک تابع داخلی است. جزئیات مختلفی در مورد محیط فعلی از جمله ماوس، صفحه کلید و تاریخ/زمان ارائه می دهد.
در نهایت یک تابع _draw برای نمایش یک اشاره گر روی صفحه تعریف کنید. برای یک اشاره گر به سبک ضربدری، می توانید یک خط عمودی و یک خط افقی در موقعیت فعلی ماوس بکشید:
function_draw()
cls()
line(mousex, mousey - 4, mousex, mousey + 4)
line(mousex - 4, mousey, mousex + 4, mousey)
end
تابع line() دیگری است که در PICO-8 تعبیه شده است. برای کشیدن خط بین دو نقطه به چهار آرگومان نیاز است: مختصات x و y نقطه a و مختصات x و y نقطه b.
تابع cls() صفحه را پاک می کند. سعی کنید این خط را حذف کنید تا ببینید وقتی صفحه را پاک نمی کنید چه اتفاقی می افتد.
ترسیم عناصر باقیمانده بازی
تیک تاک روی شبکه ای از نه مربع شکل می گیرد. می توانید این را با استفاده از چهار خط بازسازی کنید: دو خط افقی و دو خط عمودی. از آنجایی که صفحه نمایش PICO-8 128×128 پیکسل است، هر مربع می تواند 42 پیکسل باشد و 1 پیکسل برای خطوط شبکه باقی بماند:
functiondraw_grid()
line(42, 0, 42, 127) -- two vertical lines
line(85, 0, 85, 127)
line(0, 42, 127, 42) -- two horizontal lines
line(0, 85, 127, 85)
end
کار بعدی این است که یک نماد – هیچ یا صلیب – در یک مربع معین بکشید. شما می توانید از این برای نمایش هر دو نماد “تابلو” و “پیش نمایش” در حالی که کاربر ماوس خود را روی مربع خالی قرار می دهد، استفاده کنید.
رسم یک “nought” به سادگی یک مورد برای فراخوانی تابع PICO-8 circ() است:
functiondraw_nought(x, y)
circ(x, y, 10)
end
کشیدن یک “صلیب” کمی پیچیده تر است. شما باید دو خط مورب متقاطع بکشید:
functiondraw_cross(x, y)
line(x - 10, y - 10, x + 10, y + 10)
line(x + 10, y - 10, x - 10, y + 10)
end
تابع رسم باقیمانده draw_square است. در صورت وجود، نماد (صلیب یا هیچ) را در یک مربع شبکه معین ترسیم می کند. اما برای تکمیل این عملکرد، باید به وضعیت بازی دسترسی داشته باشید.
وضعیت بازی را پیگیری کنید
برای انجام یک بازی معنادار، به روشی برای ردیابی نماد، در صورت وجود، در کدام مربع نیاز دارید. در حالی که PICO-8 از آرایه های چند بعدی پشتیبانی می کند، استفاده از یک آرایه یک بعدی برای موارد استفاده ساده مانند این به همان اندازه آسان است. شما فقط باید 9 مکان مختلف را در شبکه پیگیری کنید:
p = {"", "", "", "", "", "", "", "", ""}
شما می توانید با استفاده از نحوی که از زبان های دیگر آشناست به عناصر این آرایه دسترسی داشته باشید. مثلا:
-- store a 0 in the top-left square
p[1] = "0"
-- test the value in the bottom-right square
if (p[9] == "x") then
آرایههای PICO-8 با شاخص 1 شروع میشوند، نه با شاخص 0 که در بسیاری از زبانها معمول است.
شما می توانید از یک مرجع ستون و ردیف به یک شاخص در این آرایه ترجمه کنید و دوباره برگردید. با استفاده از این واقعیت که صفحه نمایش 128×128 است، و شبکه 3×3 است، می توانید مختصات x و y را به منابع شبکه مانند این تبدیل کنید:
mousecol=flr(mousex/42.666)
mouserow=flr((mousey/42.666) % 3)
مدیریت ورودی کاربر
می توانید فشارهای دکمه ماوس را به روشی مشابه با موقعیت ماوس پیگیری کنید. در _update، از یک متغیر سراسری برای پیگیری وضعیت استفاده کنید و stat(34) را فراخوانی کنید تا بررسی کنید که آیا دکمه سمت چپ ماوس پایین است یا خیر:
if (down and stat(34) == 0) then
down = false
end
if ((not down) and stat(34) == 1) then
down = true
end
ردیابی پایین به شما امکان میدهد تشخیص دهید که اولین بار چه زمانی روی دکمه کلیک میشود، زیرا stat() فقط به شما میگوید که آیا دکمه هنگام اجرا پایین است یا خیر.
تشخیص شرط Win
یک بازی تیک تاک زمانی به پایان می رسد که:
- سه نمونه از یک نماد در یک ردیف، ستون یا مورب وجود دارد.
- همه مربع ها پر است.
تابع check_for_win مشخص می کند که آیا وضعیت فعلی بازی هر یک از شرایط را برآورده می کند یا خیر. راههای مختلفی وجود دارد که میتوانید با این کار کنار بیایید، اما برای یک بازی ساده مانند tic-tac-toe، روش brute-force اغلب سادهترین روش است:
for a = 1,3do
// columns 1, 2, and 3
if p[a] != "" and p[a] == p[a + 3] and p[a] == p[a + 6] then
finished = true
winner = p[a]
end
end
این گزیده کد بررسی ستون ها را نشان می دهد. به دنبال مقادیر تطبیق غیر خالی در موقعیت های مناسب در آرایه شبکه اصلی می گردد. اگر یک خط برنده را کشف کند، این کد دو متغیر سراسری را تنظیم می کند که سپس پیام برنده را در _display() نمایش می دهد.
بسته بندی بازی شما
هیچ فایده ای در ایجاد یک بازی وجود ندارد مگر اینکه دیگران بتوانند آن را بازی کنند. خوشبختانه، PICO-8 شما را پوشش داده است. می توانید با اجرای دستور زیر در خط فرمان PICO-8 یک فایل اجرایی بسازید:
- برای شروع برنامه خود RUN را تایپ کنید.
- در حین اجرا، F2 را فشار دهید تا اسکرین شات بگیرید. PICO-8 از این به عنوان یک تصویر کوچک برای بازی شما استفاده خواهد کرد.
- EXPORT TICTACTOE.HTML را تایپ کنید. HTML سریع ترین فرمت برای تولید و قابل حمل ترین است.
PICO-8 همچنین از فایل های اجرایی باینری بومی برای ویندوز، macOS و لینوکس پشتیبانی می کند. برای ایجاد آنها از EXPORT TICTACTOE.BIN استفاده کنید. هر فرمتی که انتخاب کنید، PICO-8 فایل های شما را در پوشه کارتریج صادر می کند.
PICO-8 ممکن است فقط آغاز باشد
این بازی ساده پتانسیل زیادی برای کارهای بعدی دارد. می توانید گرافیک را بهبود ببخشید یا منطقی به حرکات CPU اضافه کنید. همچنین می توانید یک نسخه دو نفره بسازید و به بازیکن اجازه دهید نماد خود را انتخاب کند.
اکثر توسعه دهندگان بازی PICO-8 ساخته های خود را به صورت رایگان در دسترس قرار می دهند. در دنیای بازی سازی حرفه ای، ابزارهایی مانند Unreal Engine، GameMaker و Unity رایج تر هستند.