جونغ - ترتيب البلاط لضمان واحدة على الأقل الطريق إلى النصر ، بغض النظر عن تخطيط

StackOverflow https://stackoverflow.com/questions/159547

  •  03-07-2019
  •  | 
  •  

سؤال

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

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

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

هل كانت مفيدة؟

المحلول

ضع كل البلاط في الاتجاه المعاكس (أي تخطيط خارج المجلس ابتداء من منتصف، والعمل بها)

لندف لاعب أبعد من ذلك، يمكنك أن تفعل ذلك بشكل واضح ولكن بسرعة عالية جدا.

نصائح أخرى

وتلعب لعبة في الاتجاه المعاكس.

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

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

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

إذا قمت بتشغيل إلى طريق مسدود (numFreeTiles == 1)، مجرد إعادة المولدات الخاصة بك :) لقد وجدت أنا عادة لا تصل الطرق المسدودة، ويكون لديهم حتى الآن العد ماكس إعادة المحاولة من 3 ل10- أو حتى تخطيطات لقد حاولت. مرة واحدة أنا ضربت 8 المحاولة، والتخلي عن ومجرد تعيين عشوائيا بقية البلاط. هذا يتيح لي الفرصة لاستخدام نفس مولد لكل من إنشاء المجلس، وميزة المراوغة، حتى لو كان لاعب ثمل وجعل دولة غير قابلة للحل بنسبة 100٪.

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

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

لحل تلك المشكلة الأكبر، وعلاج كل ولاية مجلس الممكنة عقدة في DAG، مع كل زوج مختار يجري ميزة على أن الرسم البياني. هل لاجتياز عشوائي، حتى تجد عقدة ورقة على عمق 72. تتبع تاريخ اجتياز بحيث يمكنك أبدا تكرار النسب.

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

ولقد فعلت دراسة صغيرة جدا من نظرية الرسم البياني، ورغم ذلك ربما هناك حل أفضل للعشوائية مشكلة اجتياز / بحث DAG:)

وتحرير: كنت في الواقع يمكن استخدام أي من الحلول بلدي ث / توليد المجلس في الاتجاه المعاكس، علاء وقد 13th آخر أكتوبر 2008. لا يزال لديك نفس المحاذير، لأنك لا تزال في نهاية المطاف مع الطرق المسدودة. توليد لوحة في الاتجاه المعاكس لديها قواعد أكثر تعقيدا، وإن كان. منها مثلا، ويضمن لك أن تفشل الإعداد الخاص بك إذا كنت لا تبدأ على الأقل بعض من الصفوف ث / أول قطعة في الوسط، كما هو الحال في تخطيط ث / 1 صف طويل. اختيار عشوائي تماما (القانوني) الخطوة الأولى في مولد الأمام في حل من المرجح أن يؤدي إلى لوحة قابلة للحل.

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

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

وأنا أحب أن أسمع أفكار أخرى.

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

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

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

وتبقى تنفيذ هذا الحل باعتبارها ممارسة للقارئ: D

هنا هي القواعد التي استخدمت في التنفيذ.

عندما buildingheap كل الحنق في زوج على حدة ، تجد الخلايا (الأماكن) التي هي:

  • كل الخلايا في المستويات الدنيا مليئة بالفعل
  • المكان الثاني القلق لا يمنع أولا النظر إذا أول الحنق وضعت بالفعل على متن الطائرة
  • كل الأماكن "في حواف" من بنيت بالفعل كومة الذاكرة المؤقتة:
    • إما واحد على الأقل الجار في الجانب الأيسر أو الأيمن
    • أو هو أول الحنق في صف (جميع الخلايا في اليمين واليسار بشكل متكرر مجانا)

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

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

بالتوفيق :)

P. S.إذا كنت قد وجدت algo أن بناء للحل كومة في دورة واحدة - واسمحوا لي أن أعرف.

لديك 144 البلاط في اللعبة، كل من 144 البلاط لديه قائمة كتلة .. (أعلى البلاط في كومة لديه قائمة كتلة فارغة)

جميع التحركات الصحيحة تتطلب بأن "current__vertical_Block_list" تكون فارغة .. هذا يمكن أن يكون مصفوفة 144x144 حتى 20K من الذاكرة بالإضافة إلى LEFT وقائمة كتلة اليمين، وأيضا 20 ك لكل منهما.

وتوليد تحريك الجدول صالح من (remaning_tiles) AND ((فارغة الحالية عمودية القائمة BLOCK) و ((فارغة الحالي LEFT BLOCK LIST) أو (فارغ القائمة الحالية RIGHT BLOCK)))

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

والآن لدينا قائمة من التحركات التي تشكل لعبة سليمة. تعيين مطابقة أنواع البلاط على كل من يتحرك 72.

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

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

وربما يكون هناك خيار آخر لدينا العديد من التصاميم مسبقا (التي تتيح الفوز، ممزوجة مع مستواك الحالي.

لدرجة معينة قد تتمكن من محاولة التأكد من أن واحدة من 4 البلاط ليس أكثر من طبقات X أدناه X آخر.

ومعظم الألعاب أرى أن يكون الأمر خلط للعندما يقوم شخص ما يحصل عالقا.

وأود أن نحاول مزيجا من الأشياء ونرى ما يعمل على نحو أفضل.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top