จะสร้างระดับสุ่มจากเมล็ดได้อย่างไร [ปิด]


46

ฉันจะใช้เมล็ดพันธุ์แบบสุ่มเพื่อสร้างระดับเกมได้อย่างไร เมล็ดเดียวกันควรสร้างระดับเดียวกันแน่นอนเสมอ

สำหรับตัวอย่างนี้มันจะเป็นระดับสไตล์Worms ดังนั้นแต่ละระดับจะมีธีม (ทุ่งหญ้าหิมะ ฯลฯ ) ภูมิประเทศพื้นฐานวัตถุต่าง ๆ เช่นต้นไม้

ดังนั้นฉันจะเริ่มสร้างตัวสร้างระดับนี้ได้ที่ไหน สิ่งที่จะมีส่วนร่วม? แนวคิดนี้ใช้อะไร?

คะแนนโบนัสสำหรับการเชื่อมโยงใด ๆ ที่ดีใด ๆ ( โบนัสคะแนนโบนัสสำหรับสิ่งที่เกี่ยวข้องกับวิธีการที่จะได้ทำในเวิร์มหรือคล้ายกัน)

ขอบคุณ


การสร้างระดับสุ่มเรียกอีกอย่างว่าการสร้างเนื้อหากระบวนงาน (PCG) และนี่คือวิกิจัดการกับสิ่งนั้น pcg.wikidot.comควรให้บางความคิด! : o)
Kaj

1
Chris Crawford มีบทความที่คุณน่าสนใจ มันถูกเขียนขึ้นในช่วงต้นยุค 90 แต่ก็ยังมีความเกี่ยวข้อง จะสร้างโลกได้อย่างไร
Anthony

หากคุณใช้รูปแบบหรืออัลกอริทึมใด ๆ ที่ใช้ตัวสร้างตัวเลขสุ่มแบบเดียวกัน (ยกเว้นรูปแบบใดก็ตามที่แอบในรูปแบบไม่แปรเปลี่ยนเช่นเวลาของระบบ) เมล็ดพันธุ์เดียวกันจะสร้างในระดับเดียวกัน
Kaj

1
ใช่ แต่ฉันคิดว่าเคล็ดลับคือการใช้เมล็ดพันธุ์ในสถานที่แรกเพื่อสร้างระดับ ฉันเคยสร้างเครื่องกำเนิดระดับแบบสุ่มมาก่อน แต่พวกเขาไม่ได้ใช้เมล็ดเดียว บ่อยครั้งที่ฉันจะเลือกคะแนนแบบสุ่มจากนั้นแต่ละจุดจะเลือกสินทรัพย์แบบสุ่มเพื่อวางไว้ที่นั่น ด้วยวิธีนี้ไม่มีเมล็ดพันธุ์แท้ที่จะสร้างระดับเดียวกันเสมอเนื่องจากมีสิ่งต่าง ๆ มากมายที่สร้างตัวเลขสุ่มของตัวเอง
Adam Harte

10
คุณแน่ใจหรือไม่ว่า "เมล็ดพันธุ์" หมายถึงอะไร นี่คือ "เวกเตอร์เริ่มต้น" srand(int)ผ่านทางเช่น การเรียกที่rand()ตามมาจะส่งคืนค่าลำดับที่คำนวณเสมอในลำดับเดียวกันโดยยึดตามเมล็ดพันธุ์นี้ คุณตั้งค่าเมล็ดพันธุ์หนึ่งครั้งในโปรแกรมของคุณ หลังจากนั้นหากอัลกอริทึมขึ้นอยู่กับผลลัพธ์จากrandคุณจะได้รับผลลัพธ์เดียวกันทุกครั้ง
Heath Hunnicutt

คำตอบ:


7

กุญแจสำคัญในการนี้คือการใช้เครื่องกำเนิดตัวเลขแบบสุ่มหลอกของคุณเองที่คุณเริ่มต้นด้วยค่าเมล็ดที่รู้จักกัน "การ Mersenne Twister" เป็นขั้นตอนวิธีที่นิยมและนี่คือรายการวิกิพีเดียและบางแหล่งตัวอย่าง นี่และขั้นตอนอื่น ๆ ของ PRNG อัลกอริธึมผลิตชุดของตัวเลขที่คงที่ (ยาวมาก) ซึ่งค่าเมล็ดเป็นจุดเริ่มต้น

ตราบใดที่คุณทำตามขั้นตอนเดียวกันในการสร้างโลกของคุณทุกครั้งคุณค่าแต่ละอย่างจะเป็นตัวแทนของโลกที่มีการทำซ้ำ


4

นี่คือ PRNG (ตัวสร้างตัวเลขสุ่มหลอก) ที่นำมาใช้ใน ActionScript (มีให้ใน AS2 หรือ AS3) มันเบาและรวดเร็วเหมาะสำหรับเกม: http://lab.polygonal.de/2007/04/21/a-good-pseudo-random-number-generator-prng/

การดำเนินการดังกล่าวข้างต้นจะขึ้นอยู่กับปาร์คมิลเลอร์ Carta PRNG ไซต์นี้จะให้ข้อมูลเชิงลึกเพิ่มเติมเกี่ยวกับคณิตศาสตร์แก่คุณ

เพื่อสร้างระดับเหมือนเวิร์มฉันอาจใช้ฟังก์ชันPerlin-Noise หากคุณสร้างภาพสัญญาณรบกวนที่มีความสูง 1px และความกว้างของโลกเกมของคุณคุณจะได้รับแผนที่ความสูงพร้อมใช้งานโดยทั่วไป ฟังก์ชั่นเสียงรบกวน Perlin ยังสร้างแผนที่เดียวกันกับเมล็ดเดียวกันเสมอ

จากนั้นคุณสามารถใช้ PRNG ที่กล่าวถึงข้างต้นเพื่อกำหนดตำแหน่งที่จะวางวัตถุสุ่มบนแผนที่หรือตำแหน่งที่จะสร้างหลุมในพื้นดิน สำหรับหลุมคุณสามารถใช้ประโยชน์จากเสียง perlin อีกครั้ง เพียงสร้างภาพที่มีสัญญาณรบกวนพร้อมขนาดของแผนที่ (x, y) จากนั้นสร้างหลุมในแผนที่ของคุณโดยที่ค่าพิกเซลต่ำกว่าขีด จำกัด ที่กำหนด (เช่น 0.2)


ฉันใช้เสียงเพอร์ลิน แต่แตกต่างกันเล็กน้อยใช้มันเพื่อสร้างแผนที่ความสูง 3 มิติวางแผนที่บนทางลาดและลบพิกเซลทั้งหมดที่ต่ำกว่าขีด จำกัด ของคุณ (ถ้า pixel.height - (pixel.distance ไปยังด้านล่าง * slopeFactor) <treshold) pixel = transparent)
Niels

2

ในทางทฤษฎีถ้าคุณสามารถใช้ตัวสร้างตัวเลขสุ่มหลอก (เช่น Perlin-Noise หรือ Marsenne Twister) เพื่อแชร์แผนที่ผ่าน

หมายเลขเมล็ดพันธุ์จากนั้นคุณยังสามารถสร้างแผนที่ที่กำหนดเองและลดจำนวนลงเป็นเมล็ดแก้ปัญหาที่ไม่สามารถสร้างได้

แผนที่ที่กำหนดเองเมื่อใช้ PRNG อย่างไรก็ตามเรื่องนี้ถูกสร้างขึ้นบนสมมติฐานสองสามข้อ คือเครื่องกำเนิดไฟฟ้าแบบสุ่มหลอก

กระบวนการที่สามารถย้อนกลับได้และข้อมูลใด ๆ ที่ป้อนกลับไปยัง PRNG จะผลิตเมล็ดพันธุ์ที่ถูกต้องโดยไม่ต้องเพาะเมล็ดเลย!

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.