0 التعليقات

 الذكاء الاصطناعي وتحولات سوق العمل: تهديدات مستقبلية وفرص مشروطة

يشهد العالم المعاصر موجة تكنولوجية غير مسبوقة، تمثّلت في التطور المتسارع للذكاء الاصطناعي (AI)، الذي بات يتغلغل في مختلف قطاعات الحياة الاقتصادية والاجتماعية والمهنية. وإذا كان يُنظر إلى الذكاء الاصطناعي باعتباره محركًا أساسيًا للتقدم والابتكار، فإن وجهه الآخر يطرح تهديدات حقيقية على مستقبل العمل، خصوصًا في الدول النامية والناشئة. تزداد المخاوف من أن تؤدي هذه التحولات إلى اختفاء الملايين من الوظائف، وتوسيع فجوة التفاوت الاقتصادي والاجتماعي بين الشمال والجنوب. ويهدف هذا المقال إلى تحليل أثر الذكاء الاصطناعي على سوق العمل من خلال قراءة نقدية وتحليلية لمآلاته المحتملة، واستشراف تداعياته على المجتمعات الهشة.
1. الذكاء الاصطناعي كعامل لإعادة تشكيل سوق العمل
لقد تجاوز الذكاء الاصطناعي منذ سنوات مرحلة التجريب إلى مرحلة التشغيل الواسع النطاق في القطاعات الإنتاجية والخدماتية، بدءًا من التصنيع الآلي، مرورًا بالتجارة الإلكترونية، وصولًا إلى مجالات التعليم والصحة والقضاء. وتشير التقارير الصادرة عن المنتدى الاقتصادي العالمي (WEF) إلى أن نحو 85 مليون وظيفة قد تُلغى بحلول سنة 2025 بسبب الأتمتة، في حين قد تنشأ نحو 97 مليون وظيفة جديدة تتطلب مهارات مختلفة.
ومع ذلك، فإن هذه "الوظائف الجديدة" لن تكون متاحة بالتساوي، بل ستتطلب مهارات عالية وتدريبًا متخصصًا، ما يعني أن الشعوب الفقيرة والمهمّشة، التي تفتقر إلى بنى تحتية تعليمية وتكنولوجية متقدمة، ستكون الأقل استفادة والأكثر تضررًا من هذه التحولات.
2. تحذيرات من الداخل: بيل غيتس نموذجًا
في هذا السياق، يُعتبر تصريح بيل غيتس – أحد أبرز رواد التكنولوجيا العالمية – دليلًا على جدية المخاطر. فقد صرّح بأن الذكاء الاصطناعي سيؤدي إلى اختفاء عدد هائل من الوظائف التقليدية، ولن تبقى سوى مجالات محدودة، من بينها:
تطوير تقنيات الذكاء الاصطناعي نفسها (AI Engineering)
بعض قطاعات الطاقة ذات الحساسية الأمنية العالية (مثل القطاع النووي)
بعض تخصصات الطب والبحث العلمي
وهذه المجالات، بطبيعتها، لا تُتاح إلا للنخب المؤهلة تقنيًا، وهي نخب تتركز في الدول المتقدمة. أما غالبية سكان العالم، وخاصة في دول الجنوب العالمي، فهم مهددون بالإقصاء من دورة الاقتصاد الحديث، ما لم تُتخذ تدابير استراتيجية عاجلة لإعادة تأهيل القوى العاملة.
3. تداعيات مستقبلية على الدول النامية
تشير المعطيات إلى أن البلدان النامية ستتحمل العبء الأكبر من هذه التغيرات. ويُعزى ذلك إلى عوامل متعددة، منها:
الاعتماد الكبير على الوظائف اليدوية منخفضة المهارة
ضعف أنظمة التعليم المهني والتكنولوجي
نقص الاستثمارات في البحث والابتكار
الهشاشة الاقتصادية والاجتماعية القائمة أصلًا
وهذا قد يؤدي إلى ارتفاع معدلات البطالة، واتساع رقعة الفقر، وتزايد الهجرة غير النظامية، فضلًا عن تصاعد القلق الاجتماعي والسياسي في تلك البلدان، مما قد يسفر عن اضطرابات داخلية أو انهيار بعض الأنظمة الضعيفة.
4. فرص مشروطة ومسؤوليات وطنية ودولية
رغم هذه التحديات، لا ينبغي النظر إلى الذكاء الاصطناعي بمنظور سلبي خالص. إذ يمكن، إذا ما توفرت الإرادة السياسية والرؤية الاستراتيجية، أن يكون هذا التحول فرصة لإعادة هيكلة الاقتصادات وتحقيق قفزات نوعية. من بين الإجراءات المقترحة:
إدماج الذكاء الاصطناعي في مناهج التعليم بشكل مبكر
دعم الابتكار المحلي وتمويل الشركات الناشئة التكنولوجية
تشجيع التعاون بين الدول المتقدمة والنامية في مجال نقل التكنولوجيا
تعزيز الحماية الاجتماعية للفئات المتضررة
هذه الإجراءات تتطلب إرادة سياسية حقيقية، وتعاونًا دوليًا صادقًا، يراعي مبدأ "العدالة التكنولوجية" كشرط أساسي لتحقيق استدامة التنمية.

 
إن الذكاء الاصطناعي لم يعد مجرد طفرة تكنولوجية، بل تحوّل بنيوي في الاقتصاد العالمي وسوق العمل. وإذا لم تُواكب الدول النامية هذه التحولات بخطط واضحة وإصلاحات هيكلية، فإنها مهددة ليس فقط بالتراجع الاقتصادي، بل بالفوضى الاجتماعية الشاملة. إن تحذيرات الخبراء، أمثال بيل غيتس، يجب ألا تُؤخذ باستخفاف، بل تُترجم إلى برامج عمل واقعية، تضمن كرامة الإنسان وحقه في العمل والمعرفة.
فنحن اليوم في زمن يهدد فيه الذكاء الاصطناعي كل ما هو تقليدي وبشري، ما يُحتّم علينا التفكير في سبل الحفاظ على إنسانيتنا، وسط سباق تكنولوجي لا يعترف بالضعفاء ولا ينتظر المتأخرين.


امتحان رخصة السياقة نظري 40 سؤال / جواب :

0 التعليقات
امتحان رخصة السياقة نظري 40 سؤال / جواب :


https://fb.gg/play/737900186606267




امتحان رخصة السياقة نظري  40 سؤال و جواب
جديد 2019
** الهدف من هذا التطبيق هو التعرف على علامات المرور في وضعيات مختلفة وذلك للاستعداد لاجتياز امتحان رخصة السياقة.
** تقديم:
* هل أنت مقبل علي اجتياز امتحان رخصة السياقة بالمغرب وتريد أن تستعد له ؟
* إنك في المكان المناسب، فهذا التطبيق سيمكنك من تعلم و ممارسة قانون السير من خلال بيداغوجية تعليمية فعالة وحديثة، لتكون جاهزا يوم الامتحان.
* مع هذا التطبيق ستتعلم علامات المرور عن طريق سلسلة تتكون من 40 سؤالا.
* ستجد أهم الأسئلة التي سوف تطرح عليك يوم الامتحان في هذا التطبيق.
* هذا التطبيق هو كل ما يلزمك للاستعداد لاجتياز امتحان رخصة السياقة.
* الحصول على رخصة السياقة أصبح سهلا مع هذا التطبيق الرائع.

** المحتوى:
يتم عرض محتوى التطبيق على شكل أسئلة وأجوبة، حيث تبدأ بمشاهدة علامة المرور و الاستماع للسؤال وفهمه جيدا ثم الإجابة عليه.

** الوصف:
يحتوي التطبيق على 40 سؤالا كل سؤال له 4 خيارات، واحد من هذه الخيارات صحيح، والثلاثة الأخرى خاطئة،
- عند النقر على الإجابة الصحيحة تحصل على 1 نقطة
- عند النقر على إجابة خاطئة، تحصل على 0 نقطة،
- وعند الإجابة على الأسئلة كاملة ، أي: 40 سؤالا، يقوم التطبيق بحساب مجموع الإجابات الصحيحة الخاصة بك ويعطيك نقطتك التي حصلت عليها على 40 مباشرة..

** كيفية الاستخدام:
* يستمع المستخدم  للسؤال وفهمه جيدا، ثم يختار الإجابة الصحيحة من بين الخيارات الأربع المتاحة، بعد ذلك يضغط على رقم الجواب الصحيح   و بعد إكماله الأربعين سؤالا يحصل على نقطته الإجمالية.

** المميزات:
* واجهة بسيطة وسهلة الاستخدام.
* أفضل عرض و تصميم.
* تقييم فوري.

والعديد من الميزات سوف تكتشفها بنفسك.
وشكرا.

برنامج إدارة المستودع والمبيعات

0 التعليقات

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

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

- تصدير الفواتير على صيغة ملف إكسل.
- التحكم في شكل وتصميم الفاتورة.
- استيراد وتصدير البضائع على شكل ملف CSV.
- إدارة الزبناء، مع عرض تقارير عن كل زبون وفواتيره. 
- توفير تقارير يومية وأسبوعية وشهرية
 للأرباح والدخل والنفقات.
- إدارة الحسابات البنكية.
- إدارة فروع المتجر المتواجدة في أماكن أخرى 
مع مزامنة بياناتها أوتوماتيكيا.
- إجراء نسخ احتياطي لقواعد البيانات 
ومزامنتها مع Google Drive أو أية خدمة تخزين سحابي 
يختارها المستخدم.
- توفير حماية قوية لجميع البيانات.

يمكن تحميل النسخة التجريبية من البرنامج من خلال الروابط التالية :


رابط تحميل نسخة Windows :


رابط تحميل نسخة Mac OS :



 في حالة أردتم البرنامج بنسخته الكاملة أو أردتم طلب برنامج مماثل، تخصصونه حسب احتياجاتكم، يمكنهم التواصل معنا من هنا :


خصائص البرنامج :

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

ثانيا خاصية إضافة المبيعات، حيث تمكن التاجر من إضافة المبيعات الخاصة بكل مشتر مع تحديد كميتها وفي الأخير يعرض الفاتورة على شكل ملف PDF ليقوم بطباعتها لاحقا.
 عند إعداد كل فاتورة يتم إضافة التاريخ والوقت لها ويتم حفظها في مجلد بشكل مرتب حسب تاريخ اليوم والساعة للعودة لها لاحقا عند الحاجة.

ثالثا خاصية جرد مخزون البضائع حيث تمكن هذه الخاصية التاجر من عرض الكميات المتوفرة من جميع بضائعه، ليقوم باقتنائها البضائع التي أوشكت على النفاذ.

والسلام عليكم ورحمة الله تعالى وبركاته.

تقويم دروس الزمان / quizz/ facebook instant games

0 التعليقات
تجربة فقط 
========

  باستعمال :
JavaScript
HTML
CSS
==========

  يمكنكم اعداد quiz يحتوي  على 10 أسئلة// أو اكثر حسب ما تريدون ..... 

- لكل سؤال أربعة خيارات، واحد من هذه الخيارات الأربعة صحيح، والثلاثة الأخرى غير صحيحة،
- عند النقر على الإجابة الصحيحة يحصل  المستخدم على 1 نقطة،
-عند النقر على الإجابة الخاطئة، يحصل 0 على  نقطة 
وعند الإنتهاء من الإجابة على جميع الأسئلة ، أي 10 أسئلة، التطبيق يقوم بجمع الأجوبة الصحيحة  تلقائيا ، ويمنحه نقطته على 10 فورا .
إذا حصل المستخدم على أقل من 9 على 10، يطلب منه التطبيق المحاولة مرة أخرى حتى يحصل على 10/10
===========
 الفيديو  
   https://www.youtube.com/watch?v=uuJbL45U1Aw
 الكويز على الفايسبوك

https://fb.gg/play/573634149800073

 ما رأيكم ؟

facebook instant games طريقة تصديرلعبة 3D إلى منصة الفايسبوك + إضافة الإعلانات لها

0 التعليقات
v1



تقديم:

مرحبا بكم في درس جديد يخص Facebook Instant Games أو الألعاب الفورية حيث سنشرح طريقة تصدير لعبة مصممة بيونتي لتكون لعبة فورية قابلة للاشتغال على منصة الفيسبوك مع إضافة الإعلانات لها.

و بالنسبة لـ: Facebook Instant Games أو الألعاب الفورية فهي تعد طريقة جديدة تمكن المستخدمين من لعب الألعاب عبر منصة Facebook ، التي تدعم تقنية HTML5 ، في Messenger أو News Feed عبر مختلف الأجهزة المحمولة و المكتبية.

 و سيتم تقديم الدرس على شكل 4 أجزاء على الشكل التالي:

أجزاء الدرس:

الدرس الأول: تقديم عام
https://www.youtube.com/watch?v=btFH8btWvGA&t=23s
الدرس الثاني: طريقة إعداد اللعبة في يونتي و إضافة الإعلانات
https://www.youtube.com/watch?v=p53_X_f66fk&t=29s
الدرس الثالث: طريقة تصدير اللعبة من يونتي على شكل HTML5
https://www.youtube.com/watch?v=lqgXqVxv7rw
الدرس الرابع: طريقة رفع اللعبة على منصة الفايسبوك
https://www.youtube.com/watch?v=GYZPviFNpK4


بسم الله، نبدأ:

بالنسبة لإصدار يونتي التي سنعمل به سيكون Unity 2018.3.12.
و بالنسبة للعبة التي سنعمل عليها، سنختار لعبة Color Ball Bump 3D يمكن شراؤها و  تحميلها من يونتي أسيتس ستور من الرابط التالي : https://bit.ly/2VxqaMc ،( يمكن العمل على أي لعبة Unity كيفما كانت).
سنقوم بإجراء بعض التعديلات عليها، و نضيف لها الإعلان البيني Interstitial، الذي سيظهر عندما يفوز اللاعب أو يخسر في كل مستوى.


هذه هي الأكواد التي سنحتاجها :

+ كود النداء على دالة جافاسكريبت من داخل يونتي مع إرسال قيم لها :

Application.ExternalCall ("FunctionName",ParameterValue);

+ كود إدراج الـSDK الخاصة بـFacebook Instant Games : 


 <script src="https://connect.facebook.net/en_US/fbinstant.6.1.js"></script>


+ كود تحميل إعلان بيني Interstitial : 


var PreloadedInterstitial;
function PreloadInterstitial(Id)
{
 PreloadedInterstitial = null;
 FBInstant.getInterstitialAdAsync(
   Id, // Your Ad Placement Id
 ).then(function(interstitial) {
   // Load the Ad asynchronously
   PreloadedInterstitial = interstitial;
   return PreloadedInterstitial.loadAsync();
 }).then(function() {
   console.log('Interstitial preloaded')
 }).catch(function(err){
   console.error('Interstitial failed to preload: ' + err.message);
 });
}


+ كود إظهار إعلان بيني Interstitial :

function ShowInterstitial()
{
PreloadedInterstitial.showAsync()
.then(function() {
  // Perform post-ad success operation
  console.log('Interstitial ad finished successfully');
})
.catch(function(e) {
  console.error(e.message);
});
}

+ كود تهيئة الـSDK الخاصة بـFacebook Instant Games :

var GameInstance;
FBInstant.initializeAsync().then(function() {
GameInstance = UnityLoader.instantiate("gameContainer", "Build/FileName.json",
{onProgress: UnityProgress});
});

+كود تحديد مستوى تقدم تحميل اللعبة :

FBInstant.setLoadingProgress(ProgressValue);

+ كود بدء اللعبة:

FBInstant.startGameAsync().then(function(){
console.log("Game Started");
});


+محتوى ملف fbapp-config.json المسؤول عن إعدادات اللعبة :


{
  "instant_games": {
 "navigation_menu_version": "NAV_FLOATING",
  }
}


والسلام عليكم ورحمة الله تعالى و بركاته.

كوتلين Kotlin : طريقة برمجة تطبيق خاص بالوصفات

0 التعليقات


تقديم:

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

 و بالنسبة للغة كوتلين فهي لغة سهلة و حديثة العهد و قد تم تصميمها للتعامل والتوافق الكامل مع الجافا وحزمة تطويرها JDK و هي تتيح كتابة الشيفرة البرمجية بعدد أقل من الأسطر وبشكل أسرع وأكثر فاعلية مقارنة بلغة الجافا حيث تعتبر شبيهة بلغة سويفت من أبل التي يتم بها تطوير تطبيقات الآيفون.

 و سيتم تقديم الدرس على شكل 6 أجزاء بمعنى، سيتم عرض 6 فيديوهات على الشكل التالي:

أجزاء الدرس:

الفيديو الأول:تقديم عام
الفيديو الثاني: خاص بالتصميم
الفيديو الثالث: خاص بالتكويد
الفيديو الرابع: خاص بطريقة إضافة الإعلانات
الفيديو الخامس: خاص بتنظيم التطبيق و إعداد مقاساته
الفيديو السادس و الأخير: خاص بطريقة الريسكين
بسم الله، نبدأ:

تصميم التطبيق:

تطبيقنا سيضم ثلاث صفحات:

صفحة البداية: و التي ستحتوي على اسم التطبيق و وصف له و كذلك أيقونته و ستحتوي على زر يتم الدخول للتطبيق عند الضغط عليه بالإضافة إلى زر في الأسفل يمكن من ولوج اتفاقية الاستخدام و سياسة الخصوصية عند الضغط عليه.

صفحة جميع الوصفات: و هي صفحة تحتوي على جميع وصفات التطبيق حيث يتم عرض صورة الوصفة، و عند الضغط عليها يتم الانتقال لصفحة الوصفة المنفردة.

صفحة الوصفة المنفردة: في هذه الصفحة يتم عرض صورة للوصفة المختارة و مقاديرها و أيضا طريقة تحضيرها.


برمجة التطبيق:

+ كود الانتقال من صفحة لصفحة أخرى:

startActivity(Intent(baseContext, class_name::class.java))
  

+ كود الانقال إلى Activity معينة مع إرسال متغير معين: 


val intent = Intent(this, classe_name::class.java)
intent.putExtra("element_name",element_value )
startActivity(intent)



+ كود استقبال متغير عددي من Activity معينة: 


element_name = getIntent().getIntExtra("element_name", 0)



+ كود فتح موقع ما:

startActivity(Intent(Intent.ACTION_VIEW,
Uri.parse("URL")))

+كود تغيير نوع خط معين:

val typeface = Typeface.createFromAsset(
  assets, "font.ttf")
  textView.typeface=typeface
  

+كود الحصول على عدد الملفات في مجلد معين في الأسيت:

Int_name= assets.list("folder_name").size

+ كود إنشاء ImageView جديدة و ضبط أبعادها و هوامشها:

val ImageView_name = ImageView (this)
val layoutparams = LinearLayout.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.WRAP_CONTENT)
layoutparams.setMargins(left, top, right, bottom)
ImageView_name.layoutParams=layoutparams


+كود إضافة عنصر معين إلى LinearLayout:


LinearLayout.addView(View)

+كود إعطاء Tag لعنصر معين:


View.tag = Tag
  

+كود تكوين Id معين انطلاقا من String:

resources.getIdentifier("id_name", "id_type", packageName)
  

+كود تغيير الصورة داخل ImageView معينة:
 

من أجيل تسهيل و ضع الصور ة تجنب المشاكل التي تحدث عند استعمال الكثير من الصور مثل مشكل OutOfMemoryError Exception تم الاعتماد على مكتبة خارجية تسمى Picasso و التي يمكن الاطلاع على كيفية إضافتها و أيضا على أكوادها من هذا الرابط:




+ أكواد البانر:


val mAdView = findViewById(R.id.adView) as AdView
val adRequest = AdRequest.Builder().build()
mAdView.loadAd(adRequest)

+أكواد الإنترستيشل:


internal lateinit var mInterstitialAd: InterstitialAd
  mInterstitialAd = InterstitialAd(this)
  mInterstitialAd.adUnitId=ca-app-pub-3940256099942544/1033173712
  mInterstitialAd.adListener=object:AdListener() {
  override fun onAdClosed() {
   requestNewInterstitial()}}
  requestNewInterstitial()
  if (mInterstitialAd.isLoaded) {
  mInterstitialAd.show()}
  private fun requestNewInterstitial() {
  val adRequest = AdRequest.Builder().build()
  mInterstitialAd.loadAd(adRequest)}
  

+ كود xml لإضافة البانر:


<com.google.android.gms.ads.AdView
            xmlns:ads="http://schemas.android.com/apk/res-auto"
            android:id="@+id/adView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            ads:adSize="BANNER"
            ads:adUnitId="ca-app-pub-3940256099942544/6300978111" />

+ كود وضع مسافة بين السطور:


<TextView android:lineSpacingExtra="10dp" />
  

+ كود إضافة تصريحات الولوج للأنترنت:


<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission
android:name="android.permission.ACCESS_NETWORK_STATE"/>


والسلام عليكم ورحمة الله تعالى و بركاته.

طريقة برمجة لعبة Car Driving باستخدام Unity

0 التعليقات
السلام عليكم و رحمة الله تعالى و بركاته مرحبا بكم في درس جديد سنتطرق من خلاله إلى كيفية برمجة لعبة Car Driving للأندرويد ثنائية الأبعاد و ذلك باستخدام Unity.

   الفكرة:

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

 الإعلانات:

  بالنسبة للإعلانات سنقتصر على الشبكة الإعلانية الخاصة بـAdmob فقط و ذلك لأن نفس الأمر ينطبق على باقي الشبكات و كلها تمر بنفس المراحل. 

 الوسائل التي سنحتاجها لبدء العمل فهي كالتالي: 

 محرك الألعاب المستخدم Unity الإصدار الذي سنشتغل عليه هو 5.4.0 يمكن تحميله من الموقع الرسمي عبر هذا الرابط.

 المشاهد:

 المشهد الاول:   عبارة عن واجهة تحتوي على 4أزرار : زر من اجل بدأ اللعب و زر لمشاركة اللعبة و زر آخر لتقييمها ثم زر أخير من أجل إغلاق اللعبة.

  المشهد الثاني:   هو مشهد اللعبة و الذي سيمكن المستخدم من تحريك لعبته و محاولة تفادي باقي السيارات.

المشهد الثالث:  هو مشهد نهاية اللعبة الذي سيعطي لللاعب النقطة التي حصل عليها ثم سيظهر له زرا من أجل إعادة اللعبة.

 الأكواد التي سنحتاجها فهي كالتالي:

 كود فتح مشهد جديد:


SceneManager.LoadScene("SceneName");

كود مشاركة نص ما:


  AndroidJavaClass intentClass 
= new 
  AndroidJavaClass("android.content.Intent");
  AndroidJavaObject intentObject = new
  AndroidJavaObject("android.content.Intent");
  intentObject.Call<AndroidJavaObject>
("setAction",
  intentClass.GetStatic<string>("ACTION_SEND"));
  intentObject.Call<AndroidJavaObject>
("setType", "text/plain");
  intentObject.Call<AndroidJavaObject>
("putExtra",
  intentClass.GetStatic<string>("EXTRA_SUBJECT"), "subject");
  intentObject.Call<AndroidJavaObject>
("putExtra", 
  intentClass.GetStatic<string>("EXTRA_TEXT"), "body");
  AndroidJavaClass unity = new 
  AndroidJavaClass("com.unity3d.player.UnityPlayer");
  AndroidJavaObject currentActivity = 
  unity.GetStatic<AndroidJavaObject>("currentActivity");
  AndroidJavaObject jChooser = 
  intentClass.CallStatic<AndroidJavaObject>
("createChooser",
  intentObject, "share via");
  currentActivity.Call("startActivity", jChooser);

كود فتح تطبيق معين في جوجل بلاي من أجل تقييمه:


Application.OpenURL("market://details?id=com.car.driving");

كود إغلاق التطبيق:


Application.Quit();

كود تحريك عنصر معين إلى اليمين أو اليسار عند الضغط على أسهم لوحة المفاتيح:


Vector2 position = transform.position;
position.x 
+= Input.GetAxis("Horizontal") * Time.deltaTime 
* speed;
transform.position = position;

كود تحريك عنصر معين إلى اليمين أو اليسار عند تحريك الهاتف:


Vector2 position = transform.position;
position.x 
+= Input.acceleration.x * Time.deltaTime 
* speed;
transform.position = position;

كود القيام بأمر ما عند اصطدام عنصر معين مع عنصر محدد بـ Tag:


void OnCollisionEnter2D
(Collision2D coll)
    {
        if 
(coll.gameObject.tag == "Enemy"){
            
//Do Something


    }}

كود تثبيت قيمة معينة بين قيمتين:


position.x = Mathf.Clamp(position.x, -limit 
, limit);

كود تكرار عنصر معين مع تحديد موضعه و درجة دورانه:


Instantiate(GameObjectName, transform.position, transform.rotation);

كود الحصول على رقم عشوائي بين قيمتين محددتين:


Random.Range(firstNumber, lastNumber);

كود إزاحة عنصر إلى مكان معين:


transform.Translate(new Vector2(X, Y));


بالنسبة لأكواد الإعلانات سنقوم بأخدها من موقع Google الرسمي عبر هذا الرابط



 و بهذا نكون قد انتهينا، و السلام عليكم و رحمة الله تعالى و بركاته.

برمجة تطبيق الوصفات بطريقة سهلة

0 التعليقات
السلام عليكم و رحمة الله تعالى و بركاته.
★★★ تقديم:
الكثير من الإخوة مطوري تطبيقات الهاتف المحمول الخاصة بالأندرويد يجدون صعوبة في البرمجة والتعديل على تطبيق  Recipes، و لهذا ارتأيت أن أقوم بتبسيطه و تسهيل التعامل معه ، من حيث تصميمه و برمجته و تسهيل التحكم في إعداداته.
و سيتم الشرح بالصوت والصورة و ذلك على شكل أشرطة فيديو في قناتي على اليوتوب.

رابط تحميل الكود السورس - 
كود سورس الخاص باكليبس+ كود سورس الخاص باندرويد استوديو+ documentation

https://sellfy.com/p/z5sX/



★★★ سير العمل:
★★★طريقة إنشاء تصميم صفحات Layout.
★★★طريقة برمجة صفحات التطبيق.
★★★طريقة إضافة إعلانات أدموب Admob.
★★★ طريقة إعداد مقاسات التطبيق من أجل تناسبه مع جميع شاشات أجهزة الأندرويد.
★★★إستخدام أدوات التحليل و القياس :طريقة إدخال منصة firebase إلى التطبيق.
★★★طريقة ريسكين التطبيق:
   ★طريقة تغيير المحتوى.
   ★طريقة تغيير الـ Package.
   ★ طريقة استخراج الـ APK.
   ★طريقة تحويل الكود المستخرج من أندرويد استوديو إلى كود سورس يعمل على إكليبس.
   ★طريقة رفع التطبيق الى google play.
بسم الله، نبدأ:
★★★التصميم
التطبيق يحتوي على 3 صفحات أولها هي:
 صفحة شاشة البداية splash_screen:
 هذه الصفحة تظهر في البداية و يدوم ظهورها مدة معينة و تحتوي على صورة تظهر في كامل الشاشة ثم عند انقضاء مدة الظهور يتم الانتقال إلى صفحة جميع الوصفات.
صفحة جميع الوصفات all_recipes:
هذه الصفحة  تحتوي على صور الوجبات الغذائية و عند الضغط على الصورة التي تريدها يتم الانتقال إلى صفحة الوصفة المنفردة.
 صفحة الوصفة المنفردة single_recipe:  
هذه الصفحة تحتوي على صورة الوجبة في الأعلى وتحتها اسم الوصفة و مقاديرها و كيفية تحضيرها
و يمكن للمستخدم من خلال هذه الصفحة الانتقال للوصفة التالية عن طريق السحب لليسار أو الانتقال للوصفة السابقة عن طريق السحب لليمين.


 ★من أجل اختصار الوقت قمت سابقا بإنجاز تصميم ملفات Layout، و سنكتفي فقط بشرح كيفية التحكم فيه  بأكواد الجافا وهذا هو أهم شيء، و هذه هي أكواد xml الخاصة بالتصميم و هي مصمة فقط للظهور بشكل جيد على الأجهزة ذات القياسات 480*800:hdpi لأن تعديل المقاسات من أجل تناسب التطبيق مع جميع مقاسات الأجهزة سيكون في درس منفصل، و هذه هي الأكواد:

كود صفحة splash_screen:


<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
 xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
</RelativeLayout>

كود صفحة all_recipes:


<RelativeLayout 
xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:fillViewport="true">
        <LinearLayout
            android:orientation="horizontal"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">
            <LinearLayout
                android:orientation="vertical"
                android:layout_width="95dp"
                android:layout_height="match_parent"
                android:layout_marginLeft="10dp"
                android:layout_marginRight="2dp"
                android:layout_marginTop="10dp"
                android:layout_marginBottom="10dp"
                android:id="@+id/l1">
            </LinearLayout>
            <LinearLayout
                android:orientation="vertical"
                android:layout_width="95dp"
                android:layout_height="match_parent"
                android:layout_marginLeft="6dp"
                android:layout_marginTop="10dp"
                android:layout_marginBottom="10dp"
                android:id="@+id/l2">
            </LinearLayout>
            <LinearLayout
                android:orientation="vertical"
                android:layout_width="95dp"
                android:layout_height="match_parent"
                android:layout_marginLeft="6dp"
                android:layout_marginTop="10dp"
                android:layout_marginBottom="10dp"
                android:id="@+id/l3">
            </LinearLayout>
        </LinearLayout>
    </ScrollView>
</RelativeLayout>

كود صفحة single_recipe:

<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingTop="8dp"
    android:background="#0800ff">
    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/scrollView" >
        <LinearLayout
            android:orientation="vertical"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">
            <ImageView
                android:layout_width="280dp"
                android:layout_height="220dp"
                android:layout_gravity="center"
                android:id="@+id/meal" />
      <TextView
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:textAppearance="?android:attr/textAppearanceLarge"
      android:text=""
      android:id="@+id/recipe"
      android:textStyle="bold"
      android:lineSpacingExtra="10dp"
      android:textColor="#ffffff"
      android:textSize="30sp"
      android:padding="10dp"
      android:gravity="right" />
        </LinearLayout>
    </ScrollView>
</RelativeLayout>

هذا لمن أراد التعلم، في حين سأضع لكم أيضا رابط الكود السورس الخاص بأندرويد استوديو والخاص بإكليبس  في الوصف أسفل الفيديو من أجل استغلاله  وتعديله حسب ما يناسبكم.
★★★ البرمجة:
★ بالنسبة للأكواد الأساسية فقد قمت بالبحث عنها في موقع Stackoverflow  و قمت بتنظيمها لتصبح جاهزة للاستخدام، و هي كالتالي:

★ كود إعداد عداد عكسي CountDownTimer:


new CountDownTimer(X, Y) {
public void onTick(long millisUntilFinished) {}
public void onFinish() {Z}}
.start();

★ كود إخفاء الشريط العلوي من الشاشة:

this.getWindow().setFlags(WindowManager.
        LayoutParams.FLAG_FULLSCREEN,
        WindowManager.LayoutParams.FLAG_FULLSCREEN);

★ كود تغيير خط نص معين:


Typeface typeface = Typeface.
createFromAsset(getAssets(),"fonts/font.ttf");
textview.setTypeface(typeface);

★ كود إعداد قائمة:

 @Override
    public boolean onCreateOptionsMenu(Menu menu){
        getMenuInflater().inflate(R.menu.menu_name, menu);
        return true;
    }
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        int id = item.getItemId();
        if (id == R.id.menu_item_id) {
        }
        return super.onOptionsItemSelected(item);
    }

★ كود فتح تطبيق في Google Play Store  من أجل تقييمه:


Intent rateIntent = new Intent(Intent.ACTION_VIEW,
Uri.parse("market://details?id=com.X.X"));
startActivity(rateIntent);


★ كود الحصول على عدد الملفات التي توجد في مجلد ما موجود في مجلد Assets:

int files_number=getActivity().getAssets().list("folder_name").length;

★ كود وضع مصدر الصورة من ملف في مجلد Assets:


final InputStream inputstream = getAssets().open("image_path");
Drawable drawable = Drawable.createFromStream(inputstream, null);
image.setImageDrawable(drawable);
image.setTag(image_number);

★ كود تغيير طول و عرض عنصر ما:


final LinearLayout.LayoutParams layoutparams = new LinearLayout.
LayoutParams(layout_width,layout_height);

★ كود تغيير الهوامش الخاصة بعنصر ما:


layoutparams.setMargins(left, top, right, bottom);

★ كود القيام بأمر ما عند الضغط على زر الرجوع للخلف:


 public void onBackPressed(){
        //Do Something

    }

★ كود إظهار رسالة من نوع Toast:


Toast.makeText(Activity.this, "Something",
Toast.LENGTH_LONG).show();

★ كود الانقال إلى Activity معينة مع إرسال متغير معين:


Intent intent = new Intent(from_activity.this,to_activity.class);
intent.putExtra("element_name",element_value);
startActivity(intent);

★ كود استقبال متغير عددي من Activity معينة :


int element_name=getIntent().getIntExtra("element_name", 0);

★ كود مشاركة نص ما :


Intent sharingIntent = new Intent(android.content.Intent.ACTION_SEND);
sharingIntent.setType("text/plain");
sharingIntent.putExtra(android.content.Intent.EXTRA_SUBJECT,"");
sharingIntent.putExtra(android.content.Intent.EXTRA_TEXT, "");
startActivity(Intent.createChooser(sharingIntent, "Share via:"));

★ كود ملف الجافا: OnSwipeTouchListener الذي يمكن من اكتشاف السحب لليمين و اليسار و الأعلى و الأسفل:


package com.recipes.app;

import android.content.Context;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.view.View;

public class OnSwipeTouchListener implements 
        View.OnTouchListener {

    private GestureDetector gestureDetector;

    public OnSwipeTouchListener(Context c) {
        gestureDetector = new GestureDetector(c, new 
                GestureListener());
    }

    public boolean onTouch(final View view, final MotionEvent
            motionEvent) {
        return gestureDetector.onTouchEvent(motionEvent);
    }

    private final class GestureListener extends GestureDetector.
            SimpleOnGestureListener {

        private static final int SWIPE_THRESHOLD = 100;
        private static final int SWIPE_VELOCITY_THRESHOLD = 100;

        @Override
        public boolean onDown(MotionEvent e) {
            return true;
        }


        @Override
        public boolean onFling(MotionEvent e1, MotionEvent e2,
                   float velocityX, float velocityY) {
            boolean result = false;
            try {
                float diffY = e2.getY() - e1.getY();
                float diffX = e2.getX() - e1.getX();
                if (Math.abs(diffX) > Math.abs(diffY)) {
                    if (Math.abs(diffX) > SWIPE_THRESHOLD &&
        Math.abs(velocityX) > SWIPE_VELOCITY_THRESHOLD) {
                        if (diffX > 0) {
                            onSwipeRight();
                        } else {
                            onSwipeLeft();
                        }
                    }
                } else {
                    if (Math.abs(diffY) > SWIPE_THRESHOLD &&
     Math.abs(velocityY) > SWIPE_VELOCITY_THRESHOLD) {
                        if (diffY > 0) {
                            onSwipeDown();
                        } else {
                            onSwipeUp();
                        }
                    }
                }
            } catch (Exception exception) {
                exception.printStackTrace();
            }
            return result;
        }
    }

    public void onSwipeRight() {
    }

    public void onSwipeLeft() {
    }

    public void onSwipeUp() {
    }

    public void onSwipeDown() {
    }
}

★ كود القيام بأمر أمر عند السحب إلى اليسار أو اليمين و ذلك باستعمال ملف الـ OnSwipeTouchListener:


element_name.setOnTouchListener(new OnSwipeTouchListener(this) {
@Override
public void onSwipeLeft()
{
// Do Something
}
@Override
public void onSwipeRight()
{
// Do Something
}
});

★ كود تعريف قائمة :


String[] string_name=getResources().getStringArray(R.array.array_id);

★ كود إزاحة الصفحة إلى اليمين:


<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:fromXDelta="-100%p" android:toXDelta="0%p" >
</translate>
</set>

★ كود إزاحة الصفحة إلى اليسار:


<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:fromXDelta="100%p" android:toXDelta="0%p" >
</translate>
</set>

★ كود تشغيل Animation معينة من مجلد anim:


View view = findViewById(R.id.view_id);
Animation animation = AnimationUtils.
loadAnimation(getApplicationContext(),
R.anim.animation_name);
animation.setDuration(200);
view.startAnimation(animation);

★ كود الحصول على طول و عرض شاشة الجهاز:


Display display = getWindowManager().
getDefaultDisplay();
int width = display.getWidth();
int height = display.getHeight();

★ كود إظهار نافذه منبثقة قابلة للتخصيص باعتماد ملف Layout:



  final Dialog alert = new Dialog(this);
        alert.requestWindowFeature(Window.
        FEATURE_NO_TITLE);
        alert.setContentView(R.layout.closing_dialog);
        alert.setCancelable(false);
        Button yes=(Button)alert.findViewById(R.id.yes);
        Button no=(Button)alert.findViewById(R.id.no);
        no.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                alert.cancel();
            }
        });
        yes.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                finish();
            }
        });
        alert.getWindow().setLayout(window_width, window_height);
        alert.show();

★ كود تخصيص نافذة منبثقة:


<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
 xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:paddingRight="10dp"
    android:paddingLeft="10dp"
    android:paddingTop="10dp"
    android:paddingBottom="10dp"
    android:background="#f200ff">
    <TextView
        android:layout_width="match_parent"
        android:layout_height="60dp"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:text="الخروج من التطبيق"
        android:id="@+id/textView"
        android:layout_alignParentTop="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:gravity="center"
        android:background="#ffff00"
        android:textStyle="bold"
        android:textColor="#ff0000"
        android:textSize="30sp"
        android:layout_marginBottom="20dp" />
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="نعم"
        android:id="@+id/yes"
        android:background="#ffff00"
        android:textStyle="bold"
        android:textSize="30sp"
        android:textColor="#ff0000"
        android:paddingRight="5dp"
        android:paddingLeft="5dp"
        android:layout_below="@+id/textView2"
        android:layout_alignLeft="@+id/textView2"
        android:layout_alignStart="@+id/textView2"
        android:layout_marginLeft="30dp" />
    <TextView
        android:layout_gravity="right"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:text="هل أنت متأكد من رغبتك في الخروج من التطبيق؟"
        android:id="@+id/textView2"
        android:gravity="center"
        android:textColor="#ffffff"
        android:textStyle="bold"
        android:textSize="30sp"
        android:padding="15dp"
        android:layout_below="@+id/textView"
        android:layout_centerHorizontal="true"
        android:background="#0400ff"
        android:layout_marginBottom="18dp" />
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="لا"
        android:id="@+id/no"
        android:background="#ffff00"
        android:textStyle="bold"
        android:textSize="30sp"
        android:textColor="#ff0000"
        android:paddingRight="5dp"
        android:paddingLeft="5dp"
        android:layout_below="@+id/textView2"
        android:layout_alignRight="@+id/textView2"
        android:layout_alignEnd="@+id/textView2"
        android:layout_marginRight="30dp" />
</RelativeLayout>

★★★ إضافة الإعلانات: سنقتصر فقط على شبكة أدموب الإعلانية:
    ★ طريقة إضافة إعلان البانر banner ads.
    ★ طريقة إضافة الإعلان البيني interstitial ads.
★★★ إستخدام أدوات التحليل و القياس: منصة firebase:
    ★ طريقة إدراج الإحصائيات.
    ★ طريقة  إدراج إرسال تقارير أخطاء التطبيق أو توقفه عن العمل على الأجهزة التي يشتغل عليها.

و هذه هي الأكواد الخاصة بإضافة الإعلانات و منصة Firebase:

★ كود إضافة Google Play Services إلى التطبيق:


classpath 'com.google.gms:google-services:3.0.0'
compile 'com.google.firebase:firebase-ads:9.4.0'
apply plugin: 'com.google.gms.google-services'

★ كود إضافة تصريحات الولوج للأنترنت:


<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission
android:name="android.permission.ACCESS_NETWORK_STATE"/>

★ كود إعداد إعلانات Admob:


<meta-data 
android:name="com.google.android.gms.version"
android:value="@integer/google_play_services_version"/>

<activity android:name="com.google.android.gms.ads.AdActivity"
android:configChanges="keyboard|keyboardHidden
|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"
android:theme="@android:style/Theme.Translucent" />


★ كود إضافة إعلان Banner (كود XML):


<HorizontalScrollView
    android:layout_centerHorizontal="true"
    android:layout_alignParentBottom="true"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:visibility="gone"
    android:id="@+id/admob_banner">
    <com.google.android.gms.ads.AdView
    android:id="@+id/adView"
    android:layout_gravity="center"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    ads:adSize="BANNER"
    ads:adUnitId="ca-app-pub-3940256099942544/6300978111">
</com.google.android.gms.ads.AdView>
</HorizontalScrollView>


★ كود إضافة إعلان Banner (كود JAVA):


MobileAds.initialize(getApplicationContext(), 
"ca-app-pub-3940256099942544~3347511713");
AdView mAdView = (AdView) findViewById(R.id.adView);
AdRequest adRequest = new AdRequest.Builder().build();
mAdView.loadAd(adRequest);

★ كود القيام بأمر ما عندما يصبح إعلان Banner جاهزا للعرض:


mAdView.setAdListener(new AdListener() {
@Override
public void onAdLoaded() {
//Do Something
}});

★ كود إعداد إعلان من نوع Interstitial:


InterstitialAd mInterstitialAd;
mInterstitialAd = new InterstitialAd(this);
mInterstitialAd.
setAdUnitId("ca-app-pub-3940256099942544/1033173712");
mInterstitialAd.setAdListener(new AdListener() {
@Override
public void onAdClosed() {
requestNewInterstitial();}});
requestNewInterstitial();

★ كود طلب إعلان Interstitial جديد بعد إغلاق الإعلان القديم:


private void requestNewInterstitial(){
AdRequest adRequest = new AdRequest.Builder().build();
mInterstitialAd.loadAd(adRequest);}

★ كود إظهار إعلان Interstitial:


if (mInterstitialAd.isLoaded()){
mInterstitialAd.show();}


★ كود إضافة منصة Firebase الخاصة بالإحصائيات:


 compile 'com.google.firebase:firebase-core:9.2.1'

★ كود إضافة منصة Firebase الخاصة بإرسال تقارير الأخطاء و توقف التطبيق:

compile 'com.google.firebase:firebase-crash:9.4.0'

★★★طريقة ريسكين التطبيق:
      ★ طريقة تغيير الصور و الأيقونة.
      ★ طريقة استخراج صور السكرين شوت من أندرويد استوديو.
      ★ طريقة تغيير المحتوى.
      ★ طريقة تغيير Package.
      ★ طريقة استخراج Apk من أندويد استوديو.
      ★ طريقة تحويل الكود السورس المستخرج من أندرويد استوديو إلى كود سورس يشتغل على إكليبس.
      ★ طريقة استخراج Apk من إكليبس.
      ★ طريقة رفع التطبيق الى قوقل بلاي.


والسلام عليكم ورحمة الله تعالى و بركاته.