مقدمة
في التنمية الأمامية ، وخاصة تطوير اللعبة ، غالبًا ما يتم استخدام الأرقام العشوائية ، لذلك سوف نفكر في: Math.random ، دعنا نلقي نظرة على الكود التالي:
لـ (var i = 0 ؛ i <10 ؛ i ++) {document.writeln (math.random ()+<br />) ؛ }تشغيل الكود أعلاه يولد 10 أرقام مختلفة. بالطبع يمكنك توليد المزيد ، والذي يبدو جيدًا. إذا كان هذا كل شيء ، فليس هناك حاجة لكتابة هذا المقال.
مثال
حاول التفكير في الأمر. إذا قمنا بإجراء لعبة في سيناريو معين ، ويخرج المستخدم في منتصف الطريق ، بحيث يمكن للمستخدم اختيار الاستمرار في التقدم السابق في المرة القادمة التي يأتي فيها. ثم المشكلة الآن: يمكننا تسجيل بيانات وصف بسيطة مثل تقدم المستخدمين ونقاط المستخدمين ، لكن العقبات التي تبدأ في تسجيل كل شيء في كل شيء ، غير ضروري.
لذلك يظهر رقم البذور العشوائية. إذا كان لدينا قيمة بذرة عندما يتم رسم العنصر بشكل عشوائي على القماش ، ويتم حساب الموضع والحجم وما إلى ذلك. من بين جميع العناصر الموجودة في الصفحة استنادًا إلى هذه البذرة ، ثم عند رسم الرسم الثاني ، نحتاج فقط إلى تمرير هذه البذرة لإعادة إنتاج عناصر اللوحة غير المكتملة سابقًا.
ثم في هذا الوقت ، ستجد أن الرياضيات التي تأتي مع JS لا تعمل بشكل جيد ولا يمكنها تلبية الاحتياجات. دعنا نستمر في النظر إلى هذا الرمز:
نسخة الكود كما يلي:
Math.seed = 5 ؛ Math.SeedRandom = function (max ، min) {max = max || 1 ؛ min = min || 0 ؛ Math.seed = (Math.seed * 9301 + 49297) ٪ 233280 ؛ var rnd = math.seed / 233280.0 ؛ إرجاع min + rnd * (max - min) ؛ } ؛ لـ (var i = 0 ؛ i <10 ؛ i ++) {document.writeln (math.seedRandom ()+<br />) ؛ }
قم بتشغيل الكود أعلاه وستجد أنه إذا بقيت Math.seed البذرة دون تغيير ، فلن يتغير الرقم العشوائي الذي تم إنشاؤه. أوه ، إذا تم تقديم هذه الوظيفة ، فيمكن تحقيق إعادة إنتاج مشهد اللعبة. على الرغم من أن هناك حاجة إلى مزيد من التفاصيل ، يمكن ضمان الآلية. ينصب تركيز هذه المقالة على تنفيذ مثل هذه اللعبة.
تركيز هذه المقالة هو : (Math.seed * 9301 + 49297) ٪ 233280 ، لماذا هذه القيم الثلاث ، وليس الأخرى ، وما هي الأصول الغامضة التي لديها هذه الأرقام الثلاثة؟
يسمى مولد عدد العشوائي الزائف مثل Math.seedrandom مولد متطابق خطي (LCG ، مولد متطابق خطي). تستخدم جميع الراند تقريبًا من قبل مكتبة وقت التشغيل LCG ، وهو مثل:
i n+1 = ai n+c (mod m)
الحد الأقصى للفترة M من تسلسل رقم العشبية الزائفة المولدة يتراوح بين 0 و M-1. لتحقيق هذه الدورة القصوى ، من الضروري تلبية:
1.C و M حصريين بشكل متبادل
2.A - 1 يمكن تقسيمها على جميع العوامل الرئيسية لـ M.
3. إذا كان M مضاعفًا من 4 ، يجب أن يكون A - 1 أيضًا مضاعفًا 4
ويسمى الثلاثة أعلاه نظرية هال دوبيل. بصفتها مولدًا للأرقام العشوائية الزائفة ، من المحرج أن تتعثر إذا لم تكن الدورة كبيرة بما يكفي ، لذلك هذا أحد المتطلبات. لذلك ، فيما يلي: A = 9301 ، C = 49297 ، M = 233280. جميع العناصر الثلاثة المذكورة أعلاه راضية.
لخص
ما سبق هو مقدمة لكيفية تنفيذ وتعمل الأرقام العشوائية البذور في JS. آمل أن يكون من المفيد لمتعلمي JavaScript.