مرجع SDK اللعبة
@caputchin/game-sdk هو العقد الذي يكتب مؤلّف لعبة مقابله: مساعد register، وجسر Bridge دافع-فقط، وسياق GameContext لكل جولة، وأنواع TypeScript لكتل تهيئات البيان. يُنشَر منفصلًا عن الأداة المواجِهة للمستخدم كي لا تحزم الألعاب أبدًا زمن تشغيل الأداة بالتعدّي. ألعاب الطرف الأول تستخدم هذا الـ API العام نفسه؛ لا عقد خاصّ.
لبناء موجَّه، انظر ابنِ لعبة المتجر. للبيان الذي يعلن التهيئات التي يكشفها هذا الـ SDK، انظر بيان caputchin.json.
register(factory)
نقطة دخول التسجيل الوحيدة. مرّر مصنع لعبتك؛ لا تمرّر البيان (يقرأ الخادم caputchin.json وقت الفهرسة ويشحن التهيئات المحلولة كسياق المصنع). التسجيل مرّتين يسجّل تنبيهًا في الطرفية والكتابة الأخيرة تفوز؛ لا فرض من المنصّة.
register(factory: GameFactory): voidمصنع اللعبة
type GameFactory = (
container: HTMLElement,
bridge: Bridge,
ctx?: GameContext,
) => (() => void) | void| المعامل | المعنى |
|---|---|
container | عنصر داخل إطار iframe المعزول للّعبة. اعرض هنا. التنسيق محصور طبيعيًّا، فالإطار وثيقته الخاصة. |
bridge | القناة الدافعة-فقط إلى المضيف (انظر الجسر). تبثّ اللعبة إلى الأعلى؛ لا تشترك. نداء المصنع هو إشارة البدء. |
ctx | سياق كل جولة (البذرة إضافةً إلى التهيئات المحلولة). اختياري في النوع لأن الأداة قد تشغّل لعبة خارج جلسة متحقَّق منها. |
| return | دالة تنظيف اختيارية تناديها الأداة إن فكّكت لعبتك. |
الجسر
الجسر دافع-فقط: تبلّغ اللعبة الأحداث للمضيف ولا تنصت أبدًا. أعضاؤه:
| العضو | الشكل | الأثر |
|---|---|---|
pass | pass(result: { trace: string }): void | يشير إلى أن الجولة نجحت، مسلّمًا المضيف trace المعتم. يعيد الخادم تشغيل run اللعبة تحت البذرة المُصدَرة لحساب الحُكم الموثوق، فاللعبة لا تبلّغ نتيجة هنا. أول نداء يطلق التحقّق المحبوس ويقفل الرمز؛ والنداءات اللاحقة تُتجاهَل. |
error | error(err: { code: string; message?: string }): void | اللعبة نفسها فشلت (تحميل أصل، استثناء داخلي). يُظهر حدث error للمستخدم. متمايز عن خسارة لاعب، التي يُشار إليها بنداء لا شيء. |
setSize | setSize(width: number, height: number): void | غيّر حجم الإطار صراحةً ليلائم المحتوى. ناده بعد أول رسم؛ تقيس الأداة أيضًا أول ابن للّعبة تلقائيًّا، فمعظم الألعاب لا تحتاجه أبدًا. |
layout | readonly layout: 'inline' | 'modal' | 'fullscreen' | null | العرض المحلول الذي تعمل اللعبة تحته، أو null حين يكون مجهولًا. |
لا complete عمدًا، ولا مُنصِت start، ولا طريقة unmount (أعِد دالة تنظيف بدلًا)، ولا إشارة فشل أبعد من الصمت.
السياق
interface GameContext {
seed: Seed | null
locale: ResolvedLocale | null
skin: ResolvedSkin | null
config: ResolvedConfig | null
}| الحقل | المعنى |
|---|---|
seed | بذرة إعادة تشغيل كل جولة (Seed من عقد إعادة التشغيل). ابذر كل عشوائية اللعبة منها. null حين تعمل اللعبة خارج جلسة متحقَّق منها. |
locale | كائن اللغة المحلول: _lang (BCP-47)، و_direction، إضافةً إلى مفاتيح نصوصك المسطّحة. null إن لم يشحن بيانك كتلة locales. |
skin | المظهر المحلول: _theme إضافةً إلى مفاتيح اللون/الأصل المسطّحة، وروابط الأصول مطلقة أصلًا. _theme دائمًا الوضع الملموس الذي حُلّ له المظهر، light أو dark (لا any أبدًا)، فتهيئة محايدة-السمة تبلّغ وضع الزائر الفعلي. null إن لا كتلة skins. |
config | الإعداد المحلول: قياسياتك المكتوبة الأنواع المسطّحة. null إن لا كتلة configurations. |
كلٌّ null حين تغيب كتلة البيان المقابلة، فقدّم دائمًا ارتدادًا مدمجًا.
أنواع التهيئات
يصدّر الـ SDK أنواع TypeScript لتأليف caputchin.json (وملفّات .caputchin/ المقسّمة) بفحص الأنواع. تعكس هذه كتل البيان:
| النوع | يصف |
|---|---|
GameManifest | الـ caputchin.json كله. مصدر حقيقة المؤلّف + المفهرِس؛ لا يُقرَأ في المتصفّح أبدًا. |
LocalePreset / ResolvedLocale | تهيئة لغة مُعلَنة / الكائن المحلول الذي تستقبله اللعبة. |
SkinPreset / ResolvedSkin / SkinSchemaEntry / SkinValueType | تهيئات المظهر، والمظهر المحلول، ومخطّط النوع لكل مفتاح. |
ConfigPreset / ResolvedConfig / ConfigSchemaEntry / ConfigValueType | تهيئات الإعداد، والإعداد المحلول، ومخطّط النوع لكل مفتاح. |
LocalesFile / SkinsFile / ConfigurationsFile | الكائن الأعلى لكل ملفّ مقسّم .caputchin/<axis>.json. |
MarketplaceMetadata / PreferredPresentation | كتلة marketplace وتلميح بصمة preferred. |
ألّف ملفًّا مقسّمًا باستيراد satisfies كي يفحصه المصرّف:
import type { LocalesFile } from "@caputchin/game-sdk";
export default { schema: { /* ... */ }, presets: { /* ... */ } } satisfies LocalesFile;ما الذي غائب عمدًا
- لا
sessionIdولا معرّفات منصّة تبلغ اللعبة. - لا خطّافات دورة حياة
start/pause/resume؛ نداء المصنع هو البدء. - لا
maxScoreولا مدى نتيجة منصّة؛ نتيجة الحُكم هي أيًّا تعيدrunخاصتك.
العقد ضئيل عمدًا كي يبقى ثابتًا عبر سنوات نموّ الكتالوج.
انظر أيضًا
- ابنِ لعبة المتجر: الدرس الذي يستخدم هذا السطح.
- عقد إعادة التشغيل: الـ
Seed، والأثر، والحُكم التي يشير إليها الجسر والسياق. - بيان caputchin.json: إعلان التهيئات التي يحلّها السياق.