2013-03-21 107 views
4

嗨,大家好,我需要一些我在Php製作的腳本的幫助,目前它被設置爲一個老虎機式的遊戲,用戶可以支付一點錢和3個隨機數每個數字都可以鏈接到他們可以贏得的獎金。比賽3並贏得獎品。基於MySQL數據庫中的股票隨機生成數字

不幸的是,我不會總是有庫存的每一項放棄作爲獎勵,我需要一種方法,通過每個數字檢查並確定它是在股票

$stock = $conn -> query('SELECT DISTINCT ItemID FROM codes WHERE Available = 1');

而如果是庫存增加它的算法,將隨機挑選的3個數字

目前我有像這樣

function generate_numbers(){ 
global $numbers; 
$numbers = array(
'0' => rand(1,2), 
'1' => rand(1,2), 
'2' => rand(1,2) 
); 
display_numbers(); 
} 

的設置它根據兩個變量生成數字,每個數字鏈接到一個獎項,顯然它沒有考慮哪些數字有現貨,這將導致我發放我沒有的獎品,並且它不允許有優勢

我需要一個簡單的方法來檢查一個物品是否有庫存,如果它有庫存,它會被添加到可以贏得的獎品列表中,我需要它有一個優勢,所以一些獎品會更頻繁地出現(很多)比其他基於簡單數值的數據如代碼X有0.25%的出現機會,並且科迪Y有50%的出現機會。

如果我有一個更大的數字範圍設置它...

function generate_numbers(){ 
global $numbers; 
$numbers = array(
'0' => rand(1,100), 
'1' => rand(1,100), 
'2' => rand(1,100) 
); 
display_numbers(); } 

if (($numbers[0] > 0) && ($numbers[0] < 40)){ 
echo "you win prize x"; 
else if (($numbers[0] > 40) && ($number[0] < 50)){ 
echo "you win prize y"; 
else { 
echo "you win prize z"; 
} 

...我還是留下或者發放獎品我沒有 - 我也可以添加一個嵌入的if else來檢查是否存儲了一個代碼,是否給出它以及是否不給予獎勵或給予默認獎勵。

但是,這將意味着更多的代碼我有庫存的機會較高,他們有報錯,我不希望我真的希望它是使用預定義的賠率完全公平..

所以希望所有有道理它不是一個過於複雜的問題,但我覺得挺不尋常的一個

感謝您的閱讀,我期待着聽到您的想法

盧克

+0

真的很有趣的問題:)我很好奇其他答案。 – EaterOfCode 2013-03-21 13:24:46

+1

我希望您有適當的許可證可以在您所在的國家/地區運行博彩網站 – mensi 2013-03-21 20:45:10

回答

3

掃描你的問題,我想你需要至改變你的查詢

$stock = $conn -> query('SELECT DISTINCT ItemID FROM codes WHERE Available = 1 ORDER BY RAND()'); 

這樣,你先挑3和你有3個隨機獎品,

這是一個快速的解決方案。有機會它會更復雜讓我想...

編輯

一些測試,我認爲我得到了它之後,

你需要頂部添加列chance這會是一個數量和該記錄出現的機率則1 N個,

額外其中的代碼是:

0 = FLOOR(RAND()*chance)

所以最後的代碼是

$stock = $conn ->query(
    'SELECT DISTINCT ItemID FROM codes WHERE Available = 1 AND 0 = FLOOR(RAND()*chance) ORDER BY RAND()' 
); 
+0

我認爲您對此有所瞭解我已將代碼粘貼到我的查詢中,並在每個代碼中添加了變量部分,但我不完全確定'0 = FLOOR(RAND()* chance)'。它似乎影響數據庫,並使項目具有較低的機會值,即0.25顯示更多的時候比數字更高的機會,即100 – Coderrrr 2013-03-21 13:34:10

+0

@LukeWatson什麼? – EaterOfCode 2013-03-21 13:34:59

+0

就像我說的那樣,如果機會是100,它會在100次出現1次,如果機會是2,它會在2次出現1次它'RAND()'返回0到1之間的隨機數我乘以通過'機會'然後發言,如果它是0,它將被選中,並且是'機會'是一個奇怪的名字,想不到另一個 – EaterOfCode 2013-03-21 13:39:50

0

如果我理解你的權利,你可能會創建在開始查詢提供獎品的數組開始。

所以數組是:

{0 => prize1_id, 
1 => prize3_id, 
2 => prize4_id, 
// ...and so on 
} 

然後你可以從獎品IDS採取隨機電話號碼,但沒有,但數組索引(鍵)。

如果您希望某些項目有更多機會被選中,您可以將它們添加兩次。

0

你可以做到這一點(如果你沒有太多項目)的一種方法是在陣列上創建一個ItemID的數組並使用shuffle()。然後選擇前三個元素(或將此選項隨機爲rand()mt_rand())爲您顯示的數字。這樣你可以選擇不存在的項目。您可以更改此算法以檢查庫存水平,以便在您決定(可能通過codes中的新列確定要選擇的項目所需的最低庫存量)時不添加ItemID

要獲得邊緣,您可以添加一些重複的ItemID,以便您希望更頻繁地選擇項目。您可以在codes表中添加另一列以指示您希望包括特定項目的次數,因此最少爲3(以匹配三個數字),您可以爲想要的ItemID s指定較大的值該算法更經常挑選。它也有可能將0放在你不想放棄的物品上。