คำนำ
ในการพัฒนาส่วนหน้าโดยเฉพาะอย่างยิ่งการพัฒนาเกมมักใช้ตัวเลขสุ่มดังนั้นเราจะนึกถึง: Math.random ลองดูรหัสต่อไปนี้:
สำหรับ (var i = 0; i <10; i ++) {document.writeln (math.random ()+<br />); -การรันรหัสด้านบนจะสร้าง 10 หมายเลขที่แตกต่างกัน แน่นอนว่าคุณสามารถสร้างได้มากขึ้นซึ่งดูดีทีเดียว ถ้านั่นคือทั้งหมดก็ไม่จำเป็นต้องเขียนบทความนี้
ตัวอย่าง
ลองคิดดู หากเราสร้างเกมในสถานการณ์ที่แน่นอนและผู้ใช้ออกครึ่งทางผ่านการเล่นเพื่อให้ผู้ใช้สามารถเลือกที่จะดำเนินการต่อไปก่อนหน้านี้ในครั้งต่อไปที่เขาเข้ามาแล้วปัญหาคือตอนนี้: เราสามารถบันทึกข้อมูลคำอธิบายง่ายๆเช่นความคืบหน้าของผู้ใช้ ไม่จำเป็น
ดังนั้นหมายเลขเมล็ดสุ่มจึงปรากฏขึ้น หากเรามีค่าเมล็ดเมื่อองค์ประกอบถูกสุ่มบนผืนผ้าใบและตำแหน่งขนาด ฯลฯ ขององค์ประกอบทั้งหมดในหน้าจะถูกคำนวณตามเมล็ดนี้จากนั้นเมื่อวาดภาพที่สองเราจะต้องผ่านเมล็ดนี้เพื่อทำซ้ำองค์ประกอบของผืนผ้าใบที่ยังไม่เสร็จก่อนหน้านี้
จากนั้นในเวลานี้คุณจะพบว่า math.random ที่มาพร้อมกับ JS นั้นทำงานได้ไม่ดีและไม่สามารถตอบสนองความต้องการได้ มาดูรหัสนี้ต่อไป:
การคัดลอกรหัสมีดังนี้:
math.seed = 5; math.seedrandom = function (สูงสุด, min) {max = max || 1; min = min || 0; math.seed = (math.seed * 9301 + 49297) % 233280; var rnd = math.seed / 233280.0; return min + rnd * (สูงสุด - min); - สำหรับ (var i = 0; i <10; i ++) {document.writeln (math.seedrandom ()+<br />); -
เรียกใช้รหัสด้านบนและคุณจะพบว่าหากเมล็ดคณิตศาสตร์เมล็ดยังคงไม่เปลี่ยนแปลงหมายเลขสุ่มที่สร้างขึ้นจะไม่เปลี่ยนแปลง โอ้ถ้ามีการแนะนำฟังก์ชั่นนี้แล้วการทำซ้ำฉากเกมสามารถทำได้ แม้ว่าจะต้องมีรายละเอียดเพิ่มเติม แต่สามารถรับประกันกลไกได้ จุดเน้นของบทความนี้คือการไม่ใช้เกมดังกล่าว
จุดเน้นของบทความนี้คือ : (math.seed * 9301 + 49297) % 233280 ทำไมค่าทั้งสามนี้ไม่ใช่อื่น ๆ
เครื่องกำเนิดหมายเลขแท่นสุ่มหลอกเช่น Math.SeedRandom เรียกว่าเครื่องกำเนิดความสอดคล้องเชิงเส้น (LCG, เครื่องกำเนิดความสอดคล้องเชิงเส้น) RANDs เกือบทั้งหมดที่จัดทำโดย Runtime Library ใช้ LCG ซึ่งเป็นเหมือน:
ฉัน 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