توسعه بازی با 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 مبتنی بر موتور و بازرسی بصری است. درخواست یک حلقه کوچک و کامل اجازه داد چیزی فراتر از حرکت آزمایش شود: خروجی باید پیش از جمعآوری سلولها بسته میماند، تکمیل اتاق باید بخش بعدی را باز میکرد و تنظیمات باید پس از اجرای دوباره باقی میماند. پروژه قابلدانلود امکان بررسی این رفتارها را برای شما فراهم میکند.

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های نوشتهشده توسط عامل، فرمانهای محلی، درخواستهای مجوز اجرای بومی و بررسی تصویرها بود؛ هدایت بیشتر کار توسط انسان یا اصلاح دستی کد مشاهده نشد.

عیب واقعی: فوکوس صفحهکلید خواندن دکمه را دشوار کرد
اولین اجرای بومی 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-final | 62 | کمپین کامل بومی سهاتاقه بهعلاوه بررسی باخت، شروع دوباره، مکث، تنظیمات و triggerهای صوتی |
| اجرای 10-native-reopen-compact | 6 | فرایندی جداگانه پیشرفت و تنظیمات را بارگذاری کرد و سپس وارد بخش سه شد |
| 12-native-pck | 6 | بسته بیرون از پوشه منبع اجرا شد، ذخیره دوباره باز شد و ورود به بخش سه انجام شد |
بازکردن دوباره، ماندگاری و چیدمان فشرده را آزمایش کرد
یک فرایند بومی تازه unlocked=3، completed=true، سه بهترین زمان مثبت، volume=0.35 و reduced_motion=true را بارگذاری کرد. Continue وارد بخش سه شد. این موضوع ماندگاری را از مقداری که فقط هنگام اجرای بازی در حافظه میماند جدا میکند. بازی هنگام تکمیل اتاق پیشرفت را ذخیره میکند، بنابراین نقطه ادامه موردنظر اتاق است، نه آخرین موقعیت پیک.
اجرای فشرده یک بررسی دوم layout هم فراهم کرد: اتاق، HUD، زمانسنج و کنترلها در 720 x 540 کاملاً در قاب ماندند. تصاویر دسکتاپ 1280 x 960 هستند. در اجرای نهایی منبع و بسته، دوازده تصویر بومی نمونهبرداری پیکسل غیرخالی را با موفقیت گذراندند و بررسی بصری قاببندی و خوانایی را بررسی کرد. اینها تصاویر اصیل viewport بومی هستند؛ تصویر کوچکتر یک پنجره دسکتاپ فشرده را نشان میدهد.

زمان و پیکربندی: رکورد اجرا را چگونه بخوانیم
شروع درخواستشده 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 را بیرون از پوشه منبع آزمایش کنید. خطاها را نگه دارید تا هر اصلاح دلیل قابلردیابی داشته باشد.