توسعه بازی با Astra: Circuit Shift

Updated 2026-09-05

یک کار Codex پیکربندی‌شده با Astra، نمونه اولیه بومی Godot با سه اتاق، برخوردهای فعال، معماهای رله، وضعیت‌های برد و باخت و پیشرفت ذخیره‌شده تولید کرد. مسیر از brief تا بازی آزمایش‌شده را، از جمله تعمیری که بررسی‌های gameplay ابتدا از دست دادند، ببینید.

نتیجه: حلقه کامل gameplay در سه اتاق

Circuit Shift یک بازی معمایی کوچک از نمای بالا است که در Godot 4.5.1 روی macOS ساخته و آزمایش شده است. پیک CS-07 را از میان سه اتاق ایستگاه رله هدایت می‌کنید، در هر اتاق سه سلول انرژی جمع می‌کنید، دروازه‌های شماره‌دار را باز می‌کنید، از نگهبان‌های متحرک دوری می‌کنید و به خروجی می‌رسید. اجرای خودکار بومی نهایی هر سه اتاق را تکمیل کرد، باخت و شروع دوباره را اجرا کرد و پیشرفت کمپین و بهترین زمان‌ها را ذخیره کرد. یک فرایند جداگانه همان ذخیره را با موفقیت باز کرد.

نکته مفید برای پروژه بازی کمک‌گرفته از AI، ترکیب brief محدود، بررسی‌های gameplay مبتنی بر موتور و بازرسی بصری است. درخواست یک حلقه کوچک و کامل اجازه داد چیزی فراتر از حرکت آزمایش شود: خروجی باید پیش از جمع‌آوری سلول‌ها بسته می‌ماند، تکمیل اتاق باید بخش بعدی را باز می‌کرد و تنظیمات باید پس از اجرای دوباره باقی می‌ماند. پروژه قابل‌دانلود امکان بررسی این رفتارها را برای شما فراهم می‌کند.

بخش یک Circuit Shift با پیک سبز نعنایی، سه سلول زرد، رله شماره‌دار، دروازه قرمز بسته، خطر متحرک و خروجی مهروموم‌شده.
تصویر واقعی framebuffer Godot با اندازه 1280 x 960 از اجرای نهایی بومی، در شروع بخش یک.

Brief اولیه، تکمیل را عینی کرد

این کار بازی اصیلی به نام Circuit Shift، سه مرحله کوتاه، فیزیک موتور، کلیدها و دروازه‌ها، سلول‌های قابل‌جمع‌آوری، برد/باخت/شروع دوباره، منوی شروع، تنظیمات و پیشرفت ذخیره‌شده را مشخص کرده بود. همچنین تصویرهای اصیل، miniflow gameplay با موتور واقعی و بازکردن دوباره وضعیت ذخیره‌شده را لازم می‌دانست. Godot 4.5.1 از قبل نصب بود و دوباره استفاده شد؛ توسعه در پوشه بازی جدید با HOME موقت جدا شروع شد.

قطعه زیر بخشی از brief اولیه واقعی است؛ برای خوانایی، شکست خط اضافه شده و متن اصلی حفظ شده است. فایل کامل initial-prompt.txt در ZIP کد منبع قرار دارد. برای brief خود، قابل‌انتقال‌ترین بخش معیارهای تکمیل قابل مشاهده است: مشخص کنید بازیکن چه می‌تواند انجام دهد و پس از بستن بازی چه چیزی باید همچنان کار کند.

Task: build an original polished small 2D Godot game called Circuit Shift.
Three short levels; controllable character, enginephysics/collisions,
switches and gates, collectible cells, exit, win/loss/restart,
start menu, smallsettings and savedprogress.

از prompt تا فایل‌ها، بازخورد موتور و اتاق‌های فعال

عامل داده اتاق‌ها، GDScript، منوها، تنظیمات، ذخیره‌های محلی و harness بازی را ایجاد کرد، سپس موتور را بارها اجرا و نتایج را بررسی کرد. حرکت از CharacterBody2D.move_and_slide استفاده می‌کند؛ دیوارها و دروازه‌ها از StaticBody2D؛ سلول‌ها، خطرها و خروجی‌ها از triggerهای Area2D استفاده می‌کنند. این قراردادهای موتور اتاق قابل مشاهده را به تغییرات برخورد و وضعیت وصل می‌کنند که harness می‌تواند ببیند.

این سابقه 13 اجرای موتور بازی را دربرمی‌گیرد: import، gameplay، آزمون‌های رگرسیون، تصاویر بومی، بازکردن دوباره، بسته‌بندی و بررسی پیکسل. توالی شامل شکست اولیه حضور صحنه پیش از پیاده‌سازی، gameplay بدون رابط، تصاویر بومی، اصلاح بصری هدفمند و بررسی نهایی artifactها بود. گرافیک مخصوص بازی با کد CanvasItem در Godot به‌صورت رویه‌ای رسم شد و پنج افکت صوتی PCM به‌صورت محلی ساخته شد. کار مشاهده‌شده شامل patchهای نوشته‌شده توسط عامل، فرمان‌های محلی، درخواست‌های مجوز اجرای بومی و بررسی تصویرها بود؛ هدایت بیشتر کار توسط انسان یا اصلاح دستی کد مشاهده نشد.

بخش سه Circuit Shift با دو رله شماره‌دار فعال، دو دروازه باز، دو سلول جمع‌شده و پیک در کنار رله دو.
تصویر بومی واقعی 1280 x 960 از بخش سه در اجرای نهایی که بازبودن دو مدار مستقل رله را نشان می‌دهد.

عیب واقعی: فوکوس صفحه‌کلید خواندن دکمه را دشوار کرد

اولین اجرای بومی gameplay ادعاهای خود را گذراند، اما بررسی تصویر متن کم‌کنتراست روی دکمه اصلی فوکوس‌شده را آشکار کرد. این موضوع مهم بود چون منوی ایستگاه ناوبری صفحه‌کلید هم دارد: کارکرد عمل شروع، خوانا بودن کنترل شروع را تضمین نمی‌کرد. یک بررسی رگرسیون هدفمند سپس با نسبت کنتراست تقریباً 1.36:1 شکست خورد.

اصلاح، font_focus_color را صریحاً روی رنگ پیش‌زمینه تیره دکمه اصلی تنظیم کرد. بررسی بعدی تقریباً 10.57:1 را اندازه گرفت و اجرای نهایی بومی ادعای کنتراست موفق را حفظ کرد. خروجی خام ناموفق و موفق در پوشه شواهد باقی مانده است. این دلیل مشخصی برای ترکیب آزمون‌های gameplay با بررسی حالت‌های فوکوس‌شده و انتخاب‌شده UI است: انتقال‌های وضعیت می‌توانند درست باشند، در حالی که کنترل‌هایی که آن‌ها را آشکار می‌کنند هنوز نیازمند کارند.

مرحلهنتیجه مشاهده‌شدهرکورد شواهد
رگرسیون هدفمندکنتراست دکمه فوکوس‌شده 1.36:1؛ ناموفق05-focus-regression
اصلاح صریح رنگ فوکوسکنتراست دکمه فوکوس‌شده 10.57:1؛ موفق06-focus-fixed
اجرای نهایی بومیادعای کنتراست و gameplay با هم موفق شدند09-native-final

آزمون‌های بومی واقعاً چه چیزی را تمرین کردند

miniflow نهایی gameplay، actionهای معمول Godot Input و signalهای بومی Control را اجرا کرد؛ یک بررسی mapping، InputEventKey فرستاد. پیک از فیزیک موتور حرکت کرد. harness برخورد دیوار، مسدودشدن دروازه بسته، باز و بسته شدن رله، شرط خروج پس از جمع‌آوری همه سلول‌ها، سه برد اتاق، باخت ناشی از خطر، شروع دوباره، مکث، تنظیمات و triggerهای تولید و پخش صدا را بررسی کرد. بازیکن را teleport نکرد، سلول‌ها را مستقیم اعطا نکرد و وضعیت برد را اختصاص نداد.

تعدادهای زیر assertionهای درون این جریان‌ها، از جمله waypointها و تصویرها، هستند نه وظایف benchmark مستقل. هر سه اجرای نهایی بومی با موفقیت و stderr خالی خارج شدند. gameplay کد منبع کمپین گسترده‌ترین آزمون است؛ اجرای PCK بارگذاری بسته و ادامه وضعیت ذخیره‌شده را ثابت می‌کند، نه کمپین کامل دوم در بازی بسته‌بندی‌شده.

اجرای ثبت‌شدهبررسی‌های موفقنتیجه مشاهده‌شده
09-native-final62کمپین کامل بومی سه‌اتاقه به‌علاوه بررسی باخت، شروع دوباره، مکث، تنظیمات و triggerهای صوتی
اجرای 10-native-reopen-compact6فرایندی جداگانه پیشرفت و تنظیمات را بارگذاری کرد و سپس وارد بخش سه شد
12-native-pck6بسته بیرون از پوشه منبع اجرا شد، ذخیره دوباره باز شد و ورود به بخش سه انجام شد

بازکردن دوباره، ماندگاری و چیدمان فشرده را آزمایش کرد

یک فرایند بومی تازه unlocked=3، completed=true، سه بهترین زمان مثبت، volume=0.35 و reduced_motion=true را بارگذاری کرد. Continue وارد بخش سه شد. این موضوع ماندگاری را از مقداری که فقط هنگام اجرای بازی در حافظه می‌ماند جدا می‌کند. بازی هنگام تکمیل اتاق پیشرفت را ذخیره می‌کند، بنابراین نقطه ادامه موردنظر اتاق است، نه آخرین موقعیت پیک.

اجرای فشرده یک بررسی دوم layout هم فراهم کرد: اتاق، HUD، زمان‌سنج و کنترل‌ها در 720 x 540 کاملاً در قاب ماندند. تصاویر دسکتاپ 1280 x 960 هستند. در اجرای نهایی منبع و بسته، دوازده تصویر بومی نمونه‌برداری پیکسل غیرخالی را با موفقیت گذراندند و بررسی بصری قاب‌بندی و خوانایی را بررسی کرد. این‌ها تصاویر اصیل viewport بومی هستند؛ تصویر کوچک‌تر یک پنجره دسکتاپ فشرده را نشان می‌دهد.

بخش سه Circuit Shift در اندازه 720 در 540 با اتاق کامل، شمارنده سلول، زمان‌سنج، کنترل‌های شروع دوباره و مکث و وضعیت توان ایستگاه قابل مشاهده.
تصویر واقعی بومی 720 x 540 پس از اینکه فرایندی جداگانه پیشرفت ذخیره‌شده را باز کرد و وارد بخش سه شد.

زمان و پیکربندی: رکورد اجرا را چگونه بخوانیم

شروع درخواست‌شده 5 سپتامبر 2026 ساعت 05:35:51 UTC بود؛ پایان در 06:00:11.007 UTC ثبت شد. این یعنی 1,460.007 ثانیه، حدود 24 دقیقه 20 ثانیه زمان سپری‌شده واقعی. پیاده‌سازی، اجرای ابزار، آزمون، تعمیر، تصویر و بسته‌بندی را با موتور موجود دربرمی‌گیرد. این latency پاسخ مدل یا پیش‌بینی زمان توسعه بازی دیگری نیست. یک brief اولیه به چندین تکرار پیاده‌سازی و ابزار منجر شد.

این یک اجرای Codex پیکربندی‌شده با Astra است: هماهنگ‌کننده spawn_agent.model=gpt-6-astra با reasoning_effort=xhigh را ثبت کرد. این فقط پیکربندی درخواست‌شده را ثابت می‌کند. هویت مدل پاسخ API، مصرف توکن، هزینه و تعداد فراخوانی مدل/API آشکار نشد و در run-summary.json به‌صورت null باقی مانده است؛ درخواست مستقیم APIsRouter یا صورت‌حساب مشاهده نشد. بررسی عمومی کاتالوگ 5 سپتامبر نیز Astra را در APIsRouter پیدا نکرد. مستندات رسمی مدل و این پیکربندی محلی، دسترسی از طریق gateway را ثابت نمی‌کنند.

Circuit Shift را در Godot دانلود و اجرا کنید

ZIP کد منبع را دانلود کنید تا پیاده‌سازی، brief کامل، کنترل‌ها، harness آزمون و شواهد حفظ‌شده را ببینید. آن را استخراج کنید، game/project.godot را در Godot 4.5.1 وارد کنید و پروژه را اجرا کنید. با WASD یا کلیدهای جهت حرکت کنید، با E یا Space رله نزدیک را فعال کنید، با R دوباره شروع کنید و با Escape مکث کنید. همه سلول‌ها را جمع کنید تا خروجی فعال شود؛ برخورد با نگهبان تلاش را تمام می‌کند.

برای نسخه بسته‌بندی‌شده، circuit-shift.pck را دانلود کنید و با runtime سازگار Godot و فرمان زیر اجرا کنید. PCK به Godot نیاز دارد و executable مستقل نیست. صحت ZIP، برابری فایل‌های حیاتی آرشیو، برابری منبع با اجرای نهایی بومی و برابری SHA-256 دارایی‌های کپی‌شده تأیید شدند. PCK از پوشه موقتی بیرون از پروژه منبع اجرا شد. پیوندهای دانلود هر دو artifact، run-summary.json و manifest مربوط به SHA-256 در زیر فهرست شده‌اند.

godot --main-pack circuit-shift.pck

نمونه اولیه در گام بعد برای چه چیزی آماده است

گام مفید بعدی، playtest انسانی حلقه سه‌اتاقه است: آیا بازیکن تازه شماره‌گذاری رله‌ها را می‌فهمد، متوجه می‌شود چرا خروجی مهروموم است و می‌تواند از باخت برگردد؟ در این مورد playtest انسانی، آزمون شنیدن یا داده استفاده کاربر واقعی جمع‌آوری نشد. تکمیل خودکار و بافرهای صوتی تولیدشده مسیرهای عملکردی را ثابت می‌کنند، اما لذت، تعادل دشواری، کیفیت صدا، ماندگاری یا کاربردپذیری گسترده را ثابت نمی‌کنند.

Windows، مرورگر، Steam، لمس و gamepad هنوز آزمایش نشده‌اند؛ قالب‌های خروجی مرورگر به‌صورت محلی در دسترس نبودند. اجرای headless شتاب‌یافته همچنان diagnostics گواهی macOS و هشدارهای خاموش‌شدن منابع صوتی ایجاد کرد، هرچند logهای نهایی بومی stderr خالی داشتند. پیش از انتخاب هدف انتشار، مسائل runtime مربوط را حل کنید و آزمون‌های ورودی، ذخیره، بسته‌بندی و عملکرد همان هدف را اجرا کنید. نتیجه عملی، نمونه اولیه بومی قابل‌بررسی و جریان تأیید تکرارپذیری است که می‌تواند دور بعدی توسعه را هدایت کند.

پرسش‌های پرتکرار

این کار چه نوع بازی‌ای تولید کرد؟

Circuit Shift یک نمونه اولیه اصیل سه‌اتاقه و از بالا به پایین در Godot است. هر اتاق سلول‌های قابل‌جمع‌آوری، کلیدهای رله شماره‌دار، دروازه‌های فیزیکی، خطرهای متحرک و خروجی را ترکیب می‌کند. بازی منوی ایستگاه، برد/باخت/شروع دوباره، مکث، تنظیمات و پیشرفت ذخیره‌شده دارد.

چگونه با PCK دانلودشده بازی کنم؟

از runtime سازگار Godot استفاده کنید؛ این مورد از Godot 4.5.1 استفاده کرد. از پوشه دارای circuit-shift.pck، فرمان godot --main-pack circuit-shift.pck را اجرا کنید. برای بررسی یا ویرایش بازی، ZIP کد منبع را استخراج و game/project.godot را باز کنید.

از چه کنترل‌هایی باید استفاده کنم؟

با WASD یا کلیدهای جهت حرکت کنید. نزدیک رله E یا Space را بزنید، برای شروع دوباره اتاق R و برای مکث یا ادامه Escape را بزنید. منو از ماوس، Tab و Enter پشتیبانی می‌کند. پیش از فعال شدن خروجی باید همه سلول‌ها جمع شوند.

چه پیشرفتی پس از شروع دوباره باقی می‌ماند؟

تکمیل اتاق، بخش‌های بازشده، تکمیل کمپین و بهترین زمان‌ها را ذخیره می‌کند. تنظیمات صدا و حرکت کاهش‌یافته نیز باقی می‌مانند. فرایندی جداگانه این مقادیر ذخیره‌شده را تأیید کرد و وارد بخش سه شد؛ بازی هر حرکت داخل اتاق را ذخیره نمی‌کند.

هنر و افکت‌های صوتی از کجا آمده‌اند؟

تصاویر مخصوص بازی به‌صورت رویه‌ای در کد ترسیم CanvasItem در Godot ساخته شدند. پنج افکت صوتی PCM در زمان اجرا به‌صورت محلی synthesise می‌شوند. Godot فونت داخلی خود را از طریق موتور نصب‌شده جداگانه فراهم می‌کند.

از این گردش‌کار چه چیزی را می‌توانم تکرار کنم؟

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