Code And Play – Version 0.1 Beta


منذ عدة شهور كنت ألعب إحدى الألعاب الإستراتيجية .. و لفت نظري (أو بمعنى أصح كان يضايقني) أن الفريق الذي أتحكم به لا أستطيع السيطرة عليه بشكل كامل .. فعلى سبيل المثال عندما كان يحدث هجوم من الفريق الأخر (و الذي يتحكم فيه الذكاء الأصطناعي) كان علي أن أقوم بتوجيه كل جندي إلى مساره بنفسي لإني إذا تركته سيتحكم الحاسب به أوتوماتيكياً و ربما سار في طريق أخر يفسد الخطة و يمكن أن يهرب !! .. المهم أن مسألة التحكم الكامل في اللعبة بدقة كان هو ما أريده و لكنه لا يوجد بالشكل الذي ينبغي في الألعاب خاصة في الألعاب الإستراتيجية ..

حينها خطرت ببالي فكرة تحل هذا المشكلة و هي أن اللاعب يقوم بكتابة أوامر و أكواد تصف كيف ستتصرف كائنات اللعبة و أثناء اللعبة يتم تنفيذ تلك الأوامر .. بدأت في تنفيذ لعبة بهذا المفهوم الذي ربما يكون جديداً أو على الأقل غير معروف في عالم الألعاب .. و بعد أن قمت بإستشارة إحدى الدكاترة في الجامعة عدلت المسار قليلاً .. و بعد بضعة أسابيع من العمل المتواصل خرج الإصدار التجريبي الأول إلى النور !

هذا الإصدار ليس لعبة بل هو برنامج يتيح للاعبين أن يقوموا بكتابة أكوادهم و إرسالها إلى خادم يقوم بعمل مباريات بين تلك الأكواد و تسجيل النتائج و هكذا .. إنظر إلى هذه الصورة :

هذه أول لعبة من هذا النوع . قراءة المزيد…

مدخل إلى محاكاة تصميمات الهاردوير


بدأنا في الدرس السابق بعمل مثال بسيط بلغة الـ VHDL و هو وحدة المعالجة و المنطق Arithmetic Logic Unit – ALU و قد قمنا بإستعراض بعض الأشياء التي تظهر في التقرير الذي يخرجه لنا برنامج الـ Xilinx ISE Webpack عن التصميم الذي قمنا به من مساحة و التأخير الذي يستغرقه و الطاقة المستهلكة و غير ذلك .. و قد أجلنا الكلام عن محاكاة التصميم إلى هذا الدرس

تخيل أنك بيدك الآن دائرة تكاملية Integrated Circuit تقوم بإختبارها .. ستقوم أولاً بتوصيلها مثلاً على لوحة إختبار Bread Board .. ربما تقوم بتوصيل بعض الدوائر التكاملية الأخرى أو لا تقوم بذلك حسب الإختبار الذي تريده .. ربما نجد معك أيضاً أثناء الإختبار جهاز راسم الإشارات Oscilloscope  لتشاهد الإشارات الداخلة و الخارجة .. و ربما يكون بجانبك ورقة تكتب فيها ملاحظاتك و قياساتك .. و سوف نسمي هذا كله مقعد الإختبار Test Bench .. تذكر أننا في الدرس الأول و الثاني شددنا على مفهوم أن اللغات الوصفية و التي منها لغة الـ VHDL لا تخاطب الهاردوير و إنما تخاطب الذي سيقوم بتصميم الهاردوير .. و بما أننا في هذه المرة لن نقوم بتصميم الهاردوير و إنما سنقوم بإختبار الهاردوير .. فسوف نحتاج أيضاً إلى لغة وصفية تصف للرجل الجالس على مقعد الإختبار Test Bench ماذا سيفعل بالضبط لكي يقوم بإختباره .. فسوف نصف له كيف سنقوم بتركيب الدوائر التكاملية التي صممناها (مثل وحدة المعالجة و المنطق في الدرس السابق) و نصف له أين يقوم بتوصيلها و هل سيقوم بتوصيل بعض الدوائر الأخرى أم لا و هكذا .. ثم نصف له بعد ذلك خطوات التجربة .. هل سيقوم مثلاً بإدخال بعض المدخلات لوحدة المعالجة و المنطق ثم يقوم بإختبار هل النتيجة ستخرج كما ينبغي أم لا و ما هي الأشياء التي سوف يجربها و كيف سيتصرف عند رؤية أي مخرج من المخرجات و هكذا .. في قائمة Hierarchy التي في أيمن الشاشة قم بتحديد الملف الذي وضعت فيه كود وحدة المعالجة و المنطق ALU و إضغط عليه بالزر الأيمن و إختر New Source ثم قم بتحديد VHDL TestBench : و قم بتسمية الملف الجديد بأي شئ ثم إضغط Next حيث ستقوم بإختيار الوحدة التي تريد أن تقوم بعمل محاكاة و إختبار لها .. قراءة المزيد…

التصنيفات :شروحات الوسوم:, , , ,

المثال العملي 1 : وحدة المعالجة و المنطق


منذ فترة قمنا بوضع بعض الدروس حول تصميم الهاردوير بإستخدام لغة الـVHDL .. و الآن لنعد لإستكمالها ..

تحدثنا في الدروس السابقة عن تعريف لغة الـVHDL و لماذا نحتاج إليها و كيف ستفيدنا في تصميم الهاردوير .. و هذه المرة سنقوم بكتابة مثال عملي بتلك اللغة .. سيكون الكلام هذه المرة عن وحدة المعالجة و المنطق المعروفة بالـALU و التي هي إختصار لـArithmetic Logic Unit .. و هي وحدة من أهم الوحدات في المعالج Processor .. و هي التي تقوم بعمليات الجمع و الطرح و الضرب و سائر العمليات الرياضية و العمليات المنطقية .. هذه الوحدة لها مدخلان يكونان هما المدخلان الذان نريد أن نقوم بعمل العملية الرياضية أو المنطقية عليهما .. و هناك مخرج من المخرجات به ناتج العملية .. فمثلاً قد يكون الناتج هو حاصل ضرب المدخلين أو مجموعهما أو الفرق بينهما و غير ذلك من العمليات .. و هناك مدخل ثالث يحدد لنا ما هي العملية التي نريد .. فعلى سبيل المثال إذا كان هذا المدخل بقيمة 000 فهذا معناه أنه سيقوم بعملية جمع .. و إذا كان 001 فهذا معناه أنه سيقوم بعملية طرح و غير ذلك بحسب الذي نريد .. و الآن إنظر إلى فقرة الـVHDL التالية :

entity ALU is Port (

A : in  STD_LOGIC_VECTOR (31 downto 0);

B : in  STD_LOGIC_VECTOR (31 downto 0);

ALU_OUT : out  STD_LOGIC_VECTOR (31 downto 0);

Control : in  STD_LOGIC_VECTOR (2 downto 0));

end ALU;

هنا قمنا بتعريف الوحدة بمداخلها و مخارجها .. هناك مدخلان بطول 32bits و هما A و B و هما المدخلان الذان سنقوم بعمل العملية الرياضية أو المنطقية عليهما .. و المخرج ALU_OUT بنفس الطول أيضاً .. و هناك المدخل Control الذي سيقوم بتحديد العملية التي سنقوم بها .. و طول هذا المدخل يتم تحديده بناءاً على عدد العمليات التي ستقوم وحدة المعالجة و المنطق بها .. فعلى سبيل المثال إذا كانت ستقوم بـعملياتان فقط فيكفي أن يكون الـControl بطول بت واحد .. و إذا كانت ستقوم بأكثر من عمليتين إلى أربع عمليات فسيكون طول الـControl بـ2bits إذ أن الإحتمالات هي 00 و 01 و 10 و 11 فقط .. و هكذا .. و في هذه الحالة سنقول مثلاً أننا نريد أن نقوم بعمل ثمانية عمليات فقط و لهذا جعلنا طول الـControl بـ3bits .. بالطبع فإن وحدة المعالجة و المنطق ليست هذا فقط .. بل يوجد بها في الواقع أكثر من ذلك و لكننا سنكتفي بهذا للتبسيط ..

و بعد أن قمنا بتعريف الوحدة .. سنقوم الآن بتوصيف سلوكها الداخلي .. إنظر إلى الفقرة القادمة : قراءة المزيد…

التعريف بـXilinx و لغة الـVHDL الوصفية للهاردوير


تحدثنا في السابق عن مفهوم اللغات الوصفية للهاردوير Hardware Description Languages (راجع مقدمة إلى اللغات الوصفية للهاردوير)  .. و الآن ندخل إلى أول درس عملي سنقوم بتنفيذه عن طريق اللغات الوصفية للهاردوير .. و سنختار من بين اللغات الوصفية لغة الـVHDL .. و التي هي إختصار لكلمة VHSIC Hardware Description Language .. و أما VHSIC فتعني Very High Speed Integrated Circuit .. و يوجد غيرها الكثير من اللغات الوصفية كالـVerilog و غيرها ..

تذكر .. هدفنا الذي نريد أن نصل إليه هو أن نقوم بتصميم الدوائر الرقمية و الهاردوير بطريقة سهلة بدلاً من القيام بعمل جداول طويلة جداً قد تصل إلى المئات و الألاف من المعطيات .. و ذلك عن طريق اللغات الوصفية التي ستتحول بعد ذلك إلى دوائر رقمية .. و الذي سيقوم بتحويلها برنامج يشبه إلى حدٍ ما المترجم Compiler الذي سيتخدم في اللغات البرمجية ..

البرنامج الذي سوف نقوم بإستخدامه يسمى ISE WebPACK وهو من إنتاج شركة Xilinx و هي شركة ذات شهرة في هذا المجال ..

إدخل إلى هذا الرابط :

http://www.xilinx.com/support/download/index.htm

و قم بتحميل الإصدار الأخير .. و إنتبه إلى أن النسخة التي ستقوم بتنزيلها ستفوق الـ3 جيجا بايت .. و بعد أن تقوم بتثبيتها ستأخذ ما يزيد على الـ10 جيجا بايت ..

قراءة المزيد…

مقدمة إلى اللغات الوصفية للهاردوير


قانونٌ واحد جمع بين معظم التطورات في شتى مجالات الهندسة .. يمكن أن تلحظ سريان هذا القانون بسهولة في العديد من التطورات و الإختراعات .. يقول هذا القانون بأنك إذا وجدت عملاً روتينياً مكرراً يقوم به الإنسان بشكل متكرر و كانت التكنولوجيا التي عندك تسمح لك بأن تجعل الآلة تعمل هذا العمل بدلاً من الإنسان فقم بعمل تلك الآلة .. و إذا كانت التكونولوجيا التي عندك لا توفر لك هذا فقم بتطويرها حتى تصل بها إلى هذا المستوى

و إذا دققت النظر في معظم الأشياء – إن لم يكن كلها – ستجد أن هذه القاعدة تنطبق عليها .. فعلى سبيل المثال .. الموظف الذي يقوم بإدارة قواعد البيانات .. كان يحتفظ بالعديد من الدفاتر و الأوراق و يقوم بالبحث فيها و ترتيبها .. عندما زاد الأمر عن حده و وجدنا أننا بحاجة إلى العديد من الموظفين .. و لهذا الأمر تم عمل برامج إدارة قواعد البيانات و خوارزميات البحث Searching Algorithms إلى غير ذلك .. فليس الجديد أن توجد قواعد بيانات و إنما الجديد هو من الذي سيقوم بها .. هل الإنسان أم الآلة ..  فالإنسان دائماً ما يمل من تكرار العمليات الروتينية التي لا تفكير فيها ولا إبداع و يميل أكثر إلى إعمال عقله و ليس إلى تعطيله .. و البحث وسط الأوراق عملية تعطل العقل و تجعل الإنسان مجرد آلة تعمل .. فلماذا لا نجعل الآلة تعمل هذا العمل من البداية .. و يدخل في هذا الأمر العديد من الأشياء مثل الروبوتات Robotics و الذكاء الإصطناعي Artificial Intelligence و الشبكات Networking و الإتصالات و غير ذلك ..

و لم يقتصر الأمر على تسهيل حياة المستخدم النهائي End User فحسب .. بل تعدى الأمر إلى المصممين أيضاً .. فبعض التصميمات تحتاج إلى العديد من المعادلات الرياضية المعقدة مما يجعلنا نحتاج إلى عمل بعض البرامج التي تقوم بحل المعادلات الرياضية و تحليلها .. فالمصمم هو الأخر يريد أن يستغل وقته في الإبداع و إستخراج أفضل الأفكار و ليس في حل معادلات رياضية روتينية تقليدية تحتاج إلى الوقت أكثر من إحتياجها إلى العقل .. و يدخل في هذا الأمر برامج تصميم الدوائر الإلكترونية و الكهربائية و برامج المحاكاة للأنظمة الكهربائية و الميكانيكية و أنظمة التحكم الآلي إلى غير ذلك ..

قراءة المزيد…

التطبيق الأول – عمل لعبة المضرب و الطوب البسيطة بإستخدام بمكتبة الرسوم المفتوحة OpenGL


‫تطبيق (أ)
‫لعبة المضرب و الطوب

لعبة المضرب و الطوب من أشهر الألعاب و أبسطها على الإطلاق. و العديد من المبرمجين قد قاموا بعمل تلك اللعبة. بل‬ ‫لا أبالغ حين أقول أن أغلب مبرمجي الألعاب قد قاموا بعمل هذه اللعبة مرة واحدة على الأقل كبداية لرحلتهم في برمجة الألعاب. و مع إختلاف الأفكار و الأشكال و‬ ‫الطرق و الأساليب إلا أن الأصل والفكرة واحدة. إنظر إلى تعدد صور اللعبة و الإضافات التي عليها رغم أن فكرتها واحدة:
فهل يمكننا أن نقوم بلعبة مماثلة بما قد عرفناه في الفصول السابقة ؟؟ قراءة المزيد…
التصنيفات :شروحات

الدرس الرابع في برمجة الألعاب بإستخدام OpenGL


‫الفصل الرابع‬
‫إستقبال مدخلت مؤشر الفأرة

بعد أن قمنا بإستقبال مدخلات لوحة المفاتيح لنقم الآن بإستقبال مدخلات مؤشر الفأرة. و لدينا ثلاثة أشياء نريد‬ معرفتهما حين نستقبل مدخلات الفأرة. فأما الأول فهو مكان المؤشر بالنسبة لمحور السينات و الصادات ‪ X‬و ‪ Y‬و الثاني هو ما‬ إذا كانت حركة المؤشر مجرد حركة فوق النافذة بدون ضغط على أي زر أم أنها نوع من السحب ‪) Drag-Drop‬مثل أن‬ أقوم بالإمساك بكائنٍ ما بمؤشر الفأرة ثم أحركه عدة خطوات ثم أرفع يدي من على الزر كأني ألقيه في المكان الذي حركته‬ إليه). و الأمر الثالث هو أي الأزرار تم ضغطتها و هل رفع المستخدم إصبعه من على الزر أم مازال يضغط. كل تلك الشياء نريد‬ أن نفحصها أثناء اللعبة لكي نتعامل مع المستخدم و نحن في مكتبة جلوت عندنا العديد من الدوال بها العديد من البارامترات التي‬ تظهر لنا هذه الأشياء. و سوف نتدرج في شرح هذه الدوال عن طريق الأمثلة من البسيط إلى الأعقد ..
التصنيفات :شروحات
%d مدونون معجبون بهذه: