سؤال

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

الجزء الصعب الوحيد هو أنه يجب علي فعل شيء مشابه لهذا التكرار: (s = حجم القائمة)

For(I,1,S)
    If X=LX(I) and Y=LY(I)
    Then
        Disp "GAME OVER"
        Return
    End
End

إنها حلقة قصيرة إلى حد ما ، لكنها تستغرق إلى الأبد حتى على قائمة 10 عناصر. جربت طريقة التسلسل:

If sum(seq(X=LX(I) and Y=LY(I),I,1,S))
...

التحسين الآخر الوحيد الذي يمكنني التفكير فيه هو عدم التحقق من القيم لـ n إلى n+2 (لأن الجزء الأول من ذيلك الممكن أن يضرب هو في n+3) ، لكن هذا يطرح المشكلة بعد 4 نقاط ، و إن وجود اللعبة غير قابلة للعب مع 14 نقطة ليس أفضل من كونها غير قابلة للعب بعد 10 نقاط.

استخدام التجميع ليس خيارًا لأنه ليس لدي كابل رابط (أو الرغبة في كتابة التجميع).

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

المحلول

لم تستخدم ti-basic ...

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

نصائح أخرى

الكتلة بأكملها:

For(I,1,S)
    If X=LX(I) and Y=LY(I)
    Then
        Disp "GAME OVER"
        Return
    End
End

يمكن استبداله بـ:

If sum(X=LX and Y=LY)
Then
    Disp "Game Over"
    Return
End

X=LX يطبق الاختبار التدريجي على كل عنصر من عناصر LX, ، والشيء نفسه ينطبق على Y=LY. ال sum() يتحقق إذا كان هناك ملف 1 في تقاطع القائمتين.

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

على سبيل المثال ، مع وجود مواقف الرأس والذيل ، (F ، G) كونها اتجاه الثعبان ، و (M ، n) كونها الطعام.

if Pxl-Test(I+F, J+G) #pixel in front of snake
then
if I+F=M and J+G=N
stop
end

أكثر بكثير من الذاكرة المحفوظة من صفيف ثنائي الأبعاد.

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