132 lines
		
	
	
		
			7.7 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
		
		
			
		
	
	
			132 lines
		
	
	
		
			7.7 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
|   | --- | |||
|  | title: Counting Cards | |||
|  | localeTitle: عد بطاقات | |||
|  | --- | |||
|  |  تذكر استخدام **`Read-Search-Ask`** إذا واجهتك مشكلة. حاول إقران البرنامج  واكتب الكود الخاص بك  | |||
|  | 
 | |||
|  | ###  شرح المشكلة:
 | |||
|  | 
 | |||
|  | في لعبة الكازينو **Blackjack** ، يمكن للاعب الحصول على ميزة على المنزل من خلال تتبع العدد النسبي للبطاقات العالية والمنخفضة المتبقية في سطح السفينة. وهذا ما يسمى حساب البطاقات. | |||
|  | 
 | |||
|  | وجود المزيد من البطاقات العالية المتبقية في سطح السفينة تفضل اللاعب. يتم تعيين قيمة لكل بطاقة وفقًا للجدول أدناه. عندما يكون العد موجبًا ، يجب أن يراهن اللاعب عالياً. عندما يكون العدد صفرًا أو سلبيًا ، يجب على اللاعب الرهان منخفضًا. | |||
|  | 
 | |||
|  | القيمة | بطاقات   | |||
|  | \----- | : -------------------:   | |||
|  | +1 | 2 و 3 و 4 و 5 و 6   | |||
|  | 0 | 7 و 8 و 9   | |||
|  | \-1 | 10 ، 'J' ، 'Q' ، 'K' ، 'A' | |||
|  | 
 | |||
|  | ستكتب وظيفة حساب البطاقة. سوف تتلقى معلمة **بطاقة** وزيادة أو إنقاص متغير **العد** العالمي وفقا لقيمة البطاقة (انظر الجدول). ستقوم الدالة بعد ذلك بإرجاع سلسلة مع العدد الحالي وسلسلة `Bet` إذا كان العدد موجبًا ، أو `Hold` إذا كان العدد صفراً أو سالباً. يجب فصل العدد الحالي وقرار اللاعب ( `Bet` أو `Hold` ) بمسافة واحدة. | |||
|  | 
 | |||
|  | *   تغيير الرمز أدناه `// Only change code below this line` وحتى `// Only change code above this line` | |||
|  | *   تأكد من أنك تقوم بتحرير داخل وظيفة `cc` . | |||
|  | *   استخدم ما تعلمته للتحقق من قيمة كل معلمة **بطاقة** تم تمريرها إلى الدالة. | |||
|  | *   احتفظ بحساب التشغيل لهذا الرقم. | |||
|  | *   إذا كان العدد النهائي 1 أو أكبر ، فأرجع **\# Hold** . | |||
|  | *   إذا كان العدد النهائي 0 أو أقل ، **فأرجع # Bet** . | |||
|  | 
 | |||
|  | **مثال على الناتج:** | |||
|  | 
 | |||
|  | *   \-3 عقد | |||
|  | *   5 الرهان | |||
|  | 
 | |||
|  | ##  تلميح: 1
 | |||
|  | 
 | |||
|  | استخدم عبارة `switch` (أو `else if` ) لحساب قيمة كل بطاقة. | |||
|  | 
 | |||
|  | > _حاول أن تحل المشكلة الآن_
 | |||
|  | 
 | |||
|  | ##  تلميح: 2
 | |||
|  | 
 | |||
|  | إضافة / طرح قيمة كل بطاقة إلى **عدد** المتغيرات. إذا كانت قيمة البطاقة تساوي 0 ، فلا تفعل أي شيء. | |||
|  | 
 | |||
|  | > _حاول أن تحل المشكلة الآن_
 | |||
|  | 
 | |||
|  | ##  تلميح: 3
 | |||
|  | 
 | |||
|  | بعد قيامك بحساب البطاقات ، استخدم العبارة `if` للتحقق من قيمة **العد** . أيضا، وتأكد من `return` لديها مساحة بين عدد والسلسلة. | |||
|  | 
 | |||
|  | > _حاول أن تحل المشكلة الآن_
 | |||
|  | 
 | |||
|  | ## تنبيه المفسد!
 | |||
|  | 
 | |||
|  |  | |||
|  | 
 | |||
|  | **الحل في المستقبل!** | |||
|  | 
 | |||
|  | ##  الحل الأساسي للكود:
 | |||
|  | 
 | |||
|  |  `    function cc(card) {  | |||
|  |       // Only change code below this line  | |||
|  |       switch(card){  | |||
|  |         case 2:  | |||
|  |         case 3:  | |||
|  |         case 4:  | |||
|  |         case 5:  | |||
|  |         case 6:  | |||
|  |           count++;  | |||
|  |           break;  | |||
|  |         case 10:  | |||
|  |         case "J":  | |||
|  |         case "Q":  | |||
|  |         case "K":  | |||
|  |         case "A":  | |||
|  |           count--;  | |||
|  |           break;  | |||
|  |       }  | |||
|  |       if (count > 0){  | |||
|  |         return count + " Bet";  | |||
|  |       } else {  | |||
|  |         return count + " Hold";  | |||
|  |       }  | |||
|  |       // Only change code above this line  | |||
|  |     }  | |||
|  | `  | |||
|  | 
 | |||
|  | ### شرح الشفرة:
 | |||
|  | 
 | |||
|  | *   تحقق من قيمة كل بطاقة من خلال بيان `switch` . | |||
|  | *   **عدد** المتغيرات: | |||
|  |     *   يزيد بمقدار 1 إذا كانت البطاقة 2 أو 3 أو 4 أو 5 أو 6. | |||
|  |     *   نظرًا لأن 7 و 8 و 9 لا تستحق أي شيء ، فإننا نتجاهل تلك البطاقات في بيان `switch` بنا. | |||
|  |     *   تنخفض بمقدار 1 إذا كانت البطاقة 10 أو "J" أو "Q" أو "K" أو "A". | |||
|  | *   تحقق من قيمة **العد** وأعد الاستجابة المناسبة. | |||
|  | 
 | |||
|  | **مثال تشغيل** | |||
|  | 
 | |||
|  | *   `cc(2);` أشواط. | |||
|  | *   تصل العبارة `switch` إلى `case 2` ، وتقفز للأسفل وتضيف 1 إلى `count` المتغيرات. | |||
|  | *   ثم يقوم بيان `switch` بضرب `break` و `cc(3);` أشواط. | |||
|  | *   تستمر هذه الدورة حتى يتم إجراء المكالمة النهائية ، `cc('A');` . | |||
|  | *   بعد عبارة `switch` ، يتم `count` الشيك `if` كشف ، وهو الآن 0. | |||
|  | *   هذا يسقط بعد ذلك إلى العبارة `else` ، والتي سوف تعود **0 عقد** . | |||
|  | 
 | |||
|  | **_ملاحظة_** : كما ذكرنا سابقاً ، يمكن أن يكون بيان `switch` عبارةً أخرى `else if` عبارة. | |||
|  | 
 | |||
|  | ## حل رمز إضافي:
 | |||
|  | 
 | |||
|  |  `function cc(card) {  | |||
|  |   // Only change code below this line  | |||
|  |   var regex = /[JQKA]/;  | |||
|  |   if (card > 1 && card < 7){count++;}  | |||
|  |   else if (card === 10 || String(card).match(regex)){count--;}  | |||
|  |   | |||
|  |   if (count > 0) return count + " Bet";  | |||
|  |   return count + " Hold";  | |||
|  |   | |||
|  |   // Only change code above this line  | |||
|  |  }  | |||
|  | `  | |||
|  | 
 | |||
|  | تشغيل الكود في [repl.it.](https://repl.it/@AdrianSkar/Basic-JS-Counting-cards) | |||
|  | 
 | |||
|  | ### تفسير الشفرة
 | |||
|  | 
 | |||
|  | · وظيفة بتقييم أولا `if` شرط `card` هي قيمة أكبر من `1` وأقل من `7` ، وفي هذه الحالة فإنه بزيادة `count` تلو الآخر. · ثم إذا كانت البطاقة `10` أو أعلى هو التناقصات `count` من جانب واحد. · `regex` عبارة عن [تعبير عادي](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp) يمثل القيم (الحروف) للبطاقات الأعلى. · يقوم البيان `else` بالتحقق من تلك القيم باستخدام `|| (logical OR)` مشغل `|| (logical OR)` ؛ أولاً لـ `10` ومن ثم لأي سلسلة تطابق التعبير العادي باستخدام [String.match ()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/match) . | |||
|  | 
 | |||
|  | #### مصادر
 | |||
|  | 
 | |||
|  | *   [بطاقة العد في ويكيبيديا](https://en.wikipedia.org/wiki/Card_counting) | |||
|  | *   [التحدي: الاختيار من العديد من الخيارات مع تبديل البيانات](http://www.freecodecamp.com/challenges/selecting-from-many-options-with-switch-statements) | |||
|  | *   [التحدي: تسلسل إذا كانت البيانات الأخرى](http://www.freecodecamp.com/challenges/chaining-if-else-statements) | |||
|  | *   [التحدي: زيادة رقم باستخدام جافا سكريبت](http://www.freecodecamp.com/challenges/increment-a-number-with-javascript) |