اللعبة لا تؤلّف أي لغز يدويًا على الإطلاق. بل تُنمّيه من رقم واحد، ثم تلعب ذلك اللغز ضد نفسها لتتأكد من أنه ليس تافهًا ولا مستحيلًا قبل أن تراه أنت أصلًا.
كُتب وحُرِّر بالإنجليزية. أُنتجت هذه النسخة العربية بالترجمة الآلية؛ وحيثما كانت الدقة مهمة، فالأصل الإنجليزي هو المرجع المعتمد. اقرأ الأصل بالإنجليزية ←
لا يُخزَّن مستوى Contraption في أي مكان. لا يوجد ملف يسرد أين يقع المرمى أو كيف رُتّبت الحواف. بدلًا من ذلك، فإن المستوى بأكمله، أي نقطة انطلاق الكرة، وموضع المرمى، وعدد الجدران الثابتة ومواضعها، ومخزون الأجزاء الذي يُسلَّم إليك، يُحسَب من رقم ابتدائي واحد يُسمّى البذرة. أعطِ المولِّد البذرة نفسها فتحصل، بايتًا ببايت، على اللغز نفسه. 1
وهذا ممكن لأن مصدر «العشوائية» الوحيد لدى المولِّد هو مولِّد أرقام شبه عشوائية صغير وحتمي. والذي تستخدمه Contraption هو mulberry32، وهو مولِّد مضغوط بعرض 32 بتًا من تأليف تومي إتينغر، ويمكنك التعرّف عليه من ثابته المميّز، 0x6d2b79f5، الذي يُضاف إلى الحالة في كل سحب. 2 إنه سريع، ويتّسع في بضعة أسطر، والأهم من ذلك أنه ليس عشوائيًا على الإطلاق: إنه متتالية رياضية ثابتة لا تعدو أن تبدو مخلوطة. أعطِه نقطة بداية فينتج تيار الأرقام نفسه إلى الأبد. ثم يقرأ المولِّد ذلك التيار ليقرّر أين يضع كل شيء.
يعتمد وضع «يوميًا» على هذه الحتمية ليفعل شيئًا اجتماعيًا. فبذرته ليست عشوائية، بل تُصنَع من التقويم. تأخذ اللعبة تاريخ اليوم بالتوقيت العالمي، وتكتبه في سلسلة قصيرة مثل "contraption:2026-7-28"، ثم تمرّر ذلك النص عبر دالة تجزئة لتختزله إلى رقم واحد بعرض 32 بتًا. 1
دالة التجزئة هي FNV-1a، وهي خلّاطة معروفة غير تشفيرية: تبدأ من إزاحة ثابتة، هي العدد العشري 2166136261، أو 0x811c9dc5، ثم تطوي كل حرف داخل الحالة بعملية «أو الحصرية» وتضرب بعد ذلك في عدد FNV الأولي 16777619. 3 يترك ذلك رقمًا ثابتًا ليوم معيّن ومختلفًا اختلافًا هائلًا من يوم إلى الذي يليه، بحيث يبعثر تغييرُ حرف واحد في التاريخ البذرةَ بعثرةً تامة. ولأن التقويم واحد للجميع، فالبذرة واحدة كذلك، واللغز واحد كذلك. غريبان على طرفي العالم المتقابلين يفتحان وضع «يوميًا» فيواجهان الملعب نفسه تمامًا، وهذا بالضبط ما يجعل مقارنة النتائج ذات معنى.
التحدي اليومي عادل لا لأن خادمًا يرسل إلى الجميع المستوى نفسه، بل لأن نسخة كل لاعب تعيد بشكل مستقل حساب المستوى نفسه من التاريخ نفسه.
الهندسة العشوائية سهلة؛ أما الهندسة العشوائية الجيدة فليست كذلك. فالمولِّد الذي يكتفي بنثر مرمى وبضع حواف سينتج أحيانًا مستوى تسقط فيه الكرة، حين تُلقى من الأعلى، مباشرة في المرمى من تلقاء نفسها. ذلك ليس لغزًا، بل مشهد سينمائي. لذا قبل أن تقبل Contraption عالمًا مرشّحًا، تُجري اختبارًا صامتًا يسمّيه الكود preSolved: تحاكي المستوى دون وضع أي جزء وتتحقق مما إذا كانت الكرة المجرّدة تصل إلى المرمى بالجاذبية وحدها. فإن وصلت، يُطرح المستوى جانبًا ويعيد المولِّد الرمي من جديد. 1
هذا قلب دقيق للطريقة التي تفكّر بها عادةً في محرّك فيزيائي. فدالة simulate() نفسها التي تُشغّل آلتك تُوجَّه إلى الداخل، في وقت التوليد، لتدقيق صعوبة المستوى نفسه. المحرّك هو في آن واحد حكَم حلّك ومفتّش جودة اللغز.
رفض المستوى الأسهل من اللازم ليس سوى نصف المهمة. أما الخطر الآخر فهو المستوى المستحيل، أي مرمى مدسوس في مكان لا يستطيع أي ترتيب للأجزاء بلوغه. تتحصّن Contraption من ذلك بحلّال صغير بالقوة الغاشمة يُدعى plausiblySolvable. إنه لا يفكّر بذكاء. إنه يحاول فحسب. 1
وتحديدًا، يمرّر منحدرًا واحدًا عبر شبكة من المواضع فوق الملعب، ويجرّبه في كل موضع مائلًا بأربع طرق مختلفة. ولكل واحد من هذه المواضع التجريبية يُشغّل المحاكاة الكاملة ويسأل: هل أوصل ذلك المنحدر الوحيد الكرة إلى مقصدها؟ وما إن ينجح أي موضع، يُعلَن المستوى قابلًا للحل ويُشحَن إليك. أما إذا لم ينجح أي منها بعد المسح الكامل، فيفضّل المولِّد التخلص من المستوى وتجربة بذرة جديدة.
| معامل المسح | المدى | المعنى |
|---|---|---|
| المنحدر X | 15 → 85، بخطوة 14 | أعمدة عبر الملعب |
| المنحدر Y | 30 → 120، بخطوة 18 | صفوف نازلة في الملعب |
| الزوايا المجرَّبة | 4 | ±0.45 و±0.8 راديان |
| الاختبار لكل موضع | محاكاة كاملة واحدة | هل تصل الكرة إلى المرمى؟ |
يجدر بنا أن نكون صادقين بشأن ما يثبته هذا، لأن الكود صادق بشأنه أيضًا: فالتعليق يسمّيه «فحص معقولية رخيص … غير شامل». المستوى الذي يجتاز الفحص لديه بالتأكيد حلّ خام واحد على الأقل بمنحدر واحد. أما المستوى الذي يرسب فقد يظل قابلًا للحل بمروحة، أو ترس، أو منحدر أذكى لم تجرّبه الشبكة قط، ولذلك لا يعامل المولِّد الرسوب على أنه دليل على الاستحالة. إنه يحتفظ بأول عالم غير تافه وجده بوصفه خيارًا احتياطيًا، وإذا مرّت أربعون محاولة دون حلّ نظيف بجزء واحد، فإنه يشحن ذلك الخيار الاحتياطي بدلًا من الدوران إلى ما لا نهاية. والنتيجة ضمانة عملية: لا فوز مجاني أبدًا، ومسار حقيقي للدخول في الغالب الأعم، ولا انتظار لا نهائي أبدًا للمستوى «المثالي». 1
تراجع خطوة إلى الوراء فتجد أن صانع المستويات في Contraption مثال نظيف على نمط قديم جدًا وعام جدًا في حل المشكلات: التوليد والاختبار. اقترح مرشّحًا عشوائيًا؛ افحصه مقابل متطلباتك؛ احتفظ به إن اجتاز الفحص، وتخلّص منه واقترح غيره إن رسب. إنها الحلقة الكامنة وراء المحتوى الإجرائي في ألعاب لا تُحصى، ووراء قدر كبير من الحوسبة التطورية، بل، إن ضيّقت عينيك قليلًا، وراء الانتقاء الطبيعي نفسه: الطفرة تقترح، والبيئة تختبر، والناجون يبقون. 4
ما يجعل نسخة Contraption أنيقة هو أن الاختبار ليس بديلًا رخيصًا عن قابلية اللعب، بل هو قابلية اللعب ذاتها. فالمولِّد لا يقدّر ما إذا كان المستوى عادلًا بعدّ الحواف أو قياس المسافات. إنه يلعب المستوى حرفيًا، مرتين: مرة فارغًا للتأكد من أنه ليس هدية مجانية، ومرة بمنحدر استكشافي للتأكد من وجود مسار. الفيزياء الحتمية نفسها التي ستحكم على حلّك هي الفيزياء التي دقّقت اللغز. لا يوجد «مدقّق مستويات» منفصل يمكن أن ينحرف عن القواعد الحقيقية، لأنه لا توجد سوى مجموعة واحدة من القواعد، تُستخدم لكل شيء.
ولأن كل ذلك حتمي، فإن التدقيق خالٍ من الحظ في الاتجاهين معًا. فلا تستطيع البذرة اليومية أن تتآمر لتمنح لاعبًا ملعبًا أسهل مما تمنحه لآخر، ولا تستطيع أن تمنح أحدًا ملعبًا غير عادل، لأن المستوى، قبل أن يصير تحديًا، قد نجا بالفعل من أن تلعبه اللعبة ضد نفسها.