作者EShensh (萧易玄)
看板MacDev
标题[心得] [Xojo] 乐透号码产生器
时间Fri Jun 14 23:07:22 2013
图文版:
http://xojo.tw/?q=node/9
http://i.imgur.com/ep7EtWi.jpg
(快速从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
2F:→ EShensh:啊哈哈,一贴图就看到错误 XD 06/14 23:10
3F:推 ian90911:推 06/16 16:27
4F:推 elver:推中间那段~(还在头痛每秒table reload 3次+search引擎在 06/17 12:36
5F:→ elver:在互相delay,ui等运算,等到运算完要reload时,又要运算了,导 06/17 12:41
6F:→ elver:致,user在textfield卡卡的,键盘lag,被嫌到臭头, T_T 06/17 12:43