في هذا البرنامج التعليمي ، سأتحدث عن مصطلحين أستخدمهما لوصف المولدات الإجرائية:
مساحة عامة
ومساحة ممكنة . سنحدد هذين المصطلحين ثم نفكر في الأمثلة التفاعلية لفهم الفرق بينهما. هذه المصطلحات مفيدة حقًا لوصف المولد الإجرائي وفهم الفرق بين مولدين. لنبدأ!
تخيل كتابًا ضخمًا يوفر لقطة لكل عالم Minecraft. يتم تمييز كل لقطة بشجرة
عشوائية ، وهو رقم فريد يمكنك إدخاله في Minecraft وإنشاء هذا العالم. تعرض الصفحة الأولى العالم الذي تم إنشاؤه من seed = 0 ، بينما تعرض الصفحة التالية العالم من seed = 1 ، وهكذا. بشكل عام ، يحتوي مولد Minecraft world على 2
64 قيمة توليد عشوائية ، وهذا رقم كبير: يمكن أن تولد اللعبة 18 446 744 073 709 551 616. في كل مرة تنقر فوق "عالم جديد" ، يتم إنشاء عالم بناءً على إحدى هذه البذور. الرقم 2
64 هو حجم
مساحة جيل Minecraft ، والكثير من كل شيء يمكن أن تولده اللعبة.
الآن تخيل أن عالم ماين كرافت يتكون فقط من عشب عادي ، ينتشر بلا نهاية في جميع الاتجاهات. تحتها لا توجد كهوف ، ولا حجر ، ولا أشجار وتلال ، ولا حيوانات. طبقة واحدة فقط من بلاط العشب. بالإضافة إلى كونه مملًا جدًا ،
فلن يتم إنشاء مثل هذا العالم في Minecraft (ما لم يتم استخدام التعديل). يمكننا أن نتخيل ذلك ، يمكننا وصفه ، حتى نفتتح Minecraft وننشئه بأنفسنا يدويًا - لكن Minecraft لا يمكنها توليده.
كيف نعرف ذلك؟ يمكنك إثبات ذلك بعدة طرق مختلفة ، ولكن أسهل طريقة لتذكر ماين كرافت هي المناطق الأحيائية المنتشرة في الصحراء مثل الغابة أو الغابة. في مثالنا مع العالم العشبي ، فهم ليسوا كذلك ، فنحن نعرف أنه لا يمكن إنشاؤه باستخدام مولد قياسي.
عالم الحشائش هو ما نسميه
فضاء الفرص Minecraft Worlds - مجموعة من عوالم Minecraft الممكنة التي يمكننا تخيلها أو تخيلها أو وصفها. لكن عالم العشب
ليس في
مساحة جيل Minecraft ، لأنه لا يمكن إنشاؤه بواسطة المولد الإجرائي للعبة. يمكننا أن نتخيل عالم Minecraft مع نسخة طبق الأصل من Persepolis لتوسيع نطاقها ، أو العالم في شكل منحوتات حجرية جالسة وقراءة هذه المقالة - كل هذه عوالم Minecraft
ممكنة ، ولكن لن يتم إنشاؤها بواسطة اللعبة.
الرسم البياني الموضح أعلاه يعطينا فكرة عن كيف يبدو كل شيء. كل ما هو موجود في مساحة جيل Minecraft يجب أن يكون أيضًا في حيز الاحتمالات الخاص به ، لأنه إذا كان Minecraft يمكنه إنشاء شيء ما ، فيجب أن يكون من الممكن إنشاؤه في Minecraft! ولكن ليس كل مساحة الاحتمالات موجودة في فضاء الجيل ، بما في ذلك مثالنا مع عالم يتكون من العشب. لكن الحجم لا يحترم في هذا المخطط. في الواقع ، مساحة إمكانيات Minecraft أكبر
بكثير من مساحة جيلها.
لفهم حجمها الكبير ، دعونا نحسب حجم عالم ماينكرافت واحد. الحجم هو العرض مضروبًا بالطول ، مضروبًا بالعمق. افتراضيًا ، يبلغ ارتفاع عوالم Minecraft 256 بلاطة ، وتبدأ في الانقسام إلى ما يقرب من 30000 بلاطة في جميع الاتجاهات من نقطة البداية ، أي أن الحجم التقريبي للعالم هو:
256 x 60 000 000 x 60 000 000 = 921 600 000 000 000 000
كل من هذه الكتل يمكن أن يكون أي عنصر: الحجر ، العشب ، الماء ، الهواء. لتقييمنا ، سنكون كريمين ونستخدم فقط "كتل العالم" ، والتي ، وفقًا لما ذكره Minecraft ، هي
64 نوعًا . هذا يعني أن كل كتلة في Minecraft بها 64 دولة ممكنة. صيغة حساب عدد العوالم الممكنة تساوي عدد خيارات الحالة لكل كتلة مرفوعة إلى قوة عدد القطع:
64 921 600 000 000 000 000 Minecraft
هذا الرقم كبير جدًا لدرجة تعذر العثور على آلة حاسبة على الإنترنت يمكنها حسابه.
للتعمق أكثر في فضاءات الجيل والإمكانيات ، نحتاج إلى مثال يمكننا وضعه على رؤوسنا بشكل أفضل. لذلك ، في بقية البرنامج التعليمي ، سننظر في مستويات لعبة منصة ثنائية الأبعاد لألعاب مثل
Super Mario Bros. أو
Spelunky . سوف ننظر إلى مولدات المستوى لعدة منصات ثنائية الأبعاد. في المقالة الأصلية ، كلها تفاعلية ، بحيث يمكنك إنشاء مستويات خاصة بك. في عملية دراستهم ، سوف نطرح أسئلة حول مساحة جيلهم.
تتوفر جميع الأمثلة على GitHub لدينا كرسم مفتوح المصدر مكتوب في المعالجة .
في عملية الدراسة ، سأطرح أسئلة بالخط العريض ، على سبيل المثال:
ما حجم مساحة الفرص لمستويات الرفع هذه؟ يمكنك تخطيها بأمان إذا كنت ترغب فقط في قراءة المقال واللعب بأمثلة. أود أيضًا أحيانًا إضافة نصائح للمساعدة في الإجابة على الأسئلة ، على سبيل المثال:
التلميح: يبلغ عرض المستويات 40 بلاطة وارتفاعها 10 بلاطات ، ويمكن أن يكون كل بلاطة واحدًا من ثلاثة عناصر: كتلة فارغة أو أرضية أو كتلة إضافية.يمكنك التوقف عند الموجه وعدم التمرير لأسفل في الصفحة إذا كنت لا ترغب في قراءة الإجابة النهائية. لذلك دعونا نلقي نظرة على أول مولد لدينا.
الخوارزمية 1: العشوائية
مولد المستوى الأول لدينا بسيط للغاية - إنه عشوائي تمامًا. كل بطاقة لديها البلاط البداية اليسرى والبلاط الأيمن الخروج. تتمتع جميع بلاطات الخرائط الأخرى بفرصة بنسبة 33٪ ، و 33٪ من الانشغال ، و 33٪ من كونها كتلة إضافية.
ربما لاحظت أن هذا ليس مولد مستوى جيد للغاية. في الواقع ، من المستحيل أن تلعب معظم هذه المستويات ، ناهيك عن اهتمامها. قم بإنشاء عدد قليل من المستويات والتفكير في السؤال:
ما حجم مساحة توليد مثل هذا المولد مقارنة بمساحة الاحتمالات؟تلميح: هل يمكنك التوصل إلى مستوى في فضاء الاحتمالات ، ولكن ليس في فضاء الجيل؟ هل يمكنك التوصل إلى مستوى لا يمكن لهذا المولد إنشاءه؟الجواب الصحيح هو أن مساحة توليد هذا المولد هي
نفس مساحة الاحتمالات. يمكن لأي بلاطة على الخريطة أن تأخذ أي قيمة ، لذلك فإن أي مستوى يمكننا أن نتخيله هو في مساحة التوليد. توجد أكثر مستويات الروعة والأكثر إثارة للاهتمام في مساحة هذا الجيل ، حتى الخريطة المكتوبة على SUPER MARIO IS AWESOME مكتوبة على شكل كتل إضافية. لسوء الحظ ، فإن مساحة التوليد كبيرة للغاية بحيث من المستبعد للغاية العثور على مستوى جيد. كما ترون من خلال النقر على المولد ، فإن معظم المستويات هي مجرد هراء.
الخوارزمية 2: رسم أشكال عشوائية
تعد الخوارزمية التالية أكثر تعقيدًا قليلاً ، وهي تخلق مستويات تشبه ما يمكنك تطبيقه في اللعبة. بدءًا من مستوى فارغ ، يقوم بتحديد نقطة عشوائية في مكان ما ، ثم يرسم خطًا أو مربعًا من كتل المكافآت أو الأرض. ينفذ هذه العملية 20 مرة ، وخلق العديد من الأشكال بشكل عشوائي على المستوى. كما كان من قبل ، يمكنك النقر فوق المثال الموجود في المقالة الأصلية لبدء الخوارزمية مرة أخرى وإنشاء مستوى جديد.
هذا بالفعل بدأ يشبه مستوى النظام الأساسي ، أليس كذلك؟ عند إنشاء مستويات ، تخيل عقلياً كيف تلعبها (كن كريماً إذا لزم الأمر - أضف القدرة على القفز المزدوج ، إذا لزم الأمر ، أو القدرة على القفز خارج سقف الخريطة).
كم عدد المستويات التي يجب إنشاؤها قبل أن تجد مستوى واحد على الأقل يمكنك المرور منه؟لا تكافح من أجل الدقة المطلقة في خطواتك العقلية ، فقط قم بإجراء تقدير تقريبي.
عندما أقوم بإجراء هذا التمرين مع الجمهور ، يستغرق الأمر عادة حوالي 10 محاولات للعثور على المستوى في المتوسط. كم كنت بحاجة؟ تذكر هذا الرقم ، والآن انظر إلى اختلاف المولد نفسه الموضح أدناه. المولد هو نفسه الذي رأيناه للتو ، ولكنه الآن يرسم على مستوى لا 20 ، ولكن 10 أرقام. عد الآن مرة أخرى:
كم عدد المستويات التي تحتاج إلى توليدها قبل أن تجد المستوى الذي يمكنك الذهاب إليه؟ربما استغرق الأمر وقتًا أقل لإيجاد مستوى قابل للعب. دعنا نتوقف لمدة دقيقة ونفكر في الاختلافات بين المولدين ، وهما متطابقان تقريبًا ، باستثناء اختلاف بسيط في المعلمات.
أي مولد يحتوي على مساحة أكبر للجيل - مولد يحتوي على 20 رقمًا أو 10؟تلميح: فكر في المستوى الذي تم إنشاؤه بواسطة مولد ذي 10 أرقام - هل يمكن للمولد ذي 20 رقمًا أن يكون قادرًا على إنشائه؟ ثم فكر في المثال العكسي.الإجابة الصحيحة هي أن المولد الذي يحتوي على 20 رقمًا له مساحة أكبر للجيل ؛ في الواقع ، أنه يحتوي على مساحة توليد كاملة للمولد مع 10 أرقام. لإظهار هذا ، تخيل أي مستوى من مولد مع 10 أرقام. يمكن لمولدنا المكون من 20 رقمًا إنشاء هذا الرقم عن طريق عرض الأرقام العشرة نفسها عن طريق الخطأ ، ثم عن طريق المصادفة يرسمها للمرة الثانية عن طريق الخطأ. ومع ذلك ، لا يمكن رسم أي مستوى يحتوي على 20 رقمًا منفردًا باستخدام مولد ذي 10 أرقام.
هذا يعني أن المولد الذي يحتوي على 20 رقمًا له مستويات أكثر ، بما في ذلك مستويات مثيرة للاهتمام. لكن يجدر بنا أن نتذكر أنه كان من الأسهل بكثير العثور على مستوى قابل للعب مع مولد به 10 أشكال.
إذا كان عليك اختيار مولد لعبة الفيديو الخاصة بك ، أي منها ستستخدمها؟ لا توجد إجابات صحيحة ، ولكن هذا قرار مهم للغاية ، والذي يجب القيام به غالبًا عند العمل مع المولدات الإجرائية. يمكن أن ينتج عن مولد واحد مزيد من التباين ولديه المزيد من المفاجآت ، والآخر أكثر موثوقية وأقل إجهادًا للاعب.
الخوارزمية 3: شظايا المستوى
تستند هذه الخوارزمية إلى مولد المستوى المستخدم في Spelunky ؛ يمكنك قراءة المزيد عنها
هنا . يقوم مولد المستوى باختيار جزء من المستوى الذي تم إنشاؤه بواسطة شخص (أنا) عشوائيًا وإدراجه في المستوى. ثم يختار جزءًا عشوائيًا آخر من المستوى ويدرجه جنبًا إلى جنب ، وهكذا ، حتى يكتمل المستوى. هنا هو المولد ، الخلفية مظلمة بحيث تكون حدود الأجزاء واضحة للعيان:
كم من الوقت مطلوب الآن لإنشاء مستوى للعب؟ ستجد أن كل مستوى تقريبًا قابل للعب. نحن نعلم تمامًا ما هو موجود في كل جزء ، أي أنه يمكننا ضمان وجود كائنات مثيرة للاهتمام على المستوى الذي يمكنك القفز عليه والعقبات التي تحتاج إلى تجنبها. في الوقت نفسه ، إنه أكثر ديناميكية من المستوى الثابت - لا نعرف الأجزاء التي ستظهر فيه وبأي ترتيب. تعتبر خوارزمية Spelunky أكثر ثراءً من ذلك ، فهي تأخذ في الاعتبار الحركة الرأسية ، وتضاف اختلافات عشوائية إلى كل جزء. ابتكر Darius Casemi مولد المستوى التفاعلي Spelunky الرائع ، والذي يمكن العثور عليه
هنا .
هذه المولدات هي حل وسط جيد بين المفاجآت السارة والقدرة على التحكم. عندما يقوم المولد باختيار من قائمة العناصر ويربطها ببعضها البعض (أحيانًا وفقًا لقواعد خاصة ، كما في Spelunky) ، فإننا نسميها
المولد القائم على قواعد اللغة . يسمح لنا القواعد بتحديد أي عناصر بناء يجب على المولد الإجرائي استخدامها ، ولكن أقل صرامة حول كيفية توصيلها. لكن هذه السيطرة والسلامة تأتي بسعر. انظر إلى المولد مرة أخرى ، ثم فكر في الأمثلة السابقة.
كم مرة سيفاجئنا مولد المستوى هذا؟في البداية ، المولد مليء بالمفاجآت ، لأننا نلتقي مع كل جزء لأول مرة. ولكن إذا لعبت أكثر من ذلك ، فإنك تبدأ بسرعة في ملاحظة المكان الذي ينتهي عنده ويبدأ جزء آخر. حتى لو كان هناك المئات من مجموعات الأجزاء في هذا المولد ، في مستويات قليلة فقط تبدأ في الشعور كما لو كنت قد رأيتها جميعًا. تعد البساطة وسهولة فهم قواعد الأجزاء أمرًا رائعًا للمطورين ، ولكن يمكن أن يكون عيبًا من حيث متعة اللاعبين.
الخوارزمية 4: تصميم الإنسان
كمثال أخير ، لن نفكر في خوارزمية ، بل نوع مختلف تمامًا من العملية الإبداعية: عمل الأشخاص في تصميم المستوى. انقر على المولد في المقالة الأصلية وستحصل على واحد من أول مستويين من Super Mario Bros. (بتعبير أدق ، بدايتها الأولى).
بدءًا من المصادفة المطلقة ، انتهى بنا الأمر بهذا ، وهو أحد أشهر الأمثلة على تصميم منصات الألعاب ثنائية الأبعاد في التاريخ. بالطبع ، هذا ليس مولدًا ، لكن بمعنى ما ، يمكن اعتبار هذه المستويات بمثابة مولدات تنشئ مستوى واحدًا ذا جودة عالية. التسوية القصوى بين التحكم والجودة. بالنظر إلى هذا المستوى ، فكر في جميع المولدات التي درسناها اليوم وفكر في السؤال:
أي من هذه المولدات تحتوي على هذه المستويات الشهيرة في فضاء جيلها؟ .
- جيل عشوائي
- 20 الأشكال جيل
- 10 الأشكال جيل
- شظايا المستوى
المولد الأول هو الوحيد القادر على إنشاء مثل هذه المستويات. يمكن أن تنشئها مولدات الأشكال إذا قمنا بزيادة عدد الأشكال الممكنة للرسم ، ولكنها ستزيد أيضًا بشكل كبير عدد المستويات السيئة أو الغريبة. يمكن لمولد القطع المستوي القيام بذلك إذا قدمنا له مجموعة مختلفة من الأجزاء ، لكن هل كل المجموعات الأخرى من هذه الأجزاء يمكن لعبها؟
هذا يوضح لنا مدى صعوبة إنشاء مولد إجرائي. نريد أن نفكر في مولداتنا باعتبارها المحتوى المعتاد للعبة ، لتصور كيف يمر اللاعب بمستوى معين ويتمتع به. لكن كمصممين للجيل ، يجب أن نفكر في كامل مساحة الجيل ، وليس فقط حول مثال واحد منه. ما حجم الفضاء؟ كم هو غني في المفاجآت؟ كيف وغالبا ما يخلق شيئا مملا أو سيئا؟ هل يمكننا اكتشاف وتصفية هذه الحالات ، أم أننا بحاجة إلى البحث عن حل بديل؟ هذه فقط بعض المشكلات التي تحتاج إلى أخذها في الاعتبار عند إنشاء شيء ما للجيل.
لتلخيص
اليوم علمنا بالمفاهيم التالية:
مساحة الجيل
إن مساحة توليد منشئ المحتوى الإجرائي (على سبيل المثال ، منشئ Minecraft العالم) هي مجموعة من جميع النتائج التي يمكن أن تولد. إذا غيرنا الخوارزمية أو حددنا قيمة مختلفة للمتغير ، فستتغير مساحة التوليد.
مساحة الفرص
مساحة الاحتمالات لنوع معين
من المحتوى (على سبيل المثال ، Minecraft world) هي مجموعة من جميع الأمثلة على هذا المحتوى الذي يمكننا تقديمه أو وصفه. عادة ، ولكن ليس دائمًا ، يكون أكبر بكثير من مساحة توليد المولد الإجرائي.
أكثر ليست دائما أفضل
يحتوي المولد الذي يحتوي على مساحة كبيرة من الجيل عادة على محتوى جيد ومحتوى غير متوقع ومحتوى أكثر تنوعًا. ولكن عادة ما يكون لديه المزيد من المحتوى غير المرغوب فيه ، والمزيد من المحتوى الممل والمزيد من المحتوى غير المناسب.
من السهل التحكم في المولد ذي مساحة توليد أقل وأسهل اختباره وفهمه بسهولة. ولكن هذا يمكن أن يجعل الأمر أكثر قابلية للتنبؤ وأقل إثارة للدهشة.
إن إيجاد طرق لتحقيق التوازن بين نقاط القوة والضعف في هذين الأضداد هو فن إنشاء برامج للجيل!
قراءة إضافية والشكر
هذا يخلص تعليمي! شكرا لك على القراءة
من بين المواد المثيرة للاهتمام حول الموضوع الذي درسناه ، أوصي بما يلي: