خلط الأوراق

في معظم ألعاب الورق ستحتاج إلى القدرة على خلط الأوراق؛ وجعلها في ترتيب عشوائي. في القسم 12.6 رأينا كيفية توليد أرقام عشوائية، لكن استخدامها لخلط أوراق الشدة ليس واضحاً.
أحد الاحتمالات هو محاكاة الطريقة التي يخلط البشر بها الأوراق، وهي تكون عادة بتقسيم المجموعة إلى قسمين ثم اختيار الورق بالتبادل منهما. بما أن البشر لا يخلطون جيداً، سيكون الورق عشوائياً بشكل جيد بعد تكرار تلك العملية حوالي 7 مرات. لكن برنامج الحاسوب سيخلط الورق بشكل مثالي في كل مرة، وبعد 8 مرات من خلط الورق مثالياً، ستجد مجموعة الورق قد عادت إلى الترتيب الذي بدأت منه. لمزيد من المعلومات، انظر http://en.wikipedia.org/wiki/Faro_shuffle.
توجد خوارزمية أفضل لخلط أوراق اللعب وهي المرور على مجموعة الورق ورقة واحدة في كل مرة، ثم اختيار ورقتين عند كل تكرار والتبديل يبنهما.
هنا تجد مخططاً لكيفية عمل هذه الخوارزمية. لتخطيط البرنامج، سأستعمل مزيجاً من تعليمات Java والكلمات الإنكليزية وهو ما يدعى أحياناً بالشفرة الزائفة
كود:
(pseudocode):
for (int i=0; i<deck.length; i++) {
   // choose a random number between i and deck.cards.length
   // swap the ith card and the randomly-chosen card
}
الشيء الجميل في الشفرة الزائفة هو أنها غالباً ما تجعل العمليات التي ستحتاج إليها واضحة. في هذه الحالة، سنحتاج شيئاً ما مثل randomInt، تختار عدداً صحيحاً عشوائياً بين low وhigh، وswapCards التي تأخذ دليلين وتبدل بين الأوراق الموجودة في الأماكن المشار إليها.
هذه العملية – كتابة الشفرة الزائفة ثم كتابة العمليات التي تعمل – تدعى التطوير من الأعلى للأسفل
(top-down development) (انظر
http://en.wikipedia.org/wiki/Top-dow...ttom-up_design).