على هذه الصفحة
بلاك جاك (النسخة المشفرة)
على هذه الصفحة
مقدمة
تتناول هذه الصفحة النسخة المشفرة من لعبة البلاك جاك، والتي تُلعب عادةً في الكازينوهات التي تعتمد على العملات المشفرة. أفترض أن القارئ مُلِمٌّ بالقواعد الأساسية للعبة البلاك جاك التقليدية.
كازينوهات عادلة بشكل واضح
تحليل
في حالة اللعبة في Crypto.Games، مجموعة القواعد الغريبة هي كما يلي:
- 4 طوابق
- خلط الأوراق بعد كل يد
- الموزع لا يبحث عن البلاك جاك
- بلاك جاك يدفع 6:5
- يضرب الموزع على Soft 17
- ضعف على أي بطاقتين
- ضرب الآسات المنقسمة
- الاستسلام المبكر
- عشرة وآس بعد التقسيم يعتبران بلاك جاك
- مسموح بالمضاعفة بعد الانقسام
- يمكن للاعب الانقسام مرة واحدة فقط (أفترض)
باستثناء احتساب الاستسلام المبكر و10-A بعد التقسيم كبلاك جاك، فإن حاسبة هامش الكازينو في البلاك جاك التي أستخدمها تُعطي هامش كازينو بنسبة 1.91% مع الاستراتيجية الأساسية. مع ذلك، تُشير قائمتي لقواعد البلاك جاك المُتغيرة إلى أن قيمة القاعدتين اللتين لا تدعمهما الحاسبة هي 0.74%. هذا يجعل هامش الكازينو الإجمالي 1.17%، وهي نسبة عالية جدًا للعبة بلاك جاك على الإنترنت.
اللعب العادل
فيما يلي العملية التي تستخدمها Crypto.Games لاختيار البطاقات بشكل عشوائي من مجموعة مكونة من أربعة طوابق للعبة البلاك جاك الخاصة بهم.
- اكشف للاعب عن SHA-256 Hash الخاص ببذرة الخادم قبل وضع الرهان.
- بعد إجراء الرهان، قم بدمج بذرة الخادم وبذرة العميل، بهذا الترتيب.
- خذ SHA-512 Hash من البذرة المجمعة من الخطوة 1.
- خذ شخصيتين من Hash الموجودة في الخطوة 2، مع النظر إلى اليسار.
- حوّل الحرفين في الخطوة ٣ من النظام السداسي عشري إلى النظام العشري. إذا لم تفهم ما أقصده، فسأشرح رياضيات الأساس ١٦ في صفحتي على موقع "دايس" (النسخة المشفرة).
- إذا كانت نتيجة الخطوة 4 هي 207 أو أقل، فقم بربط رقم تلك البطاقة ببطاقة محددة في مجموعة 208 بطاقات.
- إذا لم يُعثر على رقم البطاقة في يدك بعد، فاربطه ببطاقة لعب معينة. إليك الطريقة:
- للحصول على رتبة البطاقة، اقسم رقم البطاقة على ١٣ وخذ الباقي. وزّع الباقي على رتبة واحدة كما يلي: من ٠ إلى الآس، من ١ إلى ٢، من ٢ إلى ٣، من ٣ إلى ٤، من ٤ إلى ٥، من ٥ إلى ٦، من ٦ إلى ٧، من ٧ إلى ٨، من ٨ إلى ٩، من ٩ إلى ١٠، من ١٠ إلى الولد، من ١١ إلى الملكة، من ١٢ إلى الملك.
- للحصول على نوع البطاقة، اقسم رقم البطاقة على ١٣ وتخلص من الباقي. ثم اقسم ناتج القسمة على ٤ وخذ الباقي. ثم خذ الباقي ووزعه على نوع البطاقة، كما يلي: ٠ للبستوني، ١ للقلوب، ٢ للماس، ٣ للهراوات.
- بخلاف ذلك، إذا كانت نتيجة الخطوة 5 أكبر من 207، أو تم العثور على تلك البطاقة بالفعل، فتجاهل هذين الرقمين في Hash.
- تقدم مركزين في الهاش، ثم عد إلى الخطوة ٣ حتى تصل إلى نهاية الهاش. هذا سيمنحك عددًا أكبر بكثير من البطاقات مما تحتاجه لإكمال جولة بلاك جاك.
مثال
فيما يلي كيفية عمل العملية ليد مثال.
الصورة أعلاه، من لوحة "اللعب العادل"، التُقطت قبل وضع رهان. لضمان نزاهة اللعبة، يجب إدخال وتسجيل بذرة عميل جديدة (مجموعة من الأحرف العشوائية كافية) وتجزئة بذرة الخادم التالية، والتي تُسمى اللعبة بـ "بذرة الخادم التالية SHA256". ها هي:
بذرة العميل = 5v5b85n85vb856nvbn5vbn
- بذرة الخادم التالية SHA256 =
581b31f8cd6e5d4bb510ac0e53a440af7baab92f8f1f220eff14e20201e0b1f6
أنا شخصياً أقوم بنسخ هذه العناصر ولصقها في المفكرة، إذا قمت بهذه العملية بالطريقة الصعبة.
في الصورة أعلاه، أبدأ برهان 0.00001 بيتكوين (BTC)، أي ما يعادل حوالي 10 سنتات. يُطلب من اللاعب استخدام هذا الرهان لإيداع عشر رقائق، ثم المراهنة بالعشرة كاملةً. لا أعرف لماذا يُعكّرون الأمور بهذه الخطوة.
كانت يدي الأولى ١١ مقابل ٣، فضاعفت الرهان وحصلت على ٣. كان لدى الموزع ٥ في الحفرة، بمجموع ٨، ثم سحب ملكًا، بمجموع ١٨. وهكذا، خسرت ١٤ مقابل ١٨.
png" />
بعد ذلك، أعود إلى لوحة الألعاب العادلة للتأكد من نزاهة اللعبة، كما يتضح من ترتيب البطاقات المُقدّر مسبقًا قبل وضع الرهان. باتباع الخطوات المذكورة أعلاه:
- من لوحة الألعاب العادلة، نرى أن بذرة الخادم كانت
Yt5IDwsb3Ldc5vyusvcQNfLqqjoYmCHGRkasqXNQ. - نأخذ Hash SHA-256 للحصول على 581b31f8cd6e5d4bb510ac0e53a440af7baab92f8f1f220eff14e20201e0b1f6 .
- نقارن قيمة التجزئة من الخطوة ٢ بـ "بذرة الخادم التالية SHA256" المسجلة قبل الرهان، ونتحقق من تطابقهما. إذا لم يتطابقا، فإما أنك أخطأت، أو أن الكازينو يكذب/يغش. في هذه الحالة، يتطابقان. هذا يؤكد أن ترتيب البطاقات كان مُقدّرًا مسبقًا.
- للتأكد من صحة البطاقات، اجمع بذرة الخادم وبذرة العميل بهذا الترتيب. سيعطيك هذا Yt5IDwsb3Ldc5vyusvcQNfLqqjoYmCHGRkasqXNQ5v5b85n85vb856nvbn5vbn . إذا اخترتَ استخدام رقم عشوائي، فسيكون ذلك في نهاية بذرة العميل.
- استخدم تجزئة SHA-512 من التجزئة المُجمّعة من الخطوة 4. لا أعرف لماذا يستخدمون دالتي تجزئة مختلفتين (SHA-256 وSHA-512). سيعطيك هذا 2b87fbc5eac7368ef393c8ab292f71a0251702f6db028ca8a855bfaa541b78df3ae996ad22ac022588a46231ed32180d5cbde86dff5d2368cbb7658332bbb9bc.
- خذ أول حرفين، وهما 2b ، وقم بتحويلهما إلى النظام السداسي عشر: 2b = 2*16 + 11 = 43.
- بما أن ٤٣ <= ٢٠٧، حوّلها إلى بطاقة: الرتبة = mod(٤٣، ١٣) = ٤، والتي تُعادل ٥. النوع = mod(int(٤٣/١٣)، ٤) = mod(٣، ٤) = ٣، والتي تُعادل النوادي. هذه هي أول بطاقة تُوزّع على اللاعب، وهي ٥ النوادي.
- تقدم موضعين في الهاش من الخطوة ٤، وهما ٨٧. حوّل ذلك من النظام السداسي عشري إلى النظام العشري: ٨*١٦ + ٧ = ١٣٥.
- بما أن ١٣٥ <= ٢٠٧ ولم يُعثر عليها بعد، فحوّلها إلى بطاقة: rank = mod(135,13) = 5، الذي يُعادل ٦. المجموعة = mod(int(135/13),4) = mod(10,4) = 2، الذي يُعادل الماس. هذه هي البطاقة الثانية التي تُوزّع على اللاعب، وهي ٦ الماس.
- تقدّم موضعين في الهاش من الخطوة ٤، وهما fb . حوّل ذلك من النظام السداسي عشري إلى النظام العشري: ١٥*١٦ + ١١ = ٢٥١.
- نظرًا لأن 251 > 207، فإننا نتخطى هذين الموضعين.
- تقدّم موضعين في الهاش من الخطوة ٤، وهما c5 . حوّل ذلك من النظام السداسي عشري إلى النظام العشري: ١٢*١٦ + ٥ = ١٩٧.
- بما أن ١٩٧ <= ٢٠٧ ولم يُعثر عليها بعد، حوّلها إلى بطاقة: rank = mod(197,13) = 2، الذي يُعادل رتبة ٣. المجموعة = mod(int(197/13),4) = mod(15,4) = 3، الذي يُعادل رتبة النوادي. هذه أول بطاقة (مكشوفة) تُوزّع على الموزع، وهي ٣ النوادي.
- تقدم موضعين في الهاش من الخطوة ٤، وهما ea . حوّل ذلك من النظام السداسي عشري إلى النظام العشري: ١٤*١٦ + ١٠ = ٢٣٤.
- نظرًا لأن 234 > 207، فإننا نتخطى هذين الموضعين.
- تقدّم موضعين في الهاش من الخطوة ٤، وهما c7 . حوّل ذلك من النظام السداسي عشري إلى النظام العشري: ١٢*١٦ + ٧ = ١٩٩.
- بما أن ١٩٩ <= ٢٠٧ ولم يُعثر عليها بعد، حوّلها إلى بطاقة: rank = mod(١٩٩,١٣) = ٤، والتي تُعادل ٥. النوع = mod(int(١٩٩/١٣),٤) = mod(١٥,٤) = ٣، والتي تُعادل النوادي. هذه هي البطاقة الثانية (المقلوبة) التي تُوزع على الموزع، وهي ٥ النوادي.
- تقدم موضعين في الهاش من الخطوة ٤، وهما ٣٦. حوّل ذلك من النظام السداسي عشري إلى النظام العشري: ٣*١٦ + ٦ = ٥٤.
- بما أن 54 <= 207 ولم يُعثر عليها بعد، فحوّلها إلى بطاقة: rank = mod(54,13) = 2، الذي يُقابل 3. النوع = mod(int(54/13),4) = mod(4,4) = 0، الذي يُقابل البستوني. هذه، 3 البستوني، هي البطاقة التالية في المجموعة، والتي ذهبت إلى اللاعب بعد المضاعفة. وبالتالي، يكون مجموع نقاط اللاعب 5 + 6 + 3 = 14.
- تقدّم موضعين في الهاش من الخطوة ٤، وهما ٨e . حوّل ذلك من النظام السداسي عشري إلى النظام العشري: ٨*١٦ + ١٤ = ١٤٢.
- بما أن ١٤٢ <= ٢٠٧ ولم يُعثر عليها بعد، فحوّلها إلى بطاقة: الرتبة = mod(١٤٢، ١٣) = ١٢، والتي تُمثّل ملكًا. النوع = mod(int(١٤٢/١٣)، ٤) = mod(١٠، ٤) = ٢، والتي تُمثّل ألماسي. هذه، ملك الألماسي، هي البطاقة التالية في المجموعة، والتي ذهبت إلى الموزع عندما اضطر إلى الحصول على ٨ قوية، ليصبح المجموع ١٨.
- يخسر اللاعب 14 إلى 18.
- إذا تطلب الأمر المزيد من البطاقات، فسنستمر في تكرار هذه العملية حتى يتم العثور على عدد كافٍ من البطاقات.
إذا بدا لك أن هذه خطوات كثيرة، فأنا أوافقك الرأي. لهذا السبب كتبتُ سكربت PHP للقيام بذلك نيابةً عنك! لاستخدامه، اتبع الخطوات التالية:
- انتقل إلى PHP Sandbox .
- أدخل بذرة الخادم على السطر رقم 3.
- أدخل بذرة العميل على السطر رقم 4.
- أدخل Hash الخاص ببذرة الخادم التالية على السطر 5.
- انقر فوق "تنفيذ الكود".
سيقوم البرنامج بتجزئة بذور الخادم وفقًا لما تم تقديمه قبل الرهان والبطاقات التي تم توزيعها في اللعبة.
لدي أيضًا نسخة من الكود يمكنك رؤيتها بالنقر فوق الزر أدناه.
[كابح]
// التحقق من نزاهة لعبة البلاك جاك في Crypto.Games
$server_seed = "Yt5IDwsb3Ldc5vyusvcQNfLqqjoYmCHGRkasqXNQ";
$client_seed = "5v5b85n85vb856nvbn5vbn";
$next_hash = "581b31f8cd6e5d4bb510ac0e53a440af7baab92f8f1f220eff14e20201e0b1f6";
$rank_array=array("أ"،2،3،4،5،6،7،8،9،10،"ج"،"س"،"ك");
$suit_array=array("البستوني","القلوب","الماس","الهراوات");
تم العثور على البطاقات=0؛
الموضع=0؛
$combined_seed = $server_seed.$client_seed؛
صدى "البذرة المدمجة = $combined_seed\n";
$combined_hash = hash('sha512', $combined_seed);
صدى "تجزئة البذرة المجمعة = $combined_hash\n";
يفعل
{
$first_two=substr($combined_hash,$position,2);
$hex_to_dec=hexdec($first_two);
إذا ($hex_to_dec <=207)
{
$تكرار=0؛
إذا ($cards_found>0)
{
لـ ($i=0؛ $i<$cards_found؛ $i++)
{
إذا ( $hex_to_dec == $card_array[$i])
{ $تكرار=1; }
}
}
إذا ($repeat==0)
{
$card_array[$cards_found] = $hex_to_dec؛
تم العثور على البطاقات++؛
$rank=$hex_to_dec%13؛
$البدلة=intdiv($hex_to_dec,13)%4؛
صدى "البطاقة $cards_found = \t$rank_array[$rank] من $suit_array[$suit]\n";
}
}
الموضع+=2؛
إذا ($position==128)
{
echo "خطأ -- لا يوجد المزيد من المساحة في التجزئة.\n";
تم العثور على البطاقات=10؛
}
}
بينما ($cards_found<20);
$server_seed_hash=hash('sha256', $server_seed);
إذا ($server_seed_hash==$next_hash)
{ صدى "مطابقة بذرة الخادم.\n"; }
آخر
{
صدى "عدم تطابق بذور الخادم!\n"؛
صدى "بذرة الخادم =\t$server_seed\n";
صدى "خادم بذرة التجزئة =\t$server_seed_hash\n";
صدى "المزعوم التالي Hash=\t$next_hash\n";
}
// إجراء
// 1. اجعل "الخطوة" مساوية لـ 0 و"الموضع" مساوية لـ 0.
// 2. قم بربط بذور الخادم والعميل، والخطوة، وبذرة الخادم، بهذا الترتيب.
// 3. قم بإنشاء تجزئة SHA-512 للسلسلة من الخطوة 2.
// 4. قم بتحويل أول حرفين، بدءًا من "موضع" التجزئة من الخطوة 3 من النظام السداسي عشري إلى النظام العشري.
// 5. إذا كانت النتيجة من الخطوة 4 هي 0 إلى 207، فقم بربطها ببطاقة محددة في حذاء مكون من أربعة طوابق.
// 6. إذا ظهرت نتيجة الخطوة 5 بعد، فيجب أن تكون هذه هي البطاقة التالية التي سيتم توزيعها في اللعبة.
// 7. للحصول على موضع البطاقة من الخطوة 6 إلى بطاقة فعلية، قم بما يلي:
// أ. قسّم النتيجة من الخطوة 4 على 13 ثم خذ الباقي.
// ب. قم برسم النتيجة من الخطوة 7أ للحصول على الرتبة، على النحو التالي: من 0 إلى أ، ومن 1 إلى 2، ومن 2 إلى 3، ...، ومن 9 إلى 10، ومن 10 إلى ج، ومن 11 إلى س، ومن 12 إلى ك.
// ج. قسّم النتيجة من الخطوة 4 على 13 ثم احذف الباقي.
// د. قسّم النتيجة من الخطوة 7ج على 4 ثم خذ الباقي.
// E. قم بربط النتيجة من الخطوة 7D للحصول على البدلة، على النحو التالي: 0 إلى البستوني، 1 إلى القلوب، 2 إلى الماس، 3 إلى النوادي.
// 8. استمر في تكرار الخطوات من 4 إلى 7 حتى تصل إلى نهاية التجزئة، على الرغم من أنه من غير المحتمل أن تكون هناك حاجة إلى هذا العدد من البطاقات في اللعبة.
؟>
[/كابح]

