ข้อมูลบางค่าที่จะนำมาตัดสินเรื่องต่างๆ ในเกมส์ หลายครั้งที่หนีไม่พ้นการสุ่ม หรือ Random
และโลกนี้ไม่ยุติธรรมเสมอไป จึงจำเป็นต้องมีการใช้การสุ่มแบบถ่วงน้ำหนัก หรือ weighted random
โดยส่วนใหญ่ทาง Server จะต้องเป็นผู้ตัดสินเรื่องนี้ จึงแสดงตัวอย่างวิธีการสร้างการสุ่มประเภทนี้ด้วยภาษา PHP
เริ่มด้วยการสร้าง Weighted Array ของตัวแปลขึ้นมาก่อน โดยให้ key เป็นผล value เป็นน้ำหนัก$weight = array(
'a'=>1,
'b'=>3,
'c'=>5,
'd'=>7);
เนื่องจาก function ที่เราจะใช้สุ่มตัวเลขออกมาคือ rand ซึ่งจะให้ค่าเป็น int เท่านั้น หากมีค่าใดในน้ำหนักเป็นทศนิยม
ให้ทำการคุณทั้งหมดเพื่อเลื่อนทศนิยมทิ้งไปให้หมดก่อน ตัวอย่างเช่น ‘a’=>1.5, ‘b’=> 2 ให้คุณออกมาเป็น ‘a’=>15, ‘b’=>20 เสียก่อน
ต่อไปก็จะเป็นการสุ่มผลดังนี้$roll = rand(1,array_sum($weight);
จากนั้นทำการหาผลของการสุ่มโดยไล่วัดตาม arrayforeach($weight as $key=>$value){
if($roll > $value){
$roll = $roll - $value;
}else{
return $key;
}}
ซึ่งสามารถนำคำสั่งเหล่านี้ไปสร้างเป็น function ที่รับเพียง weight array ที่แตกต่างกันเพียงอย่างเดียวก็ได้
'a'=>1,
'b'=>3,
'c'=>5,
'd'=>7);
if($roll > $value){
$roll = $roll - $value;
}else{
return $key;
}}
ไม่มีความคิดเห็น:
แสดงความคิดเห็น