Unlimited WordPress themes, graphics, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Game Development
  2. Game Design
Gamedevelopment

كيفية وضع رمز سري للأبواب والأقفال.

by
Difficulty:IntermediateLength:LongLanguages:

Arabic (العربية/عربي) translation by osamagaradh (you can also view the original English article)

في الالعاب المصنوعة من غرف متصلة مثل أسطورة زيلدا،الأكثر حداثةً -ملزمة إسحاق-، أو أي نوع من روجويلايك أو حتى مثل مترويدفانيا، تلعب الأبواب جزءا أساسيا في الملاحة وتقدم محرز للاعب.

الابواب تسمح للاعب بالسفر من غرفة واحدة أو من مستوى إلى آخر، حتى يحتل مكاناً هاما في الملاحة والاتصال لمختلف الغرف واحدة إلى آخرى، وفي تعريف الخريطة بانها عالم مفتوح أو أرضية زنزانة. قد تعمل أيضا كحواجز مؤقتة التي على اللاعب  فك قفلها عن طريق ميكانيكية محددة (مثل الحصول على مفتاح، أو تنشيط مفتاح تبديل).

في هذا البرنامج التعليمي، سوف اظهر عدة ميكانيكيات اقفال ، واقتراح السبل لتزويدها في الألعاب الخاصة بك. هذه ليست بأي شكل من الأشكال قصدت لأن تكون التزويدات الوحيدة او الافضل؛ هي أمثلة عملية.

العروض التفاعلية في هذا البرنامج التعليمي قدمت مع أداةHTML5 2 لصنع اللعب كونستركت5  وينبغي أن تكون متوافقة مع اصدارها المجاني. (ملفات  كاب اكس متوفرة في تحميل المصدر). ومع ذلك، هذا البرنامج التعليمي يجب أن يساعدك على تعلم كيفية تنفيذ منطق الأبواب والأقفال في أي محرك تهوى. حالما تحصل على الفكرة وراء هذا المنطق، كل شيء سيعتمد على المعرفة ل  اداة /لغة الترميز الخاصة بك والطريقة التي تريد أن تكيفها مع اللعبة التي تصنعها حاليا.

دعنا نغوص في الموضوع !

الميكانيكية الأساسية

الباب هو أساسا كتلة من الديكور التي لا يمكن مرورها، تمنع اللاعب من المرور خلالها حتى يكون غير مقفل. يمكن أن يكون الباب في حالات مختلفة: مؤمن أو غير مؤمن، مغلق او مفتوح.

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

في العروض التالية، الابواب ممثلة من خلال اثنتين من الرسومات:


هذا باب مغلق.

هذا باب مفتوح

لقد استعملت أيضا ألوان مختلفة لتمثيل مختلف المواد التي قد تكون الأبواب صنعت منها – ولكن، لنكون صادقين، الجانب المتعلق بالرسوم البيانية متروك لك ولللعبة الخاصة بك،الجزء الأكثر أهمية هو أن الباب ينبغي أن يكون محدد بوضوح بأنه باب، وينبغي أن يكون واضحا ما إذا كان سيعرقل تقدم اللاعب أو سيفتحه وسيقود  بقية العالم أو المستوى.

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

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

لفتح الباب، اللاعب يجب أن يحتوي  المتغير المنطقي has_key نفسه عند اللاعب عندما التقطت المفتاح: true إذا كان لديهم، false إذا لم يكن

في هذه الميكانيكية الأساسية، المفتاح يشكل جزء من قائمة مخزون اللاعب، ومفتاح واحد يفتح جميع الأبواب. استخدام المفتاح على باب لا يستهلكه؛ يبقى المفتاح في المخزون للاعب.

 لتصور ذلك، نحن ببساطة ستطيع ان نعرض صورة للمفتاح في -ال هود- للسماح للاعب بان يعرف أنه "يملك" مفتاح الذي يمكن أن يفتح الأبواب بمجرد ان اللاعب التقطه (عن طريق تحرك اللاعب نحو المفتاح في الغرفة).

انظر في المثال الأساسي التالي:

انقر فوق العرض التوضيحي للتركيزعليه، ثم سيطر على اللاعب باستخدام مفاتيح الأسهم في لوحة المفاتيح وتنفيذ الاجراءات بالمسطرة. (في هذا المثال، الاجراء هو "فتح باب").

الجدران هي كتل صلبة  لا تسمح للاعب المرور من خلالها  عند الاصطدام بها. الأبواب المغلقة أيضا صلبة.

لفتح باب، يجب على اللاعب ان يكون داخل 64 بكسل من الباب ويمتلك مفتاح (أي، المنطق المتغيرhas_key  التي تحدد ما إذا كان اللاعب لديه المفتاح في قائمة الادوات الخاصة به يجب أن يكون true).

مع هذه الظروف، عندما يضغط اللاعب على مسطرة لوحة المفاتيح، يتم تغيير حالة الباب المناسبة. يتم تعيين المنطق المتغير له locked إلى false، وحالته "الصلبة" تتعطل.

في حالة ، هذا قد يبدو شيئا مثل:

تذكير: هذه التعليمات البرمجية لا تمثل لغة معينة؛ يجب أن تكون قادرعلى تنفيذها في أي لغة تريد.

يمكنك أيضا ملاحظة أننا نقوم بعملية تدقيق عندما اللاعب لا يكون يملك المفتاح المتوقع، وعرض  رسالة توضيحية تشرح لماذا لم يكن الباب غير مقفل. يمكنك التعامل شيكات مثل هذه التي بيد أن تناسب اللعبة الخاصة بك — فقط ادرك أنه من الجميل دائماً إعطاء توضيح للاعب أنه تم تسجيل اجراءه، وشرح السبب لماذا لم يتم إكماله.

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

نظم تأمين مختلفة

لقد شهدنا النظام الأساسي الذي فيه المفتاح جزء كامل من قائمة ادوات اللاعب ومفتاح واحد يفتح جميع الأبواب، ويمكن إعادة استخدامه  لفتح أبواب عدة. دعونا نبني على هذا.

مثال: كومة المفاتيح

في المثال التالي، سيكون للاعب كومة من المفاتيح في قائمة ادواته. على الرغم من أن هناك عدة ألوان مختلفة من الباب، والفرق  رسوميا بحتاً هنا – الباب المستخدم هو نفسه كما في المثال الأساسي، ونوع واحد من المفاتيح يمكنه فتح أي منها. لكن هذه المرة، كلما قمت باستخدام مفتاح لفتح باب، تتم إزالة هذا المفتاح من الكومة.

على قدر ما هو الترميزمهم، هذا التعديل غالبا على مستوى الشخصية للاعب. بدلاً من المنطق المتغير has_key، سوف تحتاج لأن يكون لديك متغير عددي  يحمل عدد المفاتيح للاعب "في رصيده".

في كل مرة اللاعب يلتقط مفتاح، اضف 1 إلى هذا المتغير ليمثل الصعود في الرصيد . في كل مرة اللاعب يفتح باب، اطرح 1 من هذا المتغير ليمثل استخدام مفتاح. (في  لعبة فيديوالأرض، والمفاتيح يتم تدميرهم حالما يتم استخدامهم مرة واحدة.)

تعديل آخر يكون عندما يضغط اللاعب على المسطرة للوحة المفاتيح: بدلاً من التحقق من أن المنطق المتغير has_key هو true،نريد فعلا أن تحقق من أن قيمة  KeyStack أكبر من الصفر، بذلك يمكننا أن نستهلك مفتاح بعد فتح الباب.

في الكود الزائف، هذا يبدو شيئا مثل:

مثال ويتش كيي-اي مفتاح-

في هذا المثال الجديد، سوف نفترض سيناريو حيث يتطلب كل نوع مختلف من الأبواب نوع مختلف من المفاتيح إلى أن يفتح قفله .

هنا، كما هو الحال في المثال الأساسي الأول، المفاتيح سوف تكون جزءا من قائمة ادوات اللاعب. وسوف نعود إلى استخدام المتغيرات المنطقية لتحديد ما إذا كان اللاعب قد التقطت المفاتيح المطلوبة. وبما انه سيكون لدينا مفاتيح مختلفة، سيكون لدينا أيضا أنواع مختلفة من الأبواب (باب اسود، وباب أحمر، باب ذهبي) الذين سيتطلبوا أيضا مفتاح مناسب للسماح لهم بالفتح (مفتاح أسود ، مفتاح أحمر، مفتاح ذهبي، على التوالي).

 الابواب سوف يستخدموا رسوم حاسوبية مختلفة لإظهارموادهم، وسوف تحتوي على متغير رقمي ,المسمى  WhichKey الذي سوف يشير إلى نوع المفتاح المتوقع ونوع الرسم الذي ينبغي  ان يعرضه.  القيم الرئيسية المختلفة للمتغيرات ثابتة، لتحسين إمكانية القراءة.

في الكود الزائف هذا :

وهذا تغيير على المثال الأساسي الذي يسمح بعدة أنواع من المفاتيح والأبواب والذي لا يستهلك مفاتيح لفتح الأبواب. بمجرد امتلاك المفتاح، سيعتبر جزء من قائمة الادوات الخاصة بك — جزء من "احصاءات اللاعب".

مثال التبديل

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

الأبواب هنا  ضرورية للعمل عليها كما هوالحال في المثال الأساسي.  يمكنها أن تعرض رسومات مختلفة، ولكن المنطق للباب لا يزال هو نفسه. لكن هناك اضافة : نقوم بإضافة اثنين من المتغيرات الرقمية DoorID و SwitchID، التي نستخدمها لمعرفة رمز التبديل الذي يرتبط فيه كل باب.

رموز التبديل هي نوع جديد من المستخدمات التي قد اخترتها لاضافة الصلابة (ولكن لا يجب عليك استخدامها). انها تحتوي على المتغير المنطقي , Activated والمتغيرات الرقمية DoorID و SwitchID التي، كما يمكنك التخمين، سنستخدمها لتحديد رمز التبديل الذي يرتبط فيه كل باب.

اذا عندما يكون رمز التبديل Activated: True،  الباب "المرتبط" سيكونLocked: False . عملنا مع شريط المسافة في لوحة المفاتيح سوف يحدث عندما نكون بجوار مفتاح تبديل، بدلاً من جوار باب. لاحظ عدم وجود مفتاح في هذا المثال، نظراً لان رموز التبديل بمثابة مفاتيح:

نحن فقط يمكننا استخدام الرموز البسيطة التي تتحقق من روابط تبديل الباب في نفس الغرفة (حيث يعرض هذا المثال ثلاثة أبواب ومفاتيح تبديل في نفس الغرفة)، ولكن في وقت لاحق، سوف نرى أننا قد نجد مفاتيح تعمل على الأبواب وفي غرفة أخرى ، وحيث ان عملها لن يحدث  في نفس اللحظة التي يقوم بها اللاعب بتنشيط رمز التبديل؛ سيحدث في وقت لاحق، سيحدث عندما يتم تحميل الغرفة الجديدة.

لهذا السبب، نحن بحاجة إلى استمرارية. خيار واحد لذلك وهو استخدام صفائف لتعقب البيانات مثل في حالة مفاتيح التبديل (وهذا، إذا كان كل رمزتبديل منشط أم لا).

في صيغة الكود الزائف:

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

مثال لوحة مفتاح التبديل

تتشابه لوحة مفاتيح التبديل برموز التبديل، بمعنى أنهم أما ان يكونوا منشطين او لا، وبامكانية  ربطهم بالأبواب لقفلهم أو إلغاء قفلهم. الفرق يكمن في كيفية تنشيط لوحة مفتاح التبديل، الذي يتم عن طريق الضغط.

في المثال المعروض من أعلى إلى أسفل ، سيتم تنشيط  لوحة مفتاح التبديل كلما كان اللاعب يتداخلها ويضغطها. يمكنك الضغط على شريط المسافة لإسقاط صخرة على لوحة مفتاح التبديل، وتركها في حالة منشطة حتى عندما اللاعب لا يكون واقفا عليها.

 تنفيذ هذه مشابه للمثال السابق، مع تعديلين صغيرين:

  • يجب عليك تنشيط لوحة مفتاح التبديل عندما اللاعب أو الصخور فوقها.
  • عليك جعل شريط المسافة يسقط صخرة (من قائمة الادوات) على لوحة مفتاح التبديل.

مثال الغوغاء-موبس-

ميكانيكية قفل اخرى ممكنة تتطلب من اللاعب التخلص من جميع الأعداء (تعرف أيضا باسم الغوغاء) في غرفة أو منطقة لتحفيز فتح الأبواب.

على سبيل المثال، لقد صنعت بعض من المناطق في غرفة واحدة؛ كل منطقة لها باب وعدة اعداء  (على الرغم من أن هؤلاء الأعداء لا تتحرك ولا تتعامل مع الضرر).
كل منطقة لها اللون الخاص بها.

شريط المسافة سيجعل اللاعب يطلق بعض المقذوفات؛ سوف يقتلغوغاء بثلاثة قذائف .

هذا النوع من الميكانيكية يستخدم في أسطورة زيلدا وربط إسحاق، وتدور حول وظيفة التحقق التحقق من عدد الأعداء الذين يعيشون في الغرفة أو في المنطقة. في هذا المثال، تحمل كل منطقة ملونة عدد من الغوغاء الذين يعيشون، تحفزت عند تحميل الغرفة، وهي مرتبطة بالباب. وفاة كل غوغاء ينقص 1 من هذا العداد؛ بمجرد أنه يصل إلى 0، يتم تغيير حالة الباب Locked   إلى False.

في هذا المثال، Area   هي رسم حاسوبي ملون مع متغير رقمي مرتبطة بها، AliveMobs ، التي تحسب عدد الغوغاء التي تتداخل للمنطقة. عندهزم جميع الغوغاء في المنطقة ,الباب المقابل يفتح (باستخدام نفس الميكانيكية كما شاهدنا في المثال الأساسي).

مثال التنقل

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

في هذا المثال، تكون الأبواب مفتوحة بشكل افتراضي بما انّا مهتمون أكثر بالجانب المتعلق بالملاحة-التنقل- .

الميكانيكية هذه تعتمد كثيرا على اللعبة التي تصنعها، فضلا عن الطريقة التي تتعامل بها مع بنية البيانات للأرضيات الخاصة بك. لن أخوض في تفاصيل كيفية عمل جهاز التنفيذ هنا، لانها خاصة ب كونستركت 2-بناء2-، ولكن يمكنك العثور عليها في ملفات المصدر إذا كنت ترغب.

الخلاصة

 خلال هذه المقالة، شاهدنا كيف ان الأبواب هي عقبات مؤقتة  تتطلب مفاتيح أو ميكانيكية فتح مثل مفاتيح أو لوحة مفاتيح أو حتى الموت للغوغاء. كما شاهدنا كيف يمكن ان تكون بمثابة "جسور"، تتيح التنقل عبر مناطق مختلفة من العالم للعبة.

كتذكرة سريعة، إليك بعض ميكانيكات قفل ممكنة:

  • مفتاح واحد لجميع الأبواب، كجزء من قائمة الادوات.
  • مفاتيح قابلة للاستهلاك: في كل مرة تقوم بفتح باب، يذهب مفتاح واحد بعيداً عن الكومة الرئيسية الخاصة بك.
  • الأبواب المختلفة تتطلب مفاتيح مختلفة.
  • رموز التبديل، أو لوحات مفاتيح التبديل، حيث كنت لا تعمل مباشرة على الباب لفتحه ولكن عن طريق جهاز مستقل مرتبط.
  • قتل جميع الغوغاء في المنطقة تلقائياً يفتح باب.

إذا تم خلط جميع تلك الميكانيكات في لعبة، يمكن أن ينتهي بك الأمر مع شيء من هذا القبيل:

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

يحدوني الأمل بانك تمتعت بهذه المقالة، وأنها كانت مفيدة لك، وأود أن أذكر أنه يمكنك العثور على المصدر لجميع العروض في جيت هب. يمكنك فتحها وتحريرها في الإصدار المجاني كونترست2 -بناء 2 (الإصدار r164.2 أو أعلاه).

المراجع

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.