سؤال

لذلك أنا أقوم ببناء لعبة Pacman في Java لتعليم نفسي برمجة الألعاب.

لديّ نافذة اللعبة الأساسية مع Pacman Sprite و Ghost Sprites المرسومة ، يتحرك Pacman مع مفاتيح الأسهم ، لا يتجاوز جدران النافذة ، وما إلى ذلك. الآن أحاول بناء المتاهة ، كما في هذا صورة:

Pacman maze

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

ها هي أسئلتي:

1) ما هي أكثر الخوارزمية/طريقة كفاءة لإنشاء هذه المتاهة؟ هل يجب رسمها في كل مرة تسمى طريقة Paint () أم أن هناك طريقة لرسمها فقط في بداية اللعبة وليس مرة أخرى؟

2) كيف سيتم سحب هذا بالفعل على الشاشة؟ أفترض fillRect() سوف يستخدم؟

3) أي تلميحات حول اكتشاف الاصطدام (وبالتالي لا يمكن أن يمر Pacman/Ghosts عبر الجدران) سيكون مفيدًا.

4) أي تلميحات حول كيفية حساب المسافة الشاغرة بين الأنابيب بحيث يمكن ملء النقاط بينهما مفيدة للغاية.

شكرًا

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

المحلول

لن أفعل ذلك بهذه الطريقة.

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

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

تعديل:

كل عنصر يمثل حول مكان وجود نقطة. فمثلا:

لا ، بالنظر إلى اللوحة ، أود أن أقول إن الصفيف سيبدو مثل هذا.

d,d,d,d,d,d,d,d,d,d,d,d,w,w,d,d,d,d,d,d,d,d,d,d,d,d
d,w,w,w,w,d,w,w,w,w,w,d,w,w,d,w,w,w,w,w,d,w,w,w,w,d
p,w,w,w,w,d,w,w,w,w,w,d,w,w,d,w,w,w,w,w,d,w,w,w,w,p    
d,w,w,w,w,d,w,w,w,w,w,d,w,w,d,w,w,w,w,w,d,w,w,w,w,d    
d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d

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

شيء آخر سترغب في تذكره هو أن Pacman والأشباح غالبًا ما يكونون بين النقاطين ، لذا فإن تحتوي على معلومات تمثل نسبة مئوية من المساحة التي يشغلها ما بين 1،2 و 1،3 أمر مهم للكشف عن التصادم وكذلك تحديد عندما تريد إزالة النقاط ، Powerups و Candy من اللوحة.

نصائح أخرى

هذا تلميح لك:

alt text http://www.freeimagehosting.net/uploads/66e4131f59.jpg

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

  1. يمكنك طلاء الخريطة في hearedimage و drawimage فقط على كل الطلاء (). ستحصل على أداء معقول بهذه الطريقة.

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

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

  4. لا أفهم ما تحاول أن تسأله هنا.

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

كانت الإجابات الأخرى معقولة للأسئلة الأخرى التي طرحتها.

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