عمل تطبيقي : " أكثر أو أقل " ، لعبتك الأولى
نصل اليوم إلى أول عمل تطبيقي. الهدف هو أن أريك أنك قادر على برمجة الكثير من الأشياء بما علّمتك إياه. لأنه في الواقع، الجانب النظري للغة أمر جيّد لكننا إن كنا لا نعرف كيف نطبّق ما تعلّمناه بشكل سلس فلاداعي لإهدار وقتنا بتعلم المزيد. صدق أو لا تصدق، يسمح لك مستواك الآن ببرمجة أول برنامج ممتع ، و هو لعبة على شكل كونسول ( نصل للبرامج بنافذة لاحقا ) . مبدأ عمل اللعبة سهل للغاية، و لهذا اخترتها لتكون موضوع أول عمل تطبيقي لك.
- تجهيزات و نصائح
- مبدأ عمل اللعبة : قبل أن نبدأ يجب أن أشرح لك مبدئ عمل البرنامج، إنه لعبة أحب تسميتها بـ "أكثر أو أقل" .
المبدأ هو التالي :
1- الجهاز يختار عشوائيا رقما من 1 إلى 100 .
2- يطلب منك أن تخمن رقما و بالتالي ستختار بدورك من 1 إلى 100.
3- يقوم الجهاز بمقارنة الرقم الذي كتبته بالرقم الغامض، ثم يقول لك ما إن كان الرقم الغامض أصغر أو أكبر من الرقم الذي اخترته أنت.
4- ثم يقوم الجهاز بإعادة طلب الرقم منك
5- يقول لك ما إن اقتربت منه يعني الرقم الغامض أصغر أو أكبر من الرقم الذي اخترته أنت.
6- و هكذا تستمر العملية حتى تجد أنت ذلك الرقم .
و الهدف من اللعبة هي أن تجد الرقم الغامض في أقل عدد ممكن من المحاولات بالطبع.
و هذا ما يجب أن تكون عليه اللعبة في طور التنفيذ :
What's the number ? 50 Greater !
What's the number ? 75 Greater !
What's the number ? 85 Lesser !
What's the number ? 80 Lesser !
What's the number ? 78 Greater !
What's the number ? 79 Bravo, you have find the mysterious number !!! | |
- إختيار رقم عشوائي :
* لكن كيف يختار الجهاز رقماً عشوائياً؟ أنا لا أجيد فعل هذا!
صحيح، نحن لا نجيد كيففية اختيار رقم عشوائي. و يجب القول أن طلب ذلك من الحاسوب ليس أمراً سهلاً جداً: هو يجيد القيام بعمليات حسابية، لكن أن يستخرج رقماً عشوائيا، هذا أمر غير ممكن!
لكي نفعل هذا، يجب أن نبرمج الجهاز على عمليات متعددة، و هنا نميز حلين :
1- إما أن نطلب من المستعمل أن يقوم باختيار رقم عشوائي في بداية اللعبة بواسطة الدالة scanf، مما يستلزم هنا لاعبين : واحد يقوم بإدخال الرقم الغامض و الآن يحاول تخمينه .
2- أشرح لك طريقة ثانية لجعل الجهاز يختار وحده الرقم و بهذا تتمكن من لعب اللعبة لوحد.
طبعا سنقوم بالاختيار الثاني و لكن إن أردت تجريب الحل الأول فلا شيء يمنعك.
لاختيار رقم عشوائي نستعمل الدالة rand(). و هي تسمح باختيار رقم عشوائي لكن نحن هنا نريد رقماً بين 1 و 100، لأننا إن لم نعرف حدودنا سيكون من الصعب التحكم في اللعبة!
للقيام بذلك نكتب التالي: ( لن أطلب منك تخمينها هي أيضاً )
srand(time(NULL));
mysteriousNumber= (rand() % (MAX - MIN + 1)) + MIN;
في السطر الأول الذي بـه srand يسمح بتهيئة مولد الأرقام العشوائية، نعم الأمر صعب قليلاً كما أخبرتك. mysteriousNumber هي متغيرة ستحمل الرقم العشوائي المختار .
التعليمة srand لا يجب أن تشغّل إلا مرة واحدة ( في بداية البرنامج ) ، فوجب وضع srand مرة واحدة في البداية أكرر، مرة واحدة فقط . بعدها يمكنك استعمال القدر الذي تريده من الدالة rand() لاختيار الرقم العشوائي. و لكن لا يجب أن يقرأ جهازكم التعليمة srand مرتين ( أكرر مجددا ) .
MAX و MIN هما ثابتان، الأول هو الرقم الأقصى (100) و الثاني هو الرقم الأدنى (1)، و أنصحك بتعريف الثابتين في بداية البرنامج هكذا :
const int MAX = 100, MIN = 1;
- تضمين المكتبات اللازمة :
كي يشتغل برنامجك بشكل صحيح، يجب أن تقوم بتضمين المكتبات stblib و stdio و time ( الأخيرة تستعمل من أجل الأرقام العشوائية )، يجب إذن أن يبدأ برنامجك بالتالي :
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
- يكفي شرحا !
سأتوقف هنا لأنه لو أكملت سأعطيك اللعبة كاملة. لتوليد الأرقام العشوائية اضطررت لإعطائك شفرة مصدرية جاهزة دون أن أشرح كيف تعمل بالضبط. لكن لا يوجد خيار هنا لأنني لا أريد تعقيد الأشياء. تأكّد أنه ستتعلم بعد هذا العمل التطبيقي الكثير من الفاهيم التي ستسمح لك بفهم هذه الأشياء بنفسك.
حسنا لقد شرحت المبدأ و أعطيت صورة عن البرنامج لحظة التشغيل. بعد كل هذا أنت قادر على كتابة البرنامج لوحدك. بالتوفيق !