Re: [閒聊] 樂透系統
聊點相關的。
假設 n 個玩家,第一個玩家簽 m1 組,第二個玩家簽 m2 組,
.....,第 n 個玩家簽 mn 組。
mapping player_dbase=([
"玩家1":({ ({所簽號碼組1}),({所簽號碼組2}),... }),
"玩家2":({ ({所簽號碼組1}),({所簽號碼組2}),... }),
.
.
"玩家n":({ ({所簽號碼組1}),({所簽號碼組2}),... }),
]);
而開出的獎號組假設為 numbers=({1,2,3,4,5,6,1});
宣告一個 mapping award_dbase=([]);
而得獎的基本條件是前 6 個號碼至少中 2 個,後面中 1 個
,或前 6 個號碼至少中 3 個。
players=keys(player_dbase);
foreach(player in players)
{
award_dbase[player]=({});
tmps=player_dbase[player];
n1=0;
n2=0;
foreach(sub_tmps in tmps)
{
for(i=0;i<6;i++)
if(member_array(numbers[i],sub_tmps)!=-1)
n1++;
if(numbers[6]==sub_tmps[6])
n2=1;
// n1: 所簽的某一組號碼, 第一組區六個號碼中幾個
// n2: 所簽的某一組號碼, 第二組區的號碼有沒有中
// 當玩家所簽的這組完全摃龜 continue;
if(n1<2 || (n1<3 && n2!=1))
continue;
// 儲存玩家該組的 n1 n2
award_dbase[player]+=({ ({n1,n2}) });
}
}
「因為摃龜多」,所以大部份在 if(n1<2 || (n1<3 && n2!=1))
這裡就會 continue (abort) 掉。
上面跑完就會得到 award_dbase 資料庫。
players=keys(award_dbase);
foreach(player in players)
{
tmps=award_dbase[player];
foreach(sub_tmps in tmps)
{
n1=sub_tmps[0];
n2=sub_tmps[1];
switch(n1)
{
case 6:
if(n2==1)
{
得頭獎;
頭獎人數+1;
}
else
{
得X獎;
X獎人數+1;
}
break;
.
.
}
}
}
一般我的習慣會用兩段的迴圈,先把 player_dbase 做個
資料前處理(資料過濾),再對留存下來的資料做獎金計算
前提就是「摃龜多」。
分兩段還有一個好處,我的話,有時我會先跑完一段,然
後 call_out 另一個函數隔幾秒後處理另一段。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
※ 編輯: laechan 來自: 1.165.164.2 (01/22 23:32)
推
01/22 23:37, , 1F
01/22 23:37, 1F
申請 mud_ky 板比較快唷~
※ 編輯: laechan 來自: 1.165.164.2 (01/22 23:48)
推
01/22 23:48, , 2F
01/22 23:48, 2F
這是對第二區(號碼 1~8)的獎號。
※ 編輯: laechan 來自: 1.165.164.2 (01/23 00:00)
推
01/23 00:06, , 3F
01/23 00:06, 3F
推
01/23 10:56, , 4F
01/23 10:56, 4F
→
01/23 11:37, , 5F
01/23 11:37, 5F
推
01/23 11:40, , 6F
01/23 11:40, 6F
→
01/23 12:07, , 7F
01/23 12:07, 7F
推
01/23 12:08, , 8F
01/23 12:08, 8F
推
01/23 12:38, , 9F
01/23 12:38, 9F
推
01/23 12:52, , 10F
01/23 12:52, 10F
推
01/23 13:19, , 11F
01/23 13:19, 11F
討論串 (同標題文章)
mud 近期熱門文章
PTT遊戲區 即時熱門文章