[閒聊] 樂透系統

看板mud作者 (習慣,不容易)時間11年前 (2013/01/22 19:48), 編輯推噓4(408)
留言12則, 5人參與, 最新討論串1/2 (看更多)
最近心血來潮實做仿大樂透的系統 分享一下讓有興趣的人參考參考 使用 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

01/22 20:03, , 1F
騙錢!! 20萬兩gold玩完 have a shit
01/22 20:03, 1F

01/22 20:08, , 2F
推.另提一點個人看法,list_lottery其
01/22 20:08, 2F

01/22 20:16, , 3F
實可以不用做,不管是自選或電腦選
01/22 20:16, 3F

01/22 20:20, , 4F
自選玩家有留底,電選玩家不care選啥
01/22 20:20, 4F

01/22 20:29, , 5F
那是輪盤!!!
01/22 20:29, 5F

01/22 22:24, , 6F
如果你有 sort 的話,只要看相鄰的一
01/22 22:24, 6F

01/22 22:28, , 7F
不一樣就知道有沒有重複了
01/22 22:28, 7F

01/22 22:36, , 8F
那 1,2,3,4,5,1有相鄰嗎-.-
01/22 22:36, 8F

01/22 22:44, , 9F
你 sort 過就會變 1 1 2 3 4 5 啊
01/22 22:44, 9F

01/22 22:45, , 10F
號碼sort過再存,理論上會比較好處理
01/22 22:45, 10F

01/22 23:19, , 11F
有道理耶!!我沒想到
01/22 23:19, 11F

01/23 00:17, , 12F
老木沒gg
01/23 00:17, 12F
文章代碼(AID): #1G_do2PZ (mud)
討論串 (同標題文章)
文章代碼(AID): #1G_do2PZ (mud)