تعلم التقنيات المتقدمة الخطوات التمهيدية كتابة لعبة بسيطة
لغة أكشن سكربت مبنية على الجافا وتستخدم أنظمة حزم برمجية شبيهة للغاية بالجافا. تتيح لك تلك الحزم بعملية تخزين المتغيرات (Variables) والثوابت (Constants) والدوال البرمجية (Functions) وغيرها من المعلومات، في ملفات منفصلة، ثم تتم عملية استيراد لتلك الملفات في برنامجك (اللعبة). تستفيد من تعلم كيفية الاعتماد على هذه الحزم البرمجية إذا رغبت في استخدام حزمة أعدها مبرمج آخر مباشرة في لعبتك، دون بدء العمل عليها من الصفر، وهو ما يسهل عملية إنشاء اللعبة.  		 تعلم كيفية استدعاء الدوال "ميثود" (Method) في الجافا لمزيد من المعلومات حول كيفية التعامل مع الحزم في الجافا. إذا كنت تعمل على لعبة تحتوي على العديد من الصور والمقاطع الصوتية، فمن الضروري أن تعتمد على هيكلة معينة لتنظيم مجلدات العبة، أو ما تُسمى "بنية المجلدات" (Folder Structure). يساعدك ذلك على تخزين العناصر المختلفة المستخدمة في اللعبة، وكذلك حفظ الحزم البرمجية المختلفة التي تحتاج إلى استدعائها.  		 أنشئ مجلدًا أساسيًا للمشروع (Base Folder). في هذا المجلد، يجب أن يوجد مجلد خاص بالصور والتصميمات باسم "img"، ومجلد للصوتيات باسم "snd" ومجلد مصدري يحتوي على كل الحزم والأكواد البرمجية الخاصة باللعبة باسم "src".  أنشئ مجلدًا باسم "Game" في المجلد المصدري "src" لتخزن به الملفات الثابتة الخاصة باللعبة.  هيكل المجلدات سابقة الذكر ليس إلزاميًا لكي تعمل اللعبة بطريقة صحيحة، لكنه مجرد مقترح تنظيمي يسهل من خطوات العمل على إنشاء اللعبة ويضمن لك تجميع وتنظيم المواد والمحتويات بطريقة سهلة، خاصة بالحديث على المشاريع الضخمة. بالنسبة للعبة البسيطة سابقة الذكر في الخطوات بالأعلى، فلن تحتاج إلى إنشاء أية مجلدات دلائل على الأغلب. ستتحول اللعبة التي لا تحتوي على صوتيات أو موسيقى إلى شيء ممل ومزعج للاعبين وسوف يبادرون بإغلاقها على الفور، بينما على النقيض يمكن لملفات الصوت المُختارة بعناية أن تكون جزءًا من نجاح اللعبة. يمكنك إضافة الأصوات إلى الكائنات "Objects" للألعاب الفلاشية بواسطة برنامج أدوبي أنيمات من خلال أداة الشرائح (Layers). اطلع على الدروس التعليمية التي تشرح لك كيفية استيراد الملفات الصوتية في برنامج الفلاش. في حالة احتوت اللعبة على الكثير من القيم التي ستظل ثابتة ولن تتغير على مدار اللعبة ككل، فيمكنك أن تُنشئ ما يُسمى بملف القيم الثابتة الذي يُخزن به كل هذا النوع من القيم في مكان واحد، ومن ثم تقدر بسهولة فيما بعد على استدعاء تلك القيم. يفترض أن يضم هذا النوع من الملفات القيم، مثل: الجاذبية وسرعة اللاعب وغيرها من القيم الأخرى التي لا تتغير وتحتاج لاستدعائها بشكل متكرر في مختلف أجزاء برمجة اللعبة.   لإنشاء ملف القيم الثابتة، يجب أن تقوم بوضعه في مجلد بداخل المشروع الذي تعمل عليه، ثم تقوم باستيراده على هيئة حزمة. إذا احتجت لوضع القيم الثابتة في ملف، فيجب أن تضعه في المجلد الهيكلي الخاص باللعبة، ثم لاستيراده، يمكنك مثلًا أن تستخدم الكود التالي:    package { 	import Game.*; } لن تجد رغبة من غالبية المبرمجين والمطورين لنشر الكود الخاص بألعابهم في معظم الحالات، لكن في المقابل يوجد العديد من المشروعات التعليمية والمشاريع مفتوحة المصدر التي يُرحب أصحابها بمشاركة كود اللعبة وملف الإعداد الخاص بها مع المهتمين. ابحث عن تلك الألعاب واطلع على كيفية كتابة الكود وطريقة تفاعله مع الكائنات والعناصر المُدرجة في اللعبة. إنها واحدة من أفضل الطرق التي يمكنك من خلالها أن تتعلم المزيد من التقنيات المتقدمة التي تثري خبرتك وتساعدك على تطوير مهاراتك في صناعة ألعاب الفلاش. قبل البدء في مرحلة البرمجة (كتابة كود اللعبة)، يفضل بالطبع أن يكون لديك فكرة تقريبية حول ما أنت مقبل على القيام به. بمعنى آخر: اعرف كيف سيكون شكل اللعبة وما هي تحديدًا. لا غنى عن ذكر أن الألعاب الفلاشية هي نوع فائق البساطة من ألعاب الفيديو، على مستوى البرمجة والتحديات والرسوميات، لذا من الضروري أن تركز على صناعة لعبة تضم قدرًا بسيطًا من ميكانيكا ألعاب الفيديو (وهو المصطلح الذي يُشير إلى مجموعة القواعد والطرق التي يقدر من خلالها اللاعب أن يتفاعل مع اللعبة). اسعَ لأن يكون لديك تصنيف أساسي للعبة وتحديد مجموعة الآليات والقواعد المبدئية الخاصة باللعبة، قبل البدء في إعداد النموذج المبدئي "بروتوتايب" من اللعبة. اطلع على مقال كيفية صنع لعبة فيديو على موقع ويكي هاو بالعربية لمعرفة المزيد من التفاصيل حول مراحل التخطيط لإنشاء لعبة فيديو. تتضمن ألعاب الفلاش الشائعة على الأنواع التالية:   ألعاب الجري اللا نهائي: يتم في هذا النوع من الألعاب تحريك شخصية اللاعب بشكل تلقائي على أن يكون اللاعب مسؤولًا عن القفز من فوق العقبات أو التفاعل مع اللعبة بشكل أو آخر. لا يُطلب من اللاعب كذلك سوى استخدام زر أو زرين تحكم فقط لا غير للتحكم أثناء اللعب. ألعاب القتال والشجاعة: تتم الحركة عادة في هذا النوع من الألعاب على شكل تمرير جانبي وتكون مهمة اللاعب هي هزيمة الأعداء الذين يظهرون له في طريقه لكي يقدر على الاستمرار في المزيد من مستويات اللعبة. يتاح للاعب خيارات أكبر فيما يخص التحريك والتحكم في الشخصية التي يلعب بها لكي يقدر بدوره على قتال وهزيمة الأعداء الذين يعترضون طريقه. الألغاز: يُطلب من اللاعب في هذه الألعاب أن يحل مجموعة من الألغاز التي تتدرج في الصعوبة عادة من مستوى لآخر، ويمكن أن يكون اللغز بأي شكل ومن أي نوع، بدءًا من عملية مطابقة ثلاثة أشكال متشابهة بجوار بعضهم البعض، كما هو الأمر مع لعبة "بيجيويلد/ الجواهر" الشهيرة، وليس انتهاءً بأشكال أكثر تعقيدًا من الألغاز كتلك الموجودة في ألعاب المغامرات متعددة المستويات. ألعاب تقمص الأدوار (القائمة حول شخصية): تركز هذه الألعاب على تطور الشخصية التي يتحكم بها اللاعب والتطور الذي يحدث لها على مدار أقسام اللعبة المختلفة، خاصة مع تغيير البيئات المحيطة ونوعيات الأعداء المختلفة التي تظهر لك. تختلف ميكانيكا القتال (أو آلية الحركة التي تمكنك من القتال) بشكل كبير من لعبة تقمص أدوار للعبة أخرى، لكن أغلبها تعتمد على عملية تناوب الأدوار. لاحظ أن هذه النوعية من الألعاب تكون أكثر تعقيدًا بكثير في عملية البرمجة مقارنة بألعاب الحركة البسيطة الأخرى. تتميز الألعاب الفلاشية عندما تكون ألعاب ثنائية الأبعاد أكثر. لا يوجد ما يمنع نظريًا أن تصنع لعبة ثلاثية الأبعاد بصيغة الفلاش، لكنها عملية متقدمة للغاية وتحتاج إلى معرفة هائلة بلغة البرمجة، وقد تحتاج إلى فريق عمل كبير وساعات متواصلة من العمل كذلك. تظل القاعدة أن أكثر الألعاب الفلاشية الناجحة في الألعاب ثنائية الأبعاد.  تكون اللعبة فعّالة أكثر عندما تكون مخصصة للعب لفترات قصيرة. لاحظ أن جمهورك المستهدف من لاعبي الألعاب الفلاشية يلجؤون لتلك الألعاب عندما يتاح لهم وقت فراغ قصير، كما هو الأمر في وقت الراحة بين ساعات العمل أو الدراسة، وهو ما يعني أن وقت استخدام اللعبة قد لا يزيد عادة عن 15 دقيقة على الأكثر. (بالإنجليزية: ActionScript3 - AS3). تتم برمجة الألعاب الفلاشية بواسطة لغة البرمجة أكشن سكربت 3، وستحتاج بدورك إلى امتلاك معرفة جيدة بأساسيات عمل هذه اللغة لكي تقدر على عمل لعبة فلاش ناجحة. الخبر السعيد أنك قادر بالفعل على عمل لعبتك الفلاشية الأولى البسيطة من خلال امتلاك القدر الأدنى من فهم كيفية التعامل مع لغة الأكشن سكربت 3 وكتابة أكوادها البرمجية.  يوجد العديد من الكتب التعليمية التي تشرح لك أساسيات تعلم لغة أكشن سكربت. يمكنك الشراء من خلال مكتبتك المحلية المتخصصة في مجال الكتب التقنية، كما ننصح بالتفكير كذلك بالشراء عبر الإنترنت من خلال خدمات مثل أمازون. بعيدًا عن الكتب، يوجد طيف واسع من الدروس النصية والفيديو والمقالات التعليمية المتاحة عبر الإنترنت لتعليم أكشن سكربت 3. (بالإنجليزية: Adobe Animate)، وأسمائه القديمة "أدوبي فلاش بروفيشنال" أو "مايكروميديا فلاش". ستحتاج لدفع تكلفة مالية للحصول على هذا البرنامج، لكنه في المقابل يظل الأداة البرمجية الأفضل التي تمكنك من صناعة الملفات الفلاشية، ومن بينها الألعاب كذلك. توجد خيارات أخرى متاحة من بينها برمجيات مفتوحة المصدر، لكنها تفتقر عادة إلى ميزة التوافق (القدرة على العمل في ظروف مختلفة دون التعرض لمشكلات) أو أنها تستغرق وقتًا أطول لإتمام نفس المهام.  لن تحتاج بشكل عام إلا إلى نسخة من برنامج "أدوبي أنيمات" أو "فلاش بروفيشنال" للبدء في إنشاء الألعاب الفلاشية. أثناء إنشائك للعبة بسيطة بواسطة لغة البرمجة أكشن سكربت 3 (AS3)، ستجد أنك قادر على استخدام مجموعة مختلفة من بنية/ هيكل الأكواد. يوجد ثلاثة أجزاء رئيسية في أي كود للأكشن سكربت 3:  		 المتغيرات (Variables): وهي المستخدمة في تخزين بياناتك. يمكن أن تكون البيانات على هيئة أرقام (Numbers) أو كلمات (سلاسل - strings) وكائنات (Objects) وغيرها الكثير. يتم تعريف المتغيرات بواسطة الرمز الكودي var ويجب أن تكون تسميتها عبارة عن كلمة واحدة.    var playerHealth:Number = 100;  // "var" تشير إلى أنك تقوم بتعريف مُتغير // "playerHealth" هو اسم المتغير (صحة اللاعب). لاحظ عدم وجود مسافات بين الكلمتين بالإنجليزية. // "Number" هو نوع البيانات المخزنة في المُتغير؛ أي أنها أرقام // "100" هي القيمة الأولية المُعطاة لهذا المتغير. // يجب أن ينتهي كل سطر في اللغة البرمجية أكشن سكربت بالرمز ";"    مُعالجات الأحداث (Event Handlers): تبحث هذه المعالجات عن حدوث أشياء معينة، وبمجرد حدوثها تخبر بقية أجزاء البرنامج أو اللعبة بذلك. هذا النوع من الكود بالغ الأهمية للتفاهم مع مُدخلات اللاعب وعملية تكرار الكود البرمجي. عادة ما توجه مُعالجات الأحداث الأمر إلى الدوال الوظيفية (Functions).    addEventListener(MouseEvent.CLICK, swingSword);  // "addEventListener()" هو الكود المُعرف لإنشاء المعالج للأحداث // "MouseEvent" هي تصنيف المُدخلات الذي يتم الإنصات  // له واتباع أوامره "الفأرة في هذه الحالة". // ".CLICK" ويقصد به النقر بالفأرة؛ أي الحدث المحدد من داخل // تصنيف حوادث الفأرة (MouseEvent) // "swingSword" هي الدالة التي يتم مناداتها وتنفيذها في حالة  // حدوث أمر الإدخال الخاصة بذلك "الحدث"،  // ويشير الاسم هنا إلى عملية أرجحة السيف.    الدوال (Functions): وهي الأقسام من الكود المخصصة لكلمة مفتاحية يمكنك استدعائها في وقت لاحق لتنفيذ وظيفة معينة. تؤدي الدوال دورًا كبيرًا على مدار عملية كتابة كود البرمجة الضخم الخاص باللعبة ويمكن أن تحتوي الألعاب المعقدة على مئات الدوال كأقل تقدير. في المقابل، لا تحتاج الألعاب البسيطة إلا إلى عدد بسيط من الدوال. يمكن إدراج الدوال بأي ترتيب في كود اللعبة، فهي في النهاية لن تعمل إلا عندما يتم استدعائها وفق الترتيب المنطقي الذي تختاره لمسار اللعبة.    function swingSword (e:MouseEvent):void; { 	//اكتب الكود الخاص بهذه الدالة هنا بين القوسين }  // "function" هي كلمة التعريف التي تُكتب في أول كتابتك // للكود الخاص بأي دالة ترغب في إضافتها إلى اللعبة.  // "swingSword" هو اسم الدالة ويشير إلى أنها الدالة الخاصة // بعملية أرجحة السيف. // "e:MouseEvent" وهو معامل مُضاف يشير إلى أن الدالة // يتم استدعائها من خلال عملية الإنصات (اتباع أمر) حدث معين. // ":void" هي القيمة التي يتم إرجاعها بواسطة الدالة.  // في حالة لم توجد قيمة مُرجعة يتم إعادتها بواسطة  // الدالة، فاستخدم :void. تستخدم لغة أكشن سكربت في إحداث تغييرات على الكائنات في برنامج الفلاش. تحتاج إلى إنشاء كائنات بداخل اللعبة يقدر اللاعب على التفاعل معها، وإلا فما فائدة اللعبة من الأساس!؟ قد تجد في بعض الدروس التعليمية أنه يتم الإشارة إلى الكائنات بمصطلحات أخرى، مثل: أشباح (sprites) أو الممثلون (Actors) أو مقاطع الفيلم (Movie Clips). يمكن أن يكون الكائن أي شكل تريده، وله عملية تصميم خاصة به، لكننا في هذا الدليل المبسط سوف ننشئ كائن على شكل مستطيل.  		 افتح برنامج "فلاش بروفيشنال" أو "أدوبي أنيمات" إذا كان غير مُشغل على جهازك بعد. أنشئ مشروع أكشن سكربت 3 جديد من خلال قائمة جديد في البرنامج.  انقر على أداة رسم المستطيلات من خلال لوحة الأدوات. يختلف مكان تلك اللوحة بناءً على إعدادات التهيئة الخاصة بالبرنامج، لكنك ستقدر على الوصول إليه بسهولة على الأغلب. ارسم شكل مستطيل بواسطة تلك الأداة في نافذة المشهد (Scene Window).   حدد ذلك المستطيل بواسطة أداة التحديد. تأكد من تحديد الكائن (شكل المستطيل في هذه الحالة) الذي رسمته للتو، ثم افتح قائمة "التعديل" (Modify) واختر "التحويل إلى رمز". يمكنك بدلًا من ذلك أن تضغط على اختصار F8 من لوحة المفاتيح. في نافذة "التحويل إلى رمز"، يمكنك أن تمنح الكائن اسمًا مميزًا يسهل من عملية التعرف على الغرض من ذلك الكائن، كأن تُسميه "enemy" أي العدو في اللعبة.  		 استخدم نافذة الخصائص. في أعلى النافذة، سوف تجد حقل نصي فارغ تحت تسمية اسم المثيل "Instance name"، وهي التسمية التي تظهر عندما تتحرك بمؤشر الفأرة فوق الحقل النصي الفارغ. تأكد من تسمية هذا المثيل بنفس الاسم الذي اخترته لاسم الكائن بعدما حولته إلى رمز (enemy). لقد أنشأت بهذه الطريقة اسمًا مميزًا للكائن يمكن التفاعل معه عبر أكواد أكشن سكربت 3.  يكون كل مثيل (Instance) بمثابة الكائن المنفصل الذي يمكن التأثير عليه بواسطة الكود؛ أو بتعريف آخر، المثيل هو الحضور الملموس بداخل البرنامج أو اللعبة للكائن. يمكنك أن تنسخ المثيل المُنشئ بالفعل عدة مرات عن طريق الضغط على تبويب المكتبة (Library) وسحب ذلك المثيل إلى نافذة المشهد. في كل مرة تضيف فيها مثيل جديد، سوف يتم تغيير الاسم لتمييز أنه كائن مشابه لكن منفصل عن سابقيه، كأن يكون مثلًا: ("enemy" و "enemy1" و "enemy2"... إلى آخره).  في كل مرة تحتاج فيها إلى الإشارة إلى ذلك الكائن في كود اللعبة، يمكنك ببساطة أن تستخدم اسم المثيل، وفي هذه الحالة هو "enemy". بعد أن قمنا بعمل المثيل في الخطوات السابقة، يمكنك الآن أن تتحكم في تغيير خصائصه عن طريق برمجة أكشن سكربت 3. يُمكنِّك ذلك من تحريك الكائن حول الشاشة وتغيير حجمه وغير ذلك. يمكنك تغيير تلك الخصائص عن طريق كتابة اسم المثيل متبوعًا بنقطة "." ثم أتبعها بالخاصية ثم القيمة، كما سيلي شرحه فيما يلي:  		  enemy.x = 150; يؤثر ذلك على موقع كائن العدو (enemy) على المحور السيني "إكس".   enemy.y = 150; يؤثر ذلك على موقع كائن العدو (enemy) على المحور الصادي "واي". يتم قياس ذلك المحور من أعلى نافذة المشهد.   enemy.rotation = 45; يتم تدوير كائن العدو (enemy) 45 درجة في اتجاه عقارب الساعة.  enemy.scaleX = 3; يتم تمديد عرض كائن العدو (enemy) مضروبًا في 3. ينتج عن كتابة رقم سالب (-) انكماش الكائن.   enemy.scaleY = 0.5; يضغط طول الكائن إلى نصفه. يؤدي هذا الأمر إلى إرجاع القيمة الحالية لكائن معين، وهي عملية مهمة ومفيدة لتحديد ما إذا كان كل شيء في اللعبة يسير على نحو صحيح أم لا. قد لا تكون مضطرًا لإدراج أمر التتبع في الكود النهائي للعبة، لكنه يظل خيارًا متاحًا بالغ الفائدة في عمليات اكتشاف الأخطاء وتصحيحها. الآن أصبحت على معرفة مبدئية لا بأس بها بالدوال الأساسية المستخدمة في صناعة الألعاب. يمكنك أن تستفيد من ذلك في عمل لعبة فلاش بسيطة يتم فيها تغيير حجم الكائن العدو (enemy) في كل مرة تضغط عليه فيها، إلا أن تُنتهك قواه ويفقد صحته نهائيًا.   var enemyHP:Number = 100;  // يتم تعيين صحة كائن العدو على هيئة متغير بقيمة 100 في البداية.  // إتش بي هو اختصار للصحة في كتابة أكواد الألعاب. var playerAttack:Number = 10;  // يتم تعيين متغير يحدد قوة هجوم اللاعب عندما  // يضغط على (يهاجم) كائن العدو. enemy.addEventListener(MouseEvent.CLICK, attackEnemy);  // من خلال إضافة تلك الدالة مباشرة إلى كائن العدو في اللعبة، // يتم تفعيل الدالة فقط بالضغط على الكائن نفسه فقطـ // وليس في أي مكان آخر في الشاشة.  setEnemyLocation();  // يتم استدعاء الدالة التالية للتحكم في مكان وحركة كائن العدو // على الشاشة. يتم تطبيق الدالة عندما تبدأ اللعبة function setEnemyLocation ():void {  enemy.x = 200;   // حرك كائن العدو بمقدار 200 بكسل من يسار الشاشة.   enemy.y = 150;   // حرك كائن العدو للأسفل بمقدار 150 بكسل من أعلى الشاشة.   enemy.rotation = 45;   // قم بعملية تدوير للكائن العدو بمقدار 45 درجة في اتجاه عقارب الساعة.   trace("enemy's x-value is", enemy.x, "and enemy's y-value is", enemy.y);   // يعرض لك الموقع الحالي لكائن العدو لاستخدامه في عمليات تصحيح الخطأ.  }   function attackEnemy (e:MouseEvent):void  // يُنشئ ذلك دالة "الهجوم" التي يتم تفعيلها عندما يتم الضغط على كائن العدو.  {  enemyHP = enemyHP - playerAttack;   // اطرح قيمة الهجوم من قيمة صحة كائن العدو  // لينتج عن ذلك قيمة صحة جديدة لكائن العدو  enemy.scaleX = enemyHP / 100;   // غيّر عرض كائن العدو بناءً على قيمة متغير "الصحة" الجديد  // يتم قسمته على 100 لإعادة قيمته إلى عدد عشري.   enemy.scaleY = enemyHP / 100;   // غيّر طول كائن العدو بناءً على قيمة متغير "الصحة" الجديد   trace("The enemy has", enemyHP, "HP left");   //تتبع واستخرج مقدار صحة الكائن الباقية } ما أن تنتهي من عملية إعداد الكود الخاص باللعبة، يمكنك الآن أن تجرب تشغيل اللعبة. انقر على قائمة التحكم (Control) واختر "اختبار الفيلم" (Test Movie). سوف يبدأ تشغيل اللعبة ويمكنك ان تضغط على كائن العدو لتغيير حجم اللعبة. سوف تظهر مُخرجات التتبع من خلال نافذة "المُخرجات" (Outputs).
تعلم كيفية عمل الحزم البرمجية (Packages). كوّن المجلدات الخاصة بالمشروع. أضف الأصوات إلى اللعبة. أنشئ ملف القيم الثابتة (Constant File). اطلع على ألعاب المبرمجين الآخرين. صمم اللعبة. اعرف نوعية الألعاب المتناسبة أكثر مع الفلاش. تعرف جيدًا على لغة البرمجة "أكشن سكربت 3". حمل برنامج "أدوبي أنيمات". تعرف على وحدات البناء الأساسية لكود أكشن سكربت 3. أنشئ كائن (Object). عيِّن الخصائص المميزة للكائن. تعلم كيفية تغيير خصائص المثيل. اختبر أمر التتبع trace(). اصنع لعبة بواسطة المعلومات سابقة الذكر. جرب اللعبة.
https://www.wikihow.com/Make-a-Flash-Game https://www.wikihow.com/Make-a-Flash-Game https://www.wikihow.com/Make-a-Flash-Game
Learning Advanced Techniques Starting the Process Writing a Basic Game