電子輪盤抽獎遊戲之隨機顯示

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

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

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

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

甚麼!? 竟然就只有這麼短短的一行而已? 是的,你沒看錯。其中的

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

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

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

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

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

. .

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

獨夜:

看評論 (18)