
[心得] [Xojo] 樂透號碼產生器

(快速從MU空間下載: http://www.multiupload.nl/4G2MZCHT4E )
這是另一個使用 Thread (執行緒) 運算,與配合 Timer (定時器) 更新的範例。
這個程式可以產生樂透的號碼,並且進行多次開獎模擬以取得客觀機率。
你甚至可以要求只要多少機率以上的。
我以每組數字模擬10萬次開獎(模擬越多次會愈接近真正的機率),要求 3% 以上,
結果目前已經產生超過 2221 組號碼,還沒有一組能達到…
這個原始碼有稍微把架構寫出來,如果你會改寫,可以加入各式彩券玩法的產生。
一樣可以支援機率模擬。
除了原始碼外,我也提供編譯好的版本,歡迎從MU空間下載。
http://www.multiupload.nl/4G2MZCHT4E
Xojo 可以產生跨平台的程式,所以這個壓縮包,
包括了 Mac、Windows、Linux 的執行檔。
Windows 版抓圖
http://i.imgur.com/abd47Xd.jpg

Linux 版抓圖
http://i.imgur.com/4dUgLLF.jpg

寫點技術性的東西...
之前有提過,由程式語言本身來幫你在執行緒的多工中,
插空處理介面的控制項是很方便沒錯。
但是控制項的反應絕對比電腦的運算慢(即使從肉眼是看不出來的),
所以在進行足夠大量的運算時,就有可能發生兩種情況:
1.UI 跟不上多工,多工中的程式碼卻從 UI 中取值,結果取到舊的值。
2. 多工為了穩定,配合 UI 更新,結果拖累效能。
不管哪一種,在大量運算時,都不是我們想看到的。
所以最好的辦法是運算歸運算,介面歸介面。
由 Timer 定時器,以程式來控制介面的更新。
執行緒只跟全域變數互動,執行的進度及結果都存在變數中,定時會更新到介面。
人車分道(?)的寫法確實能兼顧效率及穩定。
每組 10 萬次的模擬開獎至今已經做完 2590 組,一點問題都沒有。
如果是以舊寫法在舊版 REALbasic 跑,跑到一定的數量是很容易出錯的。
然後提一下增加彩券玩法的方式。
首先,在 PopupMenu1 的 Open 事件中,加入新玩法。
//彩券種類
me.AddRow("大樂透")
me.AddRow("威力彩")
從 Lottery_1 或 Lottery_2, 複製一個執行緒,依序取名 Lottery_?。
Counting_Method 模組中的方法,也要複製一份Lottery_?_Get 與 Lottery_?_Check。
參考原本的 Lottery_1、2 的 Get 與 Check,改寫產生條件,與檢查方式。
一個很好的練習是依照 Lottery_1 ,改寫成「今彩539」,因為產生的方式差不多。
然後,在「開始計算」按鈕的 Action 事件中,
依據你選擇的不同而載入不同的執行緒來運算,就照樣增加。
//視選擇的彩券不同,載入不同的功能執行緒。
If PopupMenu1.ListIndex=0 Then
Dim t As new Lottery_1
t.run
ElseIf PopupMenu1.ListIndex=1 Then
Dim t As new Lottery_2
t.run
End If
祝.好運~
--
怒火燒盡九重天 去去去,武器走 迪歐加.古拉比冬 狠虎滅卻.震天動地 iLife
慈悲的王者 安哥爾摩亞 明聖劍法 iWork MAC_OS_X 禁千百貳拾式.八薙女
裏百八式.大蛇薙 iPod LanEVO 日月才子 藤原豆腐店 帝國歌劇團 鋼普拉
破邪劍征.櫻花放神 巴歐~薩喀爾嘎 共鳴 速速來,愛情 AE86 最終決戰奧義.無式
-蕭易玄- http://web.mac.com/eshen/iWeb
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 125.230.130.207
→
06/14 23:09, , 1F
06/14 23:09, 1F

→
06/14 23:10, , 2F
06/14 23:10, 2F
推
06/16 16:27, , 3F
06/16 16:27, 3F
推
06/17 12:36, , 4F
06/17 12:36, 4F
→
06/17 12:41, , 5F
06/17 12:41, 5F
→
06/17 12:43, , 6F
06/17 12:43, 6F
MacDev 近期熱門文章
PTT數位生活區 即時熱門文章