Tuesday, August 7, 2012

PHP : สนุกกับการใช้ฟังก์ชัน srand()


     

    สวัสดียามเย็นย่ำค่ำ (ขณะเขียน) วันนี้ผมมีฟังก์ชันสนุกๆของ php มานำเสนอให้ทุกๆคนได้ลองเล่นลองทำตามกันนะครับ ก่อนอื่นก็ดาวโหลดไฟล์งานไปก่อนเลย

Download เป็นไฟล์นามสกุล .tar นะครับ ลองใช้วิธีในการคลายไฟล์อย่างที่เคยสอนไว้แล้วที่

การใช้งานคำสั่ง Unix/Linux เบื้องต้น

อิอิ (หากินกันง่ายๆแบบนี้เลย ฮ่าๆๆ)


   ครับสำหรับฟังก์ชันที่จะสอนวันนี้คือ ฟังก์ชัน srand() นั่นเองสำหรับฟังก์ชันนี้คร่าวๆนะครับ เป็นฟังก์ชันสำหรับสร้างตัวเลขสุ่มขึ้นมา ซึ่งการทำงานต้องใช้ร่วมกันกับฟังก์ชัน rand() และ getrandmax() ด้วย มีรูปแบบการเขียนดังนี้ครับ

       void srand(int seed)        โดยที่ seed คือเลขจำนวนเต็มสูงสุดที่จะใช้ในการสุ่มค่านะครับ

ตัวอย่างการใช้งานคำสั่ง

<?
srand((double)microtime()*1000000);
$seed = rand(1000000,9999999);
echo $seed ."<br>";
srand((double)microtime()*$seed);
echo rand(1,100);
?>





จะได้ผลลัพท์ออกมาดังภาพ


   ซึ่งผลลัพท์ที่ได้คือตัวเลขจากการสุ่ม โดยค่าจากตัวเลขชุดแรกจะได้ค่าที่อยู่ในช่วง 1000000 - 9000000 นั่นคือได้มาจากการจำกัดค่าจากฟังก์ชั่น

       rand(1000000,9999999); 

ตัวเลขชุดถัดมานั้น เราได้นำค่าจากตัวเลขชุดแรกมาใช้งานในฟังก์ชัน srand() ต่อและจะมีค่าอยู่ในช่วง 1 - 100 ซึ่งถูกจำกัดค่าจากฟังก์ชัน

       rand(1,100); 

   ซึ่งค่าทั้งหมดที่ได้มานั้นเมื่อเราลองรีเฟรชหน้าจอใหม่ก็จะได้ค่าใหม่ขึ้นมานะครับ เอาละครับเมื่อทราบการใช้งานคร่าวๆแล้ว เราลองมาทำอะไรเล่นๆกันดีกว่านะครับ สำหรับวันนี้เราจะมาลองใช้ฟังก์ชัน srand() ในการมาทำเกมทายผลลูกเต๋ากัน

  ขั้นแรกเราก็ใช้โปรแกรมอะไรก็ได้มาใช้สำหรับเขียนโค้ดโปรแกม ถ้าท่านใช้ระบบปฏิบัติการ Windows ก็ใช้แค่โปรแกรมเล็กๆอย่าง Notepad ก็ได้ สำหรับผู้ที่ใช้ระบบปฏิบัติการ Ubuntu แบบผมใช้เพียง Gedit เจ้าเก่าก็ได้แล้วหล่ะครับ เมื่อเปิดโปรแกรมมาเราก็พิมพ์ตามนี้เลย (ต้องบอกก่อนว่าในไฟล์นั้นผมจัดไว้สวยมาก แต่พอมาทำบนเว็บแล้วมันเอ๋อๆนิดนึงต้องขออภัยมา ณ ที่นี้ด้วย)

   บันทึกในชื่อ dice.html

<html>
<head>
     <tltle>เซียนเต๋า เขย่าโชค</title>
</head>
<body onLoad=frm.dice1.focus()>
     <H1 align=center style='color:blue'></H1>
     <form name=frm method=get action=ran_dice.php>
         <table width=50% align=center border=1>
             <tr>
                 <th style='color:yellow;background-color:green'>ลองทายหมายเลขดูซิ (1-6)</th>
                 <th rowspan=3><img width=40 src=6.jpg>   <img width=40 src=6.jpg></th>
             </tr>
             <tr>
                 <th>
                 <input type=text name=dice1 size=3 Maxlength=1>
                 <input type=text name=dice2 size=3 Maxlength=1>
                 </th>
             </tr>
             <tr>
                 <th>
                 <input type=submit value="ทาย">
                 <input type=reset value="ยกเลิก">
                 </th>
            </tr>
        </table>
     </form>
</body>
</html>

 
   บันทึกในชื่อ ran_dice.php


<?
$cnt = $_REQUEST["cnt"];
$dice1 = $_REQUEST["dice1"];
$dice2 = $_REQUEST["dice2"];
           if($dice1 == "" or $dice2 == "")HEADER("location.ran_dice.php?cnt=0&dice1=0&dice2=0");
           srand((double)microtime()*1000000);
           for($i=0;$i<2;$i++){
               $t[$i] = rand(1,6);
           }
          $dice3 = $dice1 + $dice2;
          $test = $t[0]+$t[1];
?>
<body onLoad=frm.dice1.focus()>
   <H1 align=center style='color:blue'>ทายลูกเต๋า</H1>
<?$cnt+=1;?>
       <form name=frm method=get action=ran_dice.php>
       <?echo "<input type=hidden value=$cnt name=cnt>";?>
            <table width=55% align=center border=1>
                <tr>
                    <th style='color:yellow;background-color:green'>หมายเลขที่ทายคือ</th>
                    <td rowspan=4 valign=top><b>คุณทายมาแล้ว  <?echo "$cnt";?>  ครั้ง</b><br>
                    หมายเลขที่ทายคือ  <b><?echo "$dice1";?></b> และ  <b><?echo "$dice2";?></b>  แต้มรวมคือ  <b><?echo "$dice3";?></b><br>
                    หมายเลขที่ออกคือ  <img width=40 src="<?echo "$t[0]";?>.jpg">  และ  <img width=40 src="<?echo "$t[1]";?>.jpg">  แต้มรวมคือ  <b style='font-size:20pt;'><?echo "$test";?></b><br>
<?
if(($dice1 == $t[0] or $dice1 == $t[1]) and ($dice2 == $t[0] or $dice2 == $t[1]) and $dice3 == $test){
echo "<b style='color:red'>ยินดีด้วย คุณทายถูกทั้งหมด ยอดเยี่ยมไปเลย</b>";
}else if(($dice1 != $t[0] or $dice1 != $t[1]) and ($dice2 != $t[0] or $dice2 != $t[1]) and $dice3 == $test){
echo "<b style='color:orange'>ทายถูกแค่ผลรวมเท่านั้น แต่ก็ถือว่าเยี่ยม</b>";
}else{
echo "<b>คุณทายไม่ถูก ลองใหม่อีกทีสิ เด็กโง่!!!</b>";
}
?>
                    </td>
                 </tr><?echo "\n";?>
                 <tr>
                    <th>
                    <input type=text name=dice1 size=3 Maxlength=1>
                    <input type=text name=dice2 size=3 Maxlength=1>
                    </th>
                 </tr>
                 <tr>
                    <th>
                    <input type=submit value="ทาย">
                    <input type=reset value="ยกเลิก">
                    </th>
                </tr>
           </table>

     </form>
</body>

 
   สำหรับรูปภาพก็ไว้ในที่เดียวกับกับไฟล์ทั้งสองเลยนะครับ สำหรับผมก็เก็บไว้แบบนี้



   จากนั้นเราก็ลองมาเล่นกันดีกว่า เปิด Web browser ของคุณแล้วก็พิมพ์ที่อยู่ของไฟล์ dice.html จากนั้นก็มาสนุกกับเกมนี้กันเลย โดยคุณลองพิมพ์ตัวเลข 2 จำนวนลงในช่อง แล้วกดปุ่ม ทาย ลองเล่นดูนะครับ



อธิบาย : 

   สำหรับคำอธิบายเนื้อหาก็ไม่มีอะไรมาก เราแค่ใช้ฟังก์ชัน srand() ในการสุ่มตัวเลข 1 - 6 มาสองชุด ใช้สำหรับไว้ทายผล และเก็บไว้เข้าถึงรูปภาพหน้าลูกเต๋าของเรา

srand((double)microtime()*1000000);
           for($i=0;$i<2;$i++){
               $t[$i] = rand(1,6); 
           }

 โดยนำมาเก็บในตัวแปร $t[0] และ $t[1] นั่นเอง

 จากนั้นเราก็ทำการบวกกันเพื่อให้ได้ผลลัพท์ค่าหนึ่ง นำมาเก็บไว้สำหรับมาทายกัน 

          $dice3 = $dice1 + $dice2;
          $test = $t[0]+$t[1];


$dice3 ได้มาจากผลรวมของค่าที่เราทาย ส่วน $test นั้นได้มาจากค่าผลรวมของระบบที่สุ่มมาได้

โดยตัวเลขที่สุ่มได้นั้นนอกจากจะนำมาทายแล้วยังต้องนำไปทำเป็นตัวเลขที่ใช้สำหรับแสดงผลรูปภาพด้วยก็ไม่ยากอะไร เพราะเราตั้งชื่อภาพเป็นตัวเลขเรียงกัน 1 - 6 อยู่แล้วดังนั้นเมื่อ srand() สุ่มเลขอะไรมาเราก็นำเอาเลขชุดนั้นไปทำเป็นคีย์ชื่อภาพในการแสดงภาพตามตัวเลขนั้นๆ

หมายเลขที่ออกคือ  <img width=40 src="<?echo "$t[0]";?>.jpg">  
และ  <img width=40 src="<?echo "$t[1]";?>.jpg">


และการแสดงผลของเรานั้นจะมีผลลัพท์ออกมาสามแบบ ดังภาพ




สุดยอดไหมหล่ะ แค่ครั้งแรกนะเนี่ย ยอดเยี่ยมเป็นบ้าเลย




อืม พอใช้ได้ ฮ่าๆๆๆ




โห...โดยระบบด่าว่าเด็กโง่ มีเคืองนะเนี่ย


   ครับสำหรับวันนี้ก็มีแค่นี้หล่ะครับ ลองนำไปทำเล่นๆดูสนุกๆนะครับ ใครมีผลงานแจ่มๆจาการใช้ srand() ก็เอามาอวดบ้างนะครับ อ่ออีกอย่างอย่ากดรีเฟรช (F5) นะครับขอเตือนไว้ก่อนเดี๋ยวไม่สนุก อิอิ

Credit : ฐิติมา มโนหมั่นศรัทธา,โคตรเซียน PHP,โอเอวัน:กรุงเทพ,790 หน้า

No comments:

Post a Comment