PlayPendium
Contraption · مادة للتفكير

مستوى يثبت بنفسه أنه قابل للحل

اللعبة لا تؤلّف أي لغز يدويًا على الإطلاق. بل تُنمّيه من رقم واحد، ثم تلعب ذلك اللغز ضد نفسها لتتأكد من أنه ليس تافهًا ولا مستحيلًا قبل أن تراه أنت أصلًا.

تاريخ اليوم 1 رقم، يُجزَّأ إلى بذرة
يصير
اللغز اليومي 1 ملعب متطابق للجميع

كُتب وحُرِّر بالإنجليزية. أُنتجت هذه النسخة العربية بالترجمة الآلية؛ وحيثما كانت الدقة مهمة، فالأصل الإنجليزي هو المرجع المعتمد. اقرأ الأصل بالإنجليزية ←

01 · كل شيء من رقم واحد

عالم كامل مطويّ داخل بذرة

لا يُخزَّن مستوى Contraption في أي مكان. لا يوجد ملف يسرد أين يقع المرمى أو كيف رُتّبت الحواف. بدلًا من ذلك، فإن المستوى بأكمله، أي نقطة انطلاق الكرة، وموضع المرمى، وعدد الجدران الثابتة ومواضعها، ومخزون الأجزاء الذي يُسلَّم إليك، يُحسَب من رقم ابتدائي واحد يُسمّى البذرة. أعطِ المولِّد البذرة نفسها فتحصل، بايتًا ببايت، على اللغز نفسه. 1

وهذا ممكن لأن مصدر «العشوائية» الوحيد لدى المولِّد هو مولِّد أرقام شبه عشوائية صغير وحتمي. والذي تستخدمه Contraption هو mulberry32، وهو مولِّد مضغوط بعرض 32 بتًا من تأليف تومي إتينغر، ويمكنك التعرّف عليه من ثابته المميّز، 0x6d2b79f5، الذي يُضاف إلى الحالة في كل سحب. 2 إنه سريع، ويتّسع في بضعة أسطر، والأهم من ذلك أنه ليس عشوائيًا على الإطلاق: إنه متتالية رياضية ثابتة لا تعدو أن تبدو مخلوطة. أعطِه نقطة بداية فينتج تيار الأرقام نفسه إلى الأبد. ثم يقرأ المولِّد ذلك التيار ليقرّر أين يضع كل شيء.

02 · اللغز اليومي

كيف يتحوّل التاريخ إلى تحدٍّ مشترك

يعتمد وضع «يوميًا» على هذه الحتمية ليفعل شيئًا اجتماعيًا. فبذرته ليست عشوائية، بل تُصنَع من التقويم. تأخذ اللعبة تاريخ اليوم بالتوقيت العالمي، وتكتبه في سلسلة قصيرة مثل "contraption:2026-7-28"، ثم تمرّر ذلك النص عبر دالة تجزئة لتختزله إلى رقم واحد بعرض 32 بتًا. 1

دالة التجزئة هي FNV-1a، وهي خلّاطة معروفة غير تشفيرية: تبدأ من إزاحة ثابتة، هي العدد العشري 2166136261، أو 0x811c9dc5، ثم تطوي كل حرف داخل الحالة بعملية «أو الحصرية» وتضرب بعد ذلك في عدد FNV الأولي 16777619. 3 يترك ذلك رقمًا ثابتًا ليوم معيّن ومختلفًا اختلافًا هائلًا من يوم إلى الذي يليه، بحيث يبعثر تغييرُ حرف واحد في التاريخ البذرةَ بعثرةً تامة. ولأن التقويم واحد للجميع، فالبذرة واحدة كذلك، واللغز واحد كذلك. غريبان على طرفي العالم المتقابلين يفتحان وضع «يوميًا» فيواجهان الملعب نفسه تمامًا، وهذا بالضبط ما يجعل مقارنة النتائج ذات معنى.

التحدي اليومي عادل لا لأن خادمًا يرسل إلى الجميع المستوى نفسه، بل لأن نسخة كل لاعب تعيد بشكل مستقل حساب المستوى نفسه من التاريخ نفسه.

03 · المولِّد يراجع نفسه

رفض اللغز الذي يحلّ نفسه بنفسه

الهندسة العشوائية سهلة؛ أما الهندسة العشوائية الجيدة فليست كذلك. فالمولِّد الذي يكتفي بنثر مرمى وبضع حواف سينتج أحيانًا مستوى تسقط فيه الكرة، حين تُلقى من الأعلى، مباشرة في المرمى من تلقاء نفسها. ذلك ليس لغزًا، بل مشهد سينمائي. لذا قبل أن تقبل Contraption عالمًا مرشّحًا، تُجري اختبارًا صامتًا يسمّيه الكود preSolved: تحاكي المستوى دون وضع أي جزء وتتحقق مما إذا كانت الكرة المجرّدة تصل إلى المرمى بالجاذبية وحدها. فإن وصلت، يُطرح المستوى جانبًا ويعيد المولِّد الرمي من جديد. 1

هذا قلب دقيق للطريقة التي تفكّر بها عادةً في محرّك فيزيائي. فدالة simulate() نفسها التي تُشغّل آلتك تُوجَّه إلى الداخل، في وقت التوليد، لتدقيق صعوبة المستوى نفسه. المحرّك هو في آن واحد حكَم حلّك ومفتّش جودة اللغز.

04 · حلّال صغير مدمج

«هل يمكن إنجاز هذا بجزء واحد؟»

رفض المستوى الأسهل من اللازم ليس سوى نصف المهمة. أما الخطر الآخر فهو المستوى المستحيل، أي مرمى مدسوس في مكان لا يستطيع أي ترتيب للأجزاء بلوغه. تتحصّن Contraption من ذلك بحلّال صغير بالقوة الغاشمة يُدعى plausiblySolvable. إنه لا يفكّر بذكاء. إنه يحاول فحسب. 1

وتحديدًا، يمرّر منحدرًا واحدًا عبر شبكة من المواضع فوق الملعب، ويجرّبه في كل موضع مائلًا بأربع طرق مختلفة. ولكل واحد من هذه المواضع التجريبية يُشغّل المحاكاة الكاملة ويسأل: هل أوصل ذلك المنحدر الوحيد الكرة إلى مقصدها؟ وما إن ينجح أي موضع، يُعلَن المستوى قابلًا للحل ويُشحَن إليك. أما إذا لم ينجح أي منها بعد المسح الكامل، فيفضّل المولِّد التخلص من المستوى وتجربة بذرة جديدة.

بحث حلّال الجزء الواحد: شبكة خشنة، وأربع ميلات في كل موضع
معامل المسحالمدىالمعنى
المنحدر X15 → 85، بخطوة 14أعمدة عبر الملعب
المنحدر Y30 → 120، بخطوة 18صفوف نازلة في الملعب
الزوايا المجرَّبة4±0.45 و±0.8 راديان
الاختبار لكل موضعمحاكاة كاملة واحدةهل تصل الكرة إلى المرمى؟

يجدر بنا أن نكون صادقين بشأن ما يثبته هذا، لأن الكود صادق بشأنه أيضًا: فالتعليق يسمّيه «فحص معقولية رخيص … غير شامل». المستوى الذي يجتاز الفحص لديه بالتأكيد حلّ خام واحد على الأقل بمنحدر واحد. أما المستوى الذي يرسب فقد يظل قابلًا للحل بمروحة، أو ترس، أو منحدر أذكى لم تجرّبه الشبكة قط، ولذلك لا يعامل المولِّد الرسوب على أنه دليل على الاستحالة. إنه يحتفظ بأول عالم غير تافه وجده بوصفه خيارًا احتياطيًا، وإذا مرّت أربعون محاولة دون حلّ نظيف بجزء واحد، فإنه يشحن ذلك الخيار الاحتياطي بدلًا من الدوران إلى ما لا نهاية. والنتيجة ضمانة عملية: لا فوز مجاني أبدًا، ومسار حقيقي للدخول في الغالب الأعم، ولا انتظار لا نهائي أبدًا للمستوى «المثالي». 1

05 · الفكرة العميقة

التوليد والاختبار، أكثر أنواع الذكاء تواضعًا

تراجع خطوة إلى الوراء فتجد أن صانع المستويات في Contraption مثال نظيف على نمط قديم جدًا وعام جدًا في حل المشكلات: التوليد والاختبار. اقترح مرشّحًا عشوائيًا؛ افحصه مقابل متطلباتك؛ احتفظ به إن اجتاز الفحص، وتخلّص منه واقترح غيره إن رسب. إنها الحلقة الكامنة وراء المحتوى الإجرائي في ألعاب لا تُحصى، ووراء قدر كبير من الحوسبة التطورية، بل، إن ضيّقت عينيك قليلًا، وراء الانتقاء الطبيعي نفسه: الطفرة تقترح، والبيئة تختبر، والناجون يبقون. 4

ما يجعل نسخة Contraption أنيقة هو أن الاختبار ليس بديلًا رخيصًا عن قابلية اللعب، بل هو قابلية اللعب ذاتها. فالمولِّد لا يقدّر ما إذا كان المستوى عادلًا بعدّ الحواف أو قياس المسافات. إنه يلعب المستوى حرفيًا، مرتين: مرة فارغًا للتأكد من أنه ليس هدية مجانية، ومرة بمنحدر استكشافي للتأكد من وجود مسار. الفيزياء الحتمية نفسها التي ستحكم على حلّك هي الفيزياء التي دقّقت اللغز. لا يوجد «مدقّق مستويات» منفصل يمكن أن ينحرف عن القواعد الحقيقية، لأنه لا توجد سوى مجموعة واحدة من القواعد، تُستخدم لكل شيء.

ولأن كل ذلك حتمي، فإن التدقيق خالٍ من الحظ في الاتجاهين معًا. فلا تستطيع البذرة اليومية أن تتآمر لتمنح لاعبًا ملعبًا أسهل مما تمنحه لآخر، ولا تستطيع أن تمنح أحدًا ملعبًا غير عادل، لأن المستوى، قبل أن يصير تحديًا، قد نجا بالفعل من أن تلعبه اللعبة ضد نفسها.

Sources & notes
  1. Seed-to-level generation, the preSolved rejection test, the plausiblySolvable one-ramp solver (grid ranges, four angles, up to 40 attempts, fallback world), and the daily-seed date string are all read directly from Contraption's own game engine and random-number code. Grounded in the game's code, not invented.
  2. mulberry32 is a compact 32-bit pseudo-random generator by Tommy Ettinger; it advances its state with the constant 0x6d2b79f5 and has a period of 2³². Author's reference gist (with his own later caveats on its equidistribution). gist.github.com/tommyettinger/46a874533244883189143505d203312c
  3. "Fowler–Noll–Vo hash function." Wikipedia, the 32-bit FNV offset basis is 2166136261 (0x811c9dc5) and the FNV prime is 16777619 (0x01000193); FNV-1a XORs each byte into the hash first and then multiplies by the prime. en.wikipedia.org/wiki/Fowler–Noll–Vo_hash_function
  4. On generate-and-test / "generation followed by evaluation" as a general search and problem-solving strategy, and its kinship with procedural generation and evolutionary methods. See "Procedural generation," Wikipedia. en.wikipedia.org/wiki/Procedural_generation
  5. Further reading on Procedural generation, [2410.15644] Procedural Content Generation in Games: A Survey with Insights on Emerging LLM Integration. arxiv.org.
  6. Further reading on Procedural generation, Procedural Content Generation in Games: A Survey with Insights on Emerging LLM Integration. doi.org.
  7. Further reading on Procedural generation, "Procedural City Generation with Combined Architectures for Real-time V" by Gr. open.clemson.edu.
Was this worth reading?
← Back to Contraption
PlayPendium · About · Contact · Privacy · Terms · Cookies · Accessibility · Copyright · Browse all games · Inspirations · © 2026