作者kyoe (習慣,不容易)
看板mud
標題[閒聊] 樂透系統
時間Tue Jan 22 19:48:14 2013
最近心血來潮實做仿大樂透的系統
分享一下讓有興趣的人參考參考
使用 mapping system_dbase 作為存放各期開獎號碼、銷售資料、彩金資料等等
mapping player_dbase 作為存放玩家購買的彩卷號碼
實作心得:
首先想好一個樂透系統該讓玩家有什麼動作和順序才能完成整個流程
投注商店 -> 購買號碼(自選|電選) -> 查看號碼清單 -> 開獎程序 -> 統計結果 -> 自動兌獎
buy_lottery list_lottery lotteryd check_lottery
1. 投注商店:
set("lottery_shop", 1);
相關指令都指向 lotteryd
2. 購買號碼(自選|電選) buy_lottery
自選: a. 限制購買6個號碼及只能選擇 1-49 號
b. 檢查購買的號碼中是否有重覆號碼
c. 購買後自小到大重排順序(可有可無)
a:
if(sscanf(arg,"%s,%s,%s,%s,%s,%s", n1, n2, n3, n4, n5, n6) == 6)
b:
for(i = 0; i < sizeof(my_number); i++) {
nf = 0;
foreach(string mn in my_number) if(mn == my_number[i]) nf++;
if(nf > 1) return notify_fail("第"+chinese_number(i+1)+"個號碼與後方號碼重覆,只能選擇不重覆 1 - 49 號的數字。\n");
}
c:
my_number = sort_array(my_number, (: sort_number :));
電選:
for(i = 0; i < 張數; i++) {
if(!arrayp(take_number = take_nodouble_number())) {
return notify_fail("購買彩票出現錯誤,請使用 sos post 回報。\n");
break;
lottery_data[round_size]["player_dbase"][myid] += ({ take_number });
tell_object(me, HIC"彩票系統自動產生第"+chinese_number(i+1)+"組號碼:"+implode(take_number, ",")+"\n"NOR);
}
take_nodouble_number() 是一個可以傳回random不重覆號碼array的function
不論自選或電選,應該都先在前方設定一個 check_user_data() 的 function 用於
新增/檢查 user 的 lottery data array or mapping 以免產生問題
3. 查看號碼清單 太簡單,跳過
4. 開獎程序:
也很簡單,大約是做個 1-49 個號碼的 array,在選出號碼時去掉 array 內的號碼就可以
5. 統計結果:
首先做一隻 check_number 的 function
大約是
//7 頭獎 6全
if(array_eqv(numbers, result)) return 7;
//6 貳獎 5+1特別
//5 參獎 5
//4 肆獎 4+1
//3 伍獎 4
//2 陸獎 3+1
//1 普獎 3
foreach(string num in numbers) {
if(member_array(num, result) != -1) flag++;
}
switch(flag) {
case 5:
if(member_array(spe_number, numbers) != -1) return 6;
else return 5;
break;
case 4:
if(member_array(spe_number, numbers) != -1) return 4;
else return 3;
break;
case 3:
if(member_array(spe_number, numbers) != -1) return 2;
else return 1;
break;
}
return flag;
看回傳的數字來判斷是否中獎和什麼獎項
之後再將預計發出去的獎金和中獎人數記錄寫進該期的 system_dbase 去
6. 自動兌獎 同上,很簡單
本來以為會很龐大繁瑣和複雜,沒想到寫完其實很簡單
但在獎金分配的時候有卡住一陣子,對數學真的不在行><
實做後自己玩,終於明白大樂透的中獎機會真的是很低!!!!!
--
還記得遙遠過往被
深藏的回憶嗎?
如果您已
經忘了被現實和繁忙淹沒的
曾經
那麼就讓我們幫助您找回那
份屬於青澀年代的純真吧
用文字幻化出華麗與夢想的彼岸
金庸修真錄 telnet://jy.mud.com.tw:6666
盼能帶領您找回似曾相識的記憶深處中最美麗的夢幻
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 1.163.12.224
推 QQmother :騙錢!! 20萬兩gold玩完 have a shit 123.192.148.71 01/22 20:03
→ laechan :推.另提一點個人看法,list_lottery其 1.165.164.2 01/22 20:08
→ laechan :實可以不用做,不管是自選或電腦選 1.165.164.2 01/22 20:16
→ laechan :自選玩家有留底,電選玩家不care選啥 1.165.164.2 01/22 20:20
→ kyoe :那是輪盤!!! 1.163.12.224 01/22 20:29
→ stimim :如果你有 sort 的話,只要看相鄰的一 36.226.38.248 01/22 22:24
推 stimim :不一樣就知道有沒有重複了 36.226.38.248 01/22 22:28
→ kyoe :那 1,2,3,4,5,1有相鄰嗎-.- 111.240.22.89 01/22 22:36
推 stimim :你 sort 過就會變 1 1 2 3 4 5 啊 36.226.38.248 01/22 22:44
→ laechan :號碼sort過再存,理論上會比較好處理 1.165.164.2 01/22 22:45
→ kyoe :有道理耶!!我沒想到 111.240.22.89 01/22 23:19
推 darkmoon1725:老木沒gg 118.160.187.73 01/23 00:17