ساخت یک بازی آرکید Match 3 با Gemini CLI

۱. مقدمه

در این آزمایشگاه کد، شما با استفاده از Gemini 3 و Gemini CLI ، عامل کدنویسی خط فرمان ما، یک بازی آرکید به نام CloudCrush خواهید ساخت. این بازی با زبان Go نوشته شده و با استفاده از Cloud Run روی فضای ابری گوگل مستقر خواهد شد.

هدف اصلی این آزمایشگاه کد، توسعه مهارت‌های لازم برای هماهنگ‌سازی عامل (agent) جهت ساخت برنامه‌های کاربردی برای شما به جای نوشتن کد به صورت دستی است. شما تمام وظایف توسعه را به Gemini CLI واگذار خواهید کرد، حتی اگر قبلاً از این فناوری‌ها استفاده نکرده باشید.

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

کاری که انجام خواهید داد

  • منطق اصلی بازی Match-3 را با استفاده از Go و چارچوب Ebitengine بسازید.
  • تطبیق بازی برای اجرا در مرورگر وب با استفاده از WebAssembly (WASM)
  • بازی و API دارای بالاترین امتیاز آن را در Cloud Run مستقر کنید.
  • هماهنگ‌سازی زیرعامل‌ها و افزونه‌های تخصصی برای آزمایش و بررسی کد

پیش‌نیازها

  • دانش پایه زبان‌های برنامه‌نویسی
  • آشنایی اولیه با زیرساخت ابری
  • آشنایی اولیه با کنسول ابری گوگل

آنچه یاد خواهید گرفت

  • نحوه همکاری با یک متخصص کدنویسی برای ساخت برنامه‌های پیچیده
  • نحوه کار با Gemini در یک زمینه چندوجهی
  • نحوه استقرار برنامه‌ها در فضای ابری با استفاده از Cloud Run

آنچه نیاز دارید

این کارگاه می‌تواند کاملاً روی فضای ابری با استفاده از Cloud Shell انجام شود، اما اگر ترجیح می‌دهید از دستگاه محلی خود استفاده کنید، به موارد زیر نیاز خواهید داشت:

  • رابط خط فرمان Gemini. آن را دانلود و طبق دستورالعمل‌های geminicli.com نصب کنید.
  • ابزار Go (نسخه ۱.۲۶ یا بالاتر). آن را دانلود و با استفاده از دستورالعمل‌های موجود در go.dev نصب کنید.
  • رابط خط فرمان gcloud برای تعامل با گوگل کلود. آن را با استفاده از دستورالعمل‌های موجود در مستندات گوگل کلود دانلود و نصب کنید.
  • یک حساب پرداخت گوگل کلود (برای انتشار بازی در فضای ابری)

فناوری‌های کلیدی

در اینجا می‌توانید اطلاعات بیشتری در مورد فناوری‌هایی که ما استفاده خواهیم کرد، بیابید:

۲. تنظیمات محیطی

راه‌اندازی پروژه

ایجاد یک پروژه ابری گوگل

  1. در کنسول گوگل کلود ، در صفحه انتخاب پروژه، یک پروژه گوگل کلود را انتخاب یا ایجاد کنید .
  2. مطمئن شوید که صورتحساب برای پروژه ابری شما فعال است. یاد بگیرید که چگونه بررسی کنید که آیا صورتحساب در یک پروژه فعال است یا خیر .

شروع پوسته ابری

Cloud Shell یک محیط خط فرمان است که در Google Cloud اجرا می‌شود و ابزارهای لازم از قبل روی آن بارگذاری شده‌اند.

  1. روی فعال کردن Cloud Shell در بالای کنسول Google Cloud کلیک کنید.
  2. پس از اتصال به Cloud Shell، احراز هویت خود را تأیید کنید:
    gcloud auth list
    
  3. تأیید کنید که پروژه شما پیکربندی شده است:
    gcloud config get project
    
  4. اگر پروژه شما مطابق انتظار تنظیم نشده است، آن را تنظیم کنید:
    export PROJECT_ID=<YOUR_PROJECT_ID>
    gcloud config set project $PROJECT_ID
    

۳. راه‌اندازی پروژه

ایجاد دایرکتوری پروژه

ابتدا، باید یک دایرکتوری جدید برای پروژه شما ایجاد کنیم. در ترمینال خود، دستورات زیر را اجرا کنید:

mkdir -p codelab-match3 && cd codelab-match3

اجرای رابط خط فرمان Gemini

ابتدا، بررسی می‌کنیم که Gemini CLI به درستی نصب شده است. دستور زیر را در ترمینال خود اجرا کنید:

gemini --version

شما باید چیزی شبیه به این را ببینید:

$ gemini --version
0.37.1

حالا Gemini CLI را با دستور gemini اجرا کنید:

gemini

شما باید خط فرمان Gemini CLI را ببینید:

b9f33e9786c58b61.png

اگر خط فرمان Gemini CLI را می‌بینید، آماده شروع هستید. در غیر این صورت، دوباره بررسی کنید که آیا مراحل راه‌اندازی قبلی را از دست داده‌اید یا خیر.

فعال کردن فرمان مدل

هدایت مدل قابلیتی است که به شما امکان می‌دهد در حالی که عامل هنوز روی یک وظیفه مشخص کار می‌کند، زمینه‌های اضافی به آن اضافه کنید. می‌توانید از آن برای اصلاح مسیر عامل در زمانی که می‌بینید در مسیر اشتباه حرکت می‌کند، افزودن اطلاعات شفاف‌سازی برای بهبود پاسخ عامل یا افزودن ویژگی‌های جزئی که در اعلان اصلی از قلم افتاده‌اند، استفاده کنید.

برای فعال کردن هدایت مدل، منوی تنظیمات را با استفاده از دستور /settings باز کنید و عبارت "steering" را در کادر جستجو تایپ کنید. سپس گزینه Enable Model Steering را روی true تنظیم کنید.

8ed164e05654a79.png

برای اعمال تغییر، ممکن است لازم باشد CLI را مجدداً راه‌اندازی کنید (با فشار دادن کلید "r").

دارایی‌ها را دانلود کنید

ما باید تصاویری را که قرار است در بازی استفاده شوند دانلود کنیم. فایل‌ها در GitHub در مخزن اینجا ذخیره شده‌اند. می‌توانید آنها را به صورت دستی دانلود کنید یا می‌توانید از Gemini بخواهید که با استفاده از دستور زیر این کار را برای شما انجام دهد:

Create a folder named "assets" and download the images
background.png, gcp_sprites.png, gemini.png and logo.png,
from this GitHub repository to the "assets" folder:
https://github.com/GoogleCloudPlatform/devrel-demos/tree/main/codelabs/gemini-cli/gemini-cli-match3-golang

۴. بازی را با حالت برنامه‌ریزی و هدایت مدل ایجاد کنید

با ساخت منطق اصلی بازی Match-3 شروع کنید. از آنجایی که این یک کار پیچیده است، بهتر است از Gemini CLI در حالت برنامه‌ریزی برای هماهنگ‌سازی توسعه استفاده کنید.

حالت طرح‌بندی را با دستور اسلش /plan در خط فرمان Gemini CLI تغییر دهید:

/plan

با فعال بودن حالت طرح، خط فرمان زیر را در Gemini CLI کپی و جایگذاری کنید:

Build a Match-3 game called 'Cloud Crush' in Go using Ebitengine v2.
The entire game screen should have background.png as background.
The play area should be an 8x8 grid with white background. 
On the right side of the play area include a side panel with UI elements 
like player score and how to play instructions.
The side panel should have a solid background colour to help with readability of the UI.

Use standard GCP product logos (e.g. Compute Engine, Cloud Storage, BigQuery, etc.)
as icons. These icons are provided in the gcp_sprites.png file.

The icons are saved as 64x64 sprites but scale them as necessary
based on the screen resolution. Implement swapping, clearing 3+ gems, and gravity.

Use ebitengine native font rendering (size 48 for titles and size
24 for normal text) for all text and not the debug print.

The font should be monospaced (golang.org/x/image/font/gofont/gomono).
Keep the UI tidy and harmonic, e.g. centered text should always be
adjusted based on text length, not just guess based on estimates.

ممکن است Gemini CLI قبل از ایجاد طرح، چند سوال توضیحی از شما بپرسد.

برای مثال، در اینجا از شما پرسیده می‌شود که آیا یک برنامه تک فایلی را ترجیح می‌دهید یا یک برنامه چند فایلی:

ba0d58fecaef343b.png

و اینجا از ما در مورد ترجیحاتمان برای انیمیشن‌ها سوال می‌کند:

432cbe7c747b2f3.png

سوال آخر در مورد جاسازی فایل‌ها در خود فایل باینری با استفاده از go:embed است:

98ae4d6786d24c9b.png

پس از پاسخ دادن به تمام سوالات، به شما این امکان داده می‌شود که قبل از زدن دکمه اینتر برای ارسال، آنها را برای آخرین بار مرور کنید.

47c44052fafdc1bf.png

پس از اتمام طرح، از شما خواسته می‌شود که آن را بررسی کنید:

5e474a04a060d28b.png

در پایین کادر بررسی، می‌توانید طرح را همانطور که هست بپذیرید یا بازخورد خود را اضافه کنید.

b0ad1350cd1ae6c5.png

از این فرصت برای اضافه کردن یک الزام جدید که در دستور اولیه از قلم افتاده بود، استفاده کنید:

Add a 60-seconds countdown timer and an in-memory high-score tracker
to enhance the arcade game experience.
Combos should give a score bonus of 10% per combo number.

برای آخرین بار از شما خواسته می‌شود که طرح پیاده‌سازی را تأیید کنید:

2f52c3c43efafd0e.png

برای شروع کار، اینتر را بزنید. اکنون عامل از حالت برنامه‌ریزی خارج شده و شروع به نوشتن کد می‌کند.

در این مرحله، معمولاً اگر می‌خواستیم تغییراتی در پیاده‌سازی ایجاد کنیم، باید منتظر می‌ماندیم تا برنامه تمام شود یا آن را با کلید ESC قطع می‌کردیم، اما از آنجایی که هدایت مدل فعال است، می‌توانیم دستورالعمل‌ها را برای اصلاح مسیر مدل در صف قرار دهیم.

در حالی که عامل در حال کار است، برای نمایش قابلیت «هدایت مدل»، موارد زیر را در پنجره چت عامل قرار دهید و نشان دهید که چگونه می‌توانید دستورات را برای تغییر جهت پیاده‌سازی در صف قرار دهید:

Update the implementation to include: 'Q' to quit, 'F' for full-screen
and 'A' for Accessibility Mode: swap GCP logos for high-contrast coloured blocks.

Also enable Arrow Keys to move the selection cursor and Space to select the gem to 
swap (space is pressed once to select, then arrow key immediately makes 
the move - no need to press space again).

Use a golden square (4 px border, transparent fill) with a simple animation
to highlight where the cursor is at the moment.

خواهید دید که این اعلان به عنوان "راهنمای هدایت" در صف قرار می‌گیرد:

75652d5d67e247b3.png

طرح را بپذیرید و شاهد اجرای تمام الزامات شما توسط نماینده باشید.

وقتی پیاده‌سازی عامل تمام شد، دستور go run main.go در پوشه پروژه اجرا کنید تا نسخه دسکتاپ را مشاهده کنید. برای اجرای این دستور نیازی به ترک Gemini CLI ندارید. برای ورود به حالت shell، علامت تعجب ( ! ) را تایپ کنید و دستور را از آنجا اجرا کنید:

a2ead65c4efe9d52.png

مزیت اجرا از حالت shell این است که هرگونه مشکلی که ممکن است رخ دهد بلافاصله در زمینه agent ثبت می‌شود. برای مثال، در این مورد agent فراموش کرده است که برخی از وابستگی‌ها را دانلود کند:

c7caf0bc02b29ce.png

می‌توانید با فشردن کلید escape از حالت shell خارج شوید و سپس از agent بخواهید که خطا را بررسی و برطرف کند:

ef1773f2efffe886.png

نتیجه موفقیت‌آمیز باید شبیه به این باشد:

2f69de852e625951.png

سعی کنید بازی را انجام دهید و پارامترهای بازی را تا زمانی که از تجربه آن راضی هستید، تنظیم کنید (مثلاً انیمیشن را سریع‌تر یا کندتر کنید، نحوه پاسخ آن به دستورات را تنظیم کنید و غیره).

۵. بازی را برای اجرا روی مرورگر وب تنظیم کنید

بازی Ebitengine که شما ایجاد کرده‌اید یک برنامه دسکتاپ است. برای اینکه بتوانید آن را در وب اجرا کنید، می‌توانیم آن را به WebAssembly تبدیل کنیم.

برای راهنمایی اپراتور از راهنمای زیر استفاده کنید:

We need to enable this game to run on a web browser. Compile the game to WASM
and create a Go web server to serve the compiled WASM and the assets.

پس از اتمام کار توسط عامل، می‌توانید به او دستور دهید که سرور بازی را در پس‌زمینه اجرا کند.

880f19b60981d191.png

شما می‌توانید فرآیندهای پس‌زمینه را با استفاده از ترکیب کلیدهای Ctrl+B مدیریت کنید:

b72391e3963db37b.png

برای بستن این پنجره، دوباره Ctrl+B را فشار دهید.

حالا آدرس http://localhost:8080 را در مرورگر خود باز کنید تا اجرای بازی را در وب مشاهده کنید:

909e328eb1771bb4.png

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

۶. صفحه عنوان و جدول امتیازات را ایجاد کنید

بازی کار می‌کند اما چند ویژگی کلیدی برای تجربه مناسب یک بازی آرکید را ندارد. اول بیایید یک صفحه عنوان و سپس یک جدول امتیازات اضافه کنیم تا بتوانید با دوستانتان رقابت کنید!

هر دو مشکل را با دستور زیر برطرف کنید:

Create a title screen that displays the game logo (logo.png) over the cloud background.
The logo should be centered and occupy no more than 75% of the screen area.
The title screen should display "Press ENTER to play" (black/bold) right below the logo,
with every letter animated in a slow wavy (cosine) pattern.
Once the player presses ENTER, it should be prompted to add their name, which 
will then be recorded to populate the leaderboard at the end of the round.

Once the game is over, play the animated leaderboard with the top 10 highest scores.
The animated leaderboard should render entries one by one up to 10 entries, 
using a fade in effect just like old school arcade games. The leaderboard
should fade out to the title screen after 15 seconds.

Please note that name entry should be processed independently of the play state
key handlers (e.g. pressing A during name entry should not toggle accessibility mode).

در اینجا نمونه‌ای از صفحه عنوان آمده است:

8babe90fc0d1079f.png

داره کم کم حرفه ای تر به نظر میرسه! 🙂

۷. بازی را روی Cloud Run اجرا کنید

بالاخره وقت آن رسیده که ساخته‌ی دست خودمان را با دنیا به اشتراک بگذاریم! بازی را روی Google Cloud Run نصب کنید تا از هر جایی به آن دسترسی داشته باشید.

Use the gcloud CLI to provision and deploy the Go web server and its assets to
Google Cloud Run. Provide the live URL when complete.

از آنجایی که بازی اکنون در فضای ابری (cloud) در دسترس است، عدم اجازه اجرای آن بر روی دستگاه‌های تلفن همراه، یک فرصت از دست رفته خواهد بود. می‌توانید این کار را با استفاده از دستور زیر انجام دهید:

Now enable this game to run on mobile devices. You need to update the input
system to handle "taps" as well as key presses and clicks. Since mobile devices
most likely won't have a keyboard, add a button to generate a random name and
a confirmation button to the name entry.

Also generate a QR code for the CloudRun link and display it on the screen so
that people can scan it to access the mobile version and compete against their
friends for the high score.

بازی را دوباره در مرورگر خود اجرا کنید. سعی کنید از طریق یک دستگاه تلفن همراه و همچنین با استفاده از کد QR به بازی دسترسی پیدا کنید.

۸. از مرورگر ایجنت برای تست بازی استفاده کنید

در Gemini CLI، یک sub-agent یک شخصیت ایزوله با یک زمینه جدید است که برای وظایف طولانی مدت و/یا با دقت بالا که در آنها نمی‌خواهید زمینه فعلی بر نتایج تأثیر بگذارد، ایده‌آل است.

تست بازی‌ها با ابزارهای تست مرسوم (مثلاً تست‌های واحد و یکپارچه‌سازی) طبیعتاً دشوار است، اما می‌توانیم از عامل مرورگر برای انجام برخی تست‌ها استفاده کنیم. عامل مرورگر قادر است مرورگر کروم خود را راه‌اندازی کند و با صدور دستورات DOM، صفحات بازی را پیمایش کند. همچنین قابلیت گرفتن اسکرین‌شات را دارد که می‌توانیم از آن برای مستندسازی تست استفاده کنیم و همچنین آنها را به عامل برگردانیم تا بعداً تنظیمات جزئی را در رابط کاربری انجام دهد.

عامل مرورگر در حال حاضر آزمایشی است، بنابراین ابتدا باید آن را فعال کنیم. این دستور را به Gemini CLI بدهید تا عامل را در سطح پروژه فعال کند.

Create a .gemini/settings.json file with the following content to
configure the browser sub agent:

{
  "agents": {
    "overrides": {
      "browser_agent": {
        "enabled": true
      }
    }
  }
}

برای اعمال این تغییر، باید عامل را مجدداً راه‌اندازی کنید. مکالمه فعلی را با دستور /chat save ذخیره کنید:

3a3ae7e3c610614b.png

با دو بار فشردن Ctrl+D از محیط CLI نرم‌افزار Gemini خارج شوید و دوباره آن را اجرا کنید. با استفاده از /chat resume cloud-crush مکالمه را بازیابی کنید.

حالا باید به browser agent دسترسی داشته باشید. هر زمان که بخواهید وظیفه‌ای را به browser agent واگذار کنید، می‌توانید آن را با @browser_agent ذکر کنید:

977af2400fdd6ae7.png

اکنون از مرورگر ایجنت برای ارزیابی بازی مستقر شده خود استفاده کنید:

@browser_agent perform an end-to-end test of the Cloud Run deployment URL.
Navigate the homepage, start a game, submit a score, and verify the new score 
appears correctly on the leaderboard. Take screenshots to show each step of the 
investigation and save to ./screenshots.

شما باید صفحه تأیید را ببینید:

3af4096f5d903115.png

پس از اینکه به عامل و ابزارهای مورد نیاز رضایت دادید، یک پنجره مرورگر کروم جدید باید باز شود. این مرورگری است که توسط عامل کنترل می‌شود. نشانه بصری، حاشیه آبی روی صفحه و پیامی در پایین صفحه خواهد بود که می‌گوید: "Gemini CLI این مرورگر را کنترل می‌کند":

ddfaed4cd8fe3a80.png

وقتی کار تمام شد، پیامی مانند این نمایش داده می‌شود:

d69a9241ae8a9b71.png

در اینجا برخی از تصاویر گرفته شده توسط مرورگر ایجنت را مشاهده می‌کنید:

title_screen.png:

fb0a1b38b05e104f.png

game_board.png:

2ef025b6130c31.png

حالا زمان مناسبی است که از یکی از تصاویر گرفته شده توسط عامل برای بهینه‌سازی رابط کاربری بازی استفاده کنید. برای مثال، می‌توانید بگویید:

Analyse the screenshot @screenshots/game_board.png and adjust the side panel to
have better contrast and be more harmonic with the rest of UI elements. Focus
on readability and color theory to achieve the best possible visuals.

۹. یک عامل سفارشی برای ایمن‌سازی بازی ایجاد کنید

یکی از نگرانی‌های رایج در مورد برنامه‌های «vibe-coded» این است که چگونه کیفیت بالا و بهترین شیوه‌ها را از هر دو منظر کدنویسی و امنیتی حفظ کنیم. در حالی که می‌توانید سعی کنید دستورالعمل‌های خود را بهبود بخشید تا در هر دو جنبه بسیار دقیق باشند، هرچه بیشتر به یک دستورالعمل اضافه کنید، عامل کمتر متمرکز خواهد بود، که اغلب منجر به نتایج غیربهینه می‌شود. برای این نوع سناریو، استفاده از عامل‌های فرعی ایده‌آل است، زیرا آنها در یک زمینه جداگانه از عامل اصلی عمل می‌کنند و می‌توانند کاملاً بر روی وظیفه‌ای که به آنها می‌دهید متمرکز باشند. بیایید یک عامل سفارشی ایجاد کنیم تا یک ممیزی امنیتی روی این کد انجام دهد و مطمئن شویم که هنگام استقرار این بازی در Cloud Run هیچ اعتبارنامه‌ای را فاش نمی‌کنیم یا خود را در معرض خطر غیرضروری قرار نمی‌دهیم.

Create a new custom agent in .gemini/agents/security_auditor.md using the following content:

---
name: security_auditor
description: Specialized in finding security vulnerabilities in code.
kind: local
tools:
  - read_file
  - grep_search
model: gemini-3-flash-preview
temperature: 0.2
max_turns: 10
---

You are a ruthless Security Auditor. Your job is to analyze code for potential
vulnerabilities.

Focus on:

1.  SQL Injection
2.  XSS (Cross-Site Scripting)
3.  Hardcoded credentials
4.  Unsafe file operations

When you find a vulnerability, explain it clearly and suggest a fix. Do not fix
it yourself; just report it.

برای اعمال تغییر، باید رابط خط فرمان (CLI) را مجدداً راه‌اندازی کنید. جلسه چت را با /chat save ذخیره کنید و مانند قبل، با /chat resume آن را از سر بگیرید.

وقتی CLI دوباره شروع به کار می‌کند، به طور خودکار عامل جدید را در هنگام راه‌اندازی تشخیص می‌دهد:

36a78465019aee07.png

Acknowledge and Enable کلیک کنید و سپس از عامل بخواهید که با استفاده از پیام زیر، بررسی امنیتی روی کد بازی انجام دهد:

@security-auditor please run a security audit on this code and cloud run 
deployment to make sure it is safe against common attack patterns and that it is 
not leaking any credentials

شما باید چیزی شبیه به این را ببینید:

7dd0440a539c735a.png

پس از اتمام ممیزی، توصیه‌هایی ارائه می‌دهد. در این مثال، در واقع چند نکته مهم برای اصلاح پیدا کرد:

e6d8d7965a003c16.png

اگر مشکلی داشتید، از رابط خط فرمان Gemini بخواهید آن را برایتان حل کند! 🙂

۱۰. نتیجه‌گیری

تبریک! شما با موفقیت از رابط خط فرمان Gemini برای ساخت، استقرار، آزمایش و ممیزی یک بازی آرکید استفاده کردید و گردش‌های کاری پیشرفته عامل‌گرا را از چارچوب‌بندی اولیه تا استقرار نشان دادید.

تمیز کردن

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

  1. سرویس Cloud Run را حذف کنید:

از رابط خط فرمان Gemini بخواهید آن را برای شما حذف کند:

I'm finished with this project. Delete the cloud run deployment.
  1. حذف دایرکتوری پروژه:
cd .. && rm -rf codelab-match3

از طرف دیگر، اگر پروژه Google Cloud صرفاً برای این آزمایشگاه کد ایجاد شده باشد، می‌توانید کل آن را حذف کنید.

مراحل بعدی

شما می‌توانید با کاوش در سایر آزمایشگاه‌های کد در این پلتفرم، یا با بهبود Cloud Crush به تنهایی، سفر یادگیری خود را ادامه دهید!

چند پیشنهاد برای بهبود بازی:

  • یک جواهر ویژه "Gemini" (با استفاده از gemini.png) اضافه کنید که هنگام تطبیق بیش از ۴ جواهر ظاهر می‌شود. تطبیق بیش از ۳ جواهر Gemini به بازیکن زمان اضافی می‌دهد!
  • اضافه کردن موسیقی. می‌توانید با استفاده از Lyria 3 در صفحه اصلی Gemini موسیقی تولید کنید.
  • جلوه‌های صوتی اضافه کنید
  • اضافه شدن حالت‌های بازی دیگر

کدنویسی خوبی داشته باشید!