在這一頁
掃雷遊戲(加密版)
在這一頁
簡介
本頁面針對常見於完全基於加密貨幣的網路賭場中的掃雷版本。遊戲在一個5x5的方格上進行,目標是選擇網格中沒有地雷的方格。請勿將其與此版本的遊戲混淆。
規則
- 遊戲在一個5x5的方格上進行。
- 玩家將選擇投注金額及1至24顆地雷的數量。
- 遊戲將隨機在方格上放置玩家所選數量的地雷,此時地雷位置將對玩家隱藏。
- 每個決策點時,遊戲將顯示若玩家下一次選擇成功時,其賭注將增加至的金額。
- 玩家將從方格中剩餘的格子中選擇一個。
- 若玩家選擇的格子藏有地雷,則地雷將會爆炸且遊戲結束,玩家將損失其賭注。
- 否則,若玩家選擇的格子不包含地雷(以比特幣標誌表示),則其賭注將會增加。
- 玩家可選擇以當前賭注金額結算退出,或再次進行選擇。若選擇再次挑戰,則返回步驟5。
在我所玩的版本中,遊戲的期望回報率為99%,此處將遊戲定義為玩家要么收集獎勵要么損失。首次選擇的回報率為99%,同一局遊戲中後續所有選擇的回報率均為100%。據我推測,這個玩家回報率應是可配置設定的。
範例
在上圖中,我選擇了三個礦井和0.00001 BTC(約合0.10美元)的賭注。
在上圖中,我成功選擇了頂行左起第二列的方格。我的投注金額增加至0.00001076比特幣。這是根據我下注前的本金、22/25的成功選擇概率倒數以及99%的回報率計算得出:0.00001 × (25/22) × 0.99 = 0.00001125。
在上圖中,我成功選擇了頂排中間列的方格。我的投注金額增加至0.00001286 BTC。這基於我的初始投注金額、成功完成兩次選擇的機率倒數,以及99%的回報率:0.00001 × (25/22) × (24/21) × 0.99 = 0.00001286。
在上圖中,我成功選擇了頂排右列的第三個方格。我的投注金額增加至0.00001479比特幣。這是根據我的初始投注額、成功完成三次選擇的機率倒數,以及99%的回報率計算得出:0.00001 × (25/22) × (24/21) × (23/20) × 0.99 = 0.00001286。
在上圖中,我成功選擇了從上數來第二列、從左數來第二欄的第四個方格。我的投注金額增加到了0.00001712比特幣。這是基於我的初始投注金額、成功完成四次選擇的機率倒數,以及99%的回報率計算而來:0.00001 × (25/22) × (24/21) × (23/20) × (22/19) × 0.99 = 0.00001712。
在上圖中,我成功選擇了從左數來中排第一列的第五個方格。我的投注金額增加到了0.00001997 BTC。這是基於我的初始投注金額、成功完成五次選擇的機率倒數,以及99%的回報率計算而來:0.00001 × (25/22) × (24/21) × (23/20) × (22/19) × (21/18) × 0.99 = 0.00001997。
在上圖中,我成功選擇了中間行中間列的第六個方格。我的賭注增加到了0.00002350比特幣。這是基於我的初始賭注、成功完成六次選擇的機率倒數,以及99%的回報率計算得出:0.00001 × (25/22) × (24/21) × (23/20) × (22/19) × (21/18) × (20/17) × 0.99 = 0.00002350。遊戲顯示,若我成功選擇另一個方格,我的「下一次現金收益」將為0.00002790比特幣。
在上圖中,我選擇提現並取回0.00002350比特幣。這包括我最初下注的0.00001比特幣以及0.00001350的盈利。遊戲向我顯示了地雷佈置的位置。
在上圖中,我成功選擇了從上數來第二列、從左數來第二欄的第四個方格。我的投注金額增加到了0.00001712比特幣。這計算是基於我的初始投注金額、成功完成四次選擇的機率倒數,以及99%的回報率:0.00001 × (25/22) × (24/21) × (23/20) × (22/19) × 0.99 = 0.00001712。
分析
在我於CryptoGames遊玩的版本中,首次選擇的玩家回報率為99%。之後每一次選擇的回報率均為100%。玩家的賭注總是根據初始賭注及遊戲中達到該點的概率,向下捨入至0.00000001 BTC(比特幣)。換言之,捨入誤差不會複利計算,而是僅應用一次。
如果被迫要說遊戲的整體回報率,我會說是99%,至少對於CryptoGames上的版本來說,基於每筆已解決的投注,而投注在虧損或兌現之前都不算解決。
公平遊戲流程的運作方式如下:0到20號方格中出現地雷的機率略高於21到24號方格。具體而言,21到24號單元格的概率降低了1/4096。這使得在一顆地雷一次選擇的遊戲中,選擇0到20號方格的回報率為98.97%,而選擇21到24號方格的回報率為99.00%。
公平遊戲
本節僅供那些確實驗證遊戲結果為預定之人員使用。此處假設讀者熟悉透過密碼學實現的「公平遊戲」流程運作方式。若您需要瞭解基礎知識,請參閱我關於骰子(加密版本)的頁面說明。
在掃雷遊戲的情況下,遊戲必須預先確定網格上最多24個地雷的位置。這些位置的編號如下:
在CryptoGames的情況下,玩家將會找到賭場種子的SHA512哈希值,其後跟著數字零,再接著玩家的種子。接著,為了找出第一個地雷的位置,玩家將把哈希值的前兩個字符轉換為十進制,並將該數字取模25。為了找出下一個地雷的位置,玩家將重複相同的過程,但使用哈希值的第二組兩個位置。玩家將持續重複此過程,沿著哈希值向上,每次兩個位置,直到所有地雷的位置都被找出。
在極不可能發生的情況下,若哈希值耗盡所有位置,則玩家將重複相同流程,但改為在賭場種子與玩家種子之間放置數字1而非0,以尋找額外地雷。
為了節省您的時間,我寫了一個掃雷程序以便輕鬆找出地雷的位置。只需在第4行輸入客戶端種子,在第5行輸入伺服器種子,然後點擊“執行代碼”。程序會在代碼下方的“結果”框中告訴您地雷的位置。我還保存了一份代碼副本,您可以通過點擊下方按鈕查看。
$client_seed = "lKB0F28tMdLhrEn6nZ6aJGm9FSZB3bwehn47NhUk";
$server_seed = "nG1QqpFtZFoqJLMl0fE55olfP6KbptpKOInScVh9";
$mines=3;
$step=0;
$mines_found=0;
$position=0;
$combined_seed = $server_seed.$step.$client_seed;
echo "Combined seed = $combined_seed\n";
$combined_hash = hash('sha512', $combined_seed);
echo "Hash of combined seed = $combined_hash\n";
do
{
$first_two=substr($combined_hash,$position,2);
$hex_to_dec=hexdec($first_two);
$mine_location=$hex_to_dec%25;
$repeat=0;
if ($mines_found>0)
{
for ($i=0; $i<$mines_found; $i++)
{
if ( $mine_location == $mine_array[$i])
{ $repeat=1; }
}
}
if ($repeat==0)
{
$mine_array[$mines_found] = $mine_location;
$mines_found++;
echo "Mine at $mine_location\n";
}
$position+=2;
if ($position==128)
{
$position=0;
$step++;
}
}
while ($mines_found<$mines);
// 程序
// 1. 將「步數」設為0,「位置」設為0。
// 2. 依序連接伺服器種子、客戶端種子、步數和伺服器種子。
// 3. 將步驟2中的字串生成SHA-512雜湊值。
// 4. 從步驟3的雜湊值中,從當前「位置」開始取前兩個字元,將其從
十六進制轉換為十進制。
// 5. 將步驟4的結果除以25並取餘數。
// 6. 如果步驟5的結果在遊戲中是唯一的,則該位置將放置一個地雷。
// 7. 地雷位置將按以下方式編號:
// 0 1 2 3 4
// 5 6 7 8 9
// 10 11 12 13 14
// 15 16 17 18 19
// 20 21 22 23 24
// 8. 如果所有地雷位置都已確定,則停止;否則,將「位置」前進2,並返回步驟4。
// 9. 在極不可能的情況下,若「位置」達到128(雜湊值的結尾),則將「步數」增加1,將「位置」重置為0,並返回步驟2。
?
外部連結
關於掃雷遊戲在我於 Wizard of Vegas 論壇上的討論