irpg Community
[GML]ฟังก์ชั่นการสุ่มค่า(ผู้เริ่มต้น) - Printable Version

+- irpg Community (https://irpg.in.th)
+-- Forum: irpg Fabella Game Maker Academia (https://irpg.in.th/forum-29.html)
+--- Forum: The Great Game Maker Library (https://irpg.in.th/forum-31.html)
+--- Thread: [GML]ฟังก์ชั่นการสุ่มค่า(ผู้เริ่มต้น) (/thread-1475.html)



[GML]ฟังก์ชั่นการสุ่มค่า(ผู้เริ่มต้น) - gol-a-khung - 10-18-2013

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");



RE: [GML]ฟังก์ชั่นการสุ่มค่า(ผู้เริ่มต้น) - santa555a - 10-18-2013

สุ่มคำยังไงหวาเเบบสุ่มการเกิดอ็อบเจ็คเปล่าหรือยังไง


RE: [GML]ฟังก์ชั่นการสุ่มค่า(ผู้เริ่มต้น) - gol-a-khung - 10-18-2013

ท่านต้องเข้าใจในการสร้างประโยคเงื่อนไขก่อนครับ เช่น เราอยากให้ศัตรูเกิดต่างที่กัน (สิ่งที่คิด) ตรงต่างที่กันจะให้ความหมายคือ การสุ่มค่า ในภาษาเกมส์มาร์คเกอร์(GML) ได้ให้ฟังก์ชั่นการสุ่มค่ามาเป็นค่าตายตัว คือ random() ซึ่งต้องนำไปใช้กับประโยคเงือนไขที่กำหนด ถึงจะได้ผลรับที่ลงตัว ดังตัวอย่างด่านบน
instance_create(random(150),random(200),obj_enemy)
ตามตัวอย่าง ถือว่าเป็นประโยคเงื่อนไข เป็นการสุ่มค่าการเกิดของศัตรู

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

ทิ้งคำถามไว้กับสิ่งที่ท่านไม่เข้าใจ ถ้าเห็นจะรีบหาคำตอบมาให้ครับ


RE: [GML]ฟังก์ชั่นการสุ่มค่า(ผู้เริ่มต้น) - santa555a - 10-19-2013

เปล่าผมงงตรง สุ่มคำหรือสุ่มศัตรู
เเต่ก็ok


RE: [GML]ฟังก์ชั่นการสุ่มค่า(ผู้เริ่มต้น) - gol-a-khung - 06-29-2015

อัพเดทคำสั่ง Choose ครับ


RE: [GML]ฟังก์ชั่นการสุ่มค่า(ผู้เริ่มต้น) - arkman - 06-30-2015

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


RE: [GML]ฟังก์ชั่นการสุ่มค่า(ผู้เริ่มต้น) - gol-a-khung - 06-30-2015

round(random(5)) หรือ irandom(5) ได้ค่าเหมือนกันครับ(สุ่ม 0 - 5) แล้วแต่จะเลือกใช้โค้ดครับ