irpg Community

Full Version: [GML]ฟังก์ชั่นการสุ่มค่า(ผู้เริ่มต้น)
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
GML Functions: Random Functions
ภาษาเกมส์มาร์คเกอร์ : ฟังก์ชั่นการสุ่มค่า

บทความนี้จะมาเรียนรู้การสุ่มค่าตัวเลขที่นำไปใช้บ่อย
random(x) คือ ฟังก์ชั่นนี้จะทำการสุ่มค่าระหว่าง 0 ถึง x (มีเลขทศนิยม)
x คือ ค่าที่กำหนดสูงสุด
เช่น random(5) หมายความว่า จะสุ่มค่าระหว่าง 0 ถึง 5 ค่าที่ได้จะประมาณนี้ 0.35, 1.25, 3.56, 4.00, 4.99, 5.00

random_range(x1,x2) คือ ฟังก์ชั่นนี้จะทำการสุ่มค่าระหว่าง x1 ถึง x2 (มีเลขทศนิยม)
x1 คือ ค่ากำหนดเริ่มต้น
x2 คือ ค่ากำหนดสิ้นสุด
เช่น random_range(2,5) หมายความว่า จะสุ่มค่าระหว่าง 2 ถึง 5 ค่าที่ได้จะประมาณนี้ 2.25, 3.19, 4.49, 5.00

การกำหนดให้สุ่มค่าเป็นเลขจำนวนเต็ม(ไม่มีทศนิยม) โดยใช้ [ i ] เพิ่มไปหน้าฟังก์ชั่นดังนี้
irandom(x)
irandom_range(x1,x2)


ตัวอย่างการเขียนคำสั่ง
instance_create(random(150),random(200),obj_enemy)
หมายความว่า สร้างศัตรูที่ตำแหน่ง x ระหว่าง 0 ถึง 150, ที่ตำแหน่ง y ระหว่าง 0 ถึง 200

ขอบคุณที่เข้ามาชมครับ ผิดพลาดประการใดช่วยบอกด้วยนะครับจะได้รีบแก้ไข

======================================================
update 001
คำสั่ง Choose คือคำสั่งที่ใช้สุ่มค่าโดยการกำหนดค่าแบบตายตัว อาร์กิวเมนต์ที่ใช้ในการแทนค่าจะได้ 16 ตัวเท่านั้น
Code:
choose(val0, val1, val2... val15);

ตัวอย่างเช่น :
การสุ่มตัวเลข
Code:
hp = choose(5, 8, 15, 32, 40);
อธิบายโค้ด : ต้องการ hp มีการสุ่มค่าดังนี้ 5, 8, 15, 32, 40

การสุ่มอักษรหรือคำ
Code:
name = choose("John", "Steven", "Graham", "Jack", "Emily", "Tina", "Jill", "Helen");
อธิบายโค้ด : ต้องการ name มีการสุ่มค่าดังนี้ John, Steven, Graham, Jack, Emily, Tina

การสุ่มภาพ
Code:
sprite_index = choose(spr_Cactus, spr_Flower, spr_Tree, spr_Shrub);
อธิบายโค้ด : ต้องการแสดงภาพ (sprite) โดยมีการสุ่มดังนี้ กระบองเพชร, ดอกไม้, ต้นไม้

อ้างอิง : GML
=====================================================
Example:
Code:
a = random(12.4);
b = random_range(23, 192);
c = irandom(32);
d = irandom_range(43, 993);
e = choose("one", "two", "three", "four", "five");
สุ่มคำยังไงหวาเเบบสุ่มการเกิดอ็อบเจ็คเปล่าหรือยังไง
ท่านต้องเข้าใจในการสร้างประโยคเงื่อนไขก่อนครับ เช่น เราอยากให้ศัตรูเกิดต่างที่กัน (สิ่งที่คิด) ตรงต่างที่กันจะให้ความหมายคือ การสุ่มค่า ในภาษาเกมส์มาร์คเกอร์(GML) ได้ให้ฟังก์ชั่นการสุ่มค่ามาเป็นค่าตายตัว คือ random() ซึ่งต้องนำไปใช้กับประโยคเงือนไขที่กำหนด ถึงจะได้ผลรับที่ลงตัว ดังตัวอย่างด่านบน
instance_create(random(150),random(200),obj_enemy)
ตามตัวอย่าง ถือว่าเป็นประโยคเงื่อนไข เป็นการสุ่มค่าการเกิดของศัตรู

ฟังก์ชั่นการสุ่มค่า ยังสามารถนำไปประยุคได้หลากหลาย เช่น
การสุ่มค่าหาตัวเลขที่ต้องการ
การสุ่มค่าเพื่อดรอปของ
การสุ่มค่าเพื่อให้เกิดศัตรู
การสุ่มค่าเพื่อให้เกิดตัวเลขที่แตกต่าง
การสุ่มค่าเข้าแผนที่
ฯลฯ อีกมากมายเลยครับ

ทิ้งคำถามไว้กับสิ่งที่ท่านไม่เข้าใจ ถ้าเห็นจะรีบหาคำตอบมาให้ครับ
เปล่าผมงงตรง สุ่มคำหรือสุ่มศัตรู
เเต่ก็ok
อัพเดทคำสั่ง Choose ครับ
ขอเสริมอีกนิดนะครับ
การใช้ random จะทำให้สุ่มค่าเป็นทศนิย แต่ถ้าไม่ต้องการให้เป็นแบบนั้น ก็ให้ใส่ round แทรกลงไป เช่น
(round(random(5))) จะเป็นการสุ่มค่าตั้งแต่ 0-5 โดยไม่ติดทศนิยมครับ
เป็นอีกวิธีหนึ่งที่ใช้ได้ผลครับ เพราะผมใช้ทำเกมบางเกมที่มีการสุ่มเลือกเหตุการณ์ด้วย
round(random(5)) หรือ irandom(5) ได้ค่าเหมือนกันครับ(สุ่ม 0 - 5) แล้วแต่จะเลือกใช้โค้ดครับ