電子輪盤抽獎遊戲之隨機顯示 來源September 2nd, 2010 / 獨夜






實驗版


這個東西的出現其實是因為一個店家的老闆請我做的,不過目前我還沒有把它交出去(被毆),因為我還沒有想好怎麼把版子洗出來...



在這個小小的東西裡,最重要的東西就是隨機選取燈號的部分,不過卻也是最簡單的,因為他只是幾條涵式再加上一點硬體的小配合而已。


我們先來看看隨機選取的這段小程式長甚麼樣子吧!









1


(rand() % 7) +1; //取餘數後+1,8個狀態選擇

甚麼!? 竟然就只有這麼短短的一行而已?


是的,你沒看錯。其中的 rand() 就是最重要的主角,但別以為這樣子就結束了!因為在C語言中的rand()涵式是要再搭配一個種子,也就是另一個會變換的數字來搭配,才能達到真正的隨機。









1


srand(s_num);  // 從s_num獲得種子數字給予 rand() 使用

其中的 srand() 即是讓 rand() 獲得種子的涵式,也是最重要的一個小涵式,少了它,你的rand就不會random了,而是永遠保持在同1個數值(這就不叫隨機了吧!)。


再來,因為是使用8051來實現的關係,因此我們不能像在電腦裡寫C時的方法一樣用系統時間的方式來獲得種子數字,這時候就需要硬體的搭配了!









1

2

3

4

5

6

7

8


srand_num(){

  int i;

  CV=0;

  delay(10); //電容放電

  CV=1; //電容開始充電

  do{i++;}while(!CV); // 累加 i 到充電完畢

  s_num=i; //將i值丟給 s_num

}

我是利用RC充放電的原理達到種子產生的效果,從上面可以看出,電容會在放電後執行充電的動作。


而每次充電的時間其實都有些許不同,做過相關實驗便知道RC充放電的函數圖形呈曲線狀態,然後利用這一特性,讓 i 在這段時間中累加,最後取得最終數值。


最後將這些小片段組合起來,再加上一些小設定便可以達到隨機顯示的效果了!


如何? 是不是很有趣呢? 我剛把這個雛形弄出來的時候也玩了很久,哈哈~:P


.


.


機率是不可確定的,你永遠只能知道它的數值但無法預知它出現的時機。





arrow
arrow
    全站熱搜
    創作者介紹
    創作者 w047 的頭像
    w047

    w047

    w047 發表在 痞客邦 留言(0) 人氣()