سؤال

لعبة أنا أكتب أحتاج إلى العثور على قيمة عدد صحيح على المسافة بين مجموعتين من الإحداثيات.انها 2D array الذي يحمل خرائط مختلفة.(مثل الأصلي زيلدا).كذلك تذهب من مركز (5,5) أعلى رقم منذ صعوبة الأعداء يزيد.من الناحية المثالية يجب أن يكون بين 0 و 14.على مجموعة 11x11.

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

        srand(rand());
        int distance=sqrt(pow((5-worldx), 2)-pow((5-worldy), 2));
        if(distance<0) //alternative to abs()
        {
            distance+=(distance * 2);
        }
        if(distance>13)
        {
            distance=13;
        }

        int rnd=rand()%(distance+1);

        Monster testmonster = monsters[rnd];
هل كانت مفيدة؟

المحلول

srand(rand()); لا معنى له ، ينبغي أن يكون srand(time(NULL));

لا تستخدم pow بالنسبة متر فقط استخدام x*x

الصيغة الخاصة بك هو أيضا خطأ ، يجب إضافة رقم معا ليس ناقص

sqrt عودة double ويلقي إلى int سوف يحفظونها

أعتقد sqrt العودة دائما إيجابية عدد

تعرف abs موجود صحيح ؟ لماذا لا تستخدم ذلك ؟ أيضا distance = -distance هو أفضل من distance+=(distance * 2)

srand(time(NULL));

int dx = 5 - worldx;
int dy = 5 - worldy;
int distance=sqrt(dx * dx + dy * dy);
if(distance>13)
{
    distance=13;
}

int rnd=rand()%(distance+1);

Monster testmonster = monsters[rnd];

نصائح أخرى

إنها a^2 + b^2 = c^2 وليس ناقص.بمجرد الاتصال الجذر التربيعي مع سلبية الحجة ، أنت بنفسك.

كنت بطرح الساحات داخل الجذر التربيعي بدلا من إضافتها ("...-الأسرى...").

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