اذهب إلى المحتوى

كل الأنشطة

تحدث تلقائيًا

  1. الساعة الماضية
  2. نلقي نظرة في هذا المقال على المصفوفات وهي إحدى الطرق الأنيقة لتخزين قوائم من العناصر تحت اسم متغير واحد. سنتعلم فائدة المصفوفات ونكتشف بعدها كيف نكوّن المصفوفة ونضيف العناصر إليها أو نزيلها أو نستعيدها، إضافة إلى بعض النقاط المفيدة الأخرى. ننصحك قبل المتابعة في قراءة هذا المقال بالاطلاع على بعض المقالات السابقة مثل: أساسيات علوم الحاسب. أساسيات HTML. أساسيات عمل CSS ما هي المصفوفات؟ توصف المصفوفات Array عمومًا أنها كائنات تشبه القوائم، فهي في مبدأها كائنات مفردة تتضمن قيمًا مخزّمة ضمنها على شكل قائمة. يمكن تخزين المصفوفات ضمن المتغيرات ويجري التعامل معها كغيرها من القيم، لكن الفرق الوحيد هو إمكانية الوصول إلى كل قيمة ضمن المصفوفة بشكل منفصل عن غيرها مما يتيح إمكانيات كبيرة وفعّالة في التعامل مع القوائم والتنقل بين عناصرها ضمن حلقات لتنفيذ نفس التغييرات على كل قيمة أو على قيم منتقاة. فقد تتضمن المصفوفة مثلًا قائمة من أسعار منتجات وتريد طباعة هذه الأسعار ضمن فاتورة ثم جمع السعر الكلي وطباعته أسفل القائمة. ودون وجود مصفوفات كان علينا تخزين كل عنصر في متغير منفصل ومن ثم استدعاء الشيفرة التي تنفذ عملية الطباعة والجمع لكل عنصر وبشكل منفصل. ستكون الشيفرة عندها طويلة وغير فعّالة وموّلدة لأخطاء أكثر. فتخيل إن كان عدد العناصر 10 مثلًا، سيكون إضافتها إلى الفاتورة مزعجًا، فكيف هو الحال إن كان هناك 1000 عنصر؟ وكما فعلنا في مقالات أخرى سنتدرب على أساسيات التعامل مع المصفوفات باستخدام طرفية جافا سكريبت في المتصفح والتي يمكنك الوصول لها من خلال النقر على مفاتيح (Ctrl + Shift+ K في فايرفكس). إنشاء المصفوفات تتكون المصفوفة من قوسين مربعين وعناصر تفصل بينها فاصلة ,. افترض أنك تريد تخزين لائحة التسوق التالية في مصفوفة، أنشأ هذه المصفوفة بنسخ ولصق الشيفرة التالية في الطرفية: const shopping = ["bread", "milk", "cheese", "hummus", "noodles"]; console.log(shopping); إن كل عناصر المصفوفة السابقة هي عناصر نصية، لكن بإمكانك تخزين أنواع مختلفة من البيانات مثل الأعداد والسلاسل النصية والكائنات وحتى مصفوفات أخرى. كما يمكن استخدام أنواع مختلفة في المصفوفة نفسها، فلا ضرورة لإلزام أنفسنا بإنشاء مصفوفة لتخزين الأعداد وأخرى للنصوص. إليك مثالًا: const sequence = [1, 1, 2, 3, 5, 8, 13]; const random = ["tree", 795, [0, 1, 2]]; جرب إنشاء بعض المصفوفات قبل المتابعة. إيجاد طول مصفوفة بإمكانك إيجاد طول مصفوفة (عدد العناصر التي تضمها) بنفس طريقة إيجاد عدد المحارف في سلسلة نصية باستخدام الخاصية ()length: const shopping = ["bread", "milk", "cheese", "hummus", "noodles"]; console.log(shopping.length); // 5 الوصول إلى عناصر مصفوفة وتعديلها تُرقم عناصر المصفوفة ابتداءً من الصفر ويُدعى هذا الرقم دليل العنصر item index. وهكذا سيكون دليل العنصر الأول هو 0 والثاني 1 وهكذا. وللوصول إلى عنصر معين في مصفوفة ضع اسم المصفوفة يليها قوسين مربعين ضمنهما دليل العنصر أي بنفس الطريقة التي تصل فيها إلى محرف في سلسلة نصية: const shopping = ["bread", "milk", "cheese", "hummus", "noodles"]; console.log(shopping[0]); // returns "bread" بالإمكان أيضًا تعديل عنصر في المصفوفة بإسناد قيمة جديدة إلى العنصر المطلوب: const shopping = ["bread", "milk", "cheese", "hummus", "noodles"]; shopping[0] = "tahini"; console.log(shopping); // shopping will now return [ "tahini", "milk", "cheese", "hummus", "noodles" ] ملاحظة: تذكر أن العد أو الفهرسة في جافا سكريبت تبدأ من 0 وليس من 1. تُدعى المصفوفة ضمن مصفوفة بالمصفوفة متعددة الأبعاد، ويمكن الوصول إلى عنصر في مصفوفة موجودة ضمن مصفوفة أخرى بكتاب اسم المصفوفة الخارجية يليها زوجين من الأقواس المربعة يضم الأول دليل المصفوفة الداخلية ضمن المصفوفة الخارجية وفي الثاني دليل العنصر المطلوب في المصفوفة الداخلية. فلو أردت الوصول إلى أحد عناصر المصفوفة التي دليلها 2 (العنصر الثالث) ضمن المصفوفة random يمكنك إنجاز الأمر كالتالي: const random = ["tree", 795, [0, 1, 2]]; random[2][2]; جرّب أن تعدّل على عناصر المصفوفات التي أنشأتها قبل المتابعة. إيجاد دليل العناصر في مصفوفة إن لم تكن تعرف دليل العنصر، استخدم التابع ()indexOf الذي يأخذ العنصر وسيطًا له ويعيد دليله إن كان موجودًا أو 1- إن لم يجده. const birds = ["Parrot", "Falcon", "Owl"]; console.log(birds.indexOf("Owl")); // 2 console.log(birds.indexOf("Rabbit")); // -1 إضافة عنصر إلى مصفوفة ﻹضافة عنصر أو أكثر إلى نهاية المصفوفة، نستخدم التابع ()push وعليك حينها التأكد من إضافة عنصر أو آخر إلى نهاية المصفوفة. const cities = ["Manchester", "Liverpool"]; cities.push("Cardiff"); console.log(cities); // [ "Manchester", "Liverpool", "Cardiff" ] cities.push("Bradford", "Brighton"); console.log(cities); // [ "Manchester", "Liverpool", "Cardiff", "Bradford", "Brighton" ] يعيد التابع طول المصفوفة الجديد عند نجاح العملية، وبإمكانك أيضًا تخزين طول المصفوفة الجديد بإسناد التابع إلى متغير كالتالي: const cities = ["Manchester", "Liverpool"]; const newLength = cities.push("Bristol"); console.log(cities); // [ "Manchester", "Liverpool", "Bristol" ] console.log(newLength); // 3 وﻹضافة عناصر إلى بداية مصفوفة، استخدم التايع ()unshift: const cities = ["Manchester", "Liverpool"]; cities.unshift("Edinburgh"); console.log(cities); // [ "Edinburgh", "Manchester", "Liverpool" ] إزالة عناصر من مصفوفة ﻹزالة العنصر اﻷخير من مصفوفة، استخدم التابع ()pop: const cities = ["Manchester", "Liverpool"]; cities.pop(); console.log(cities); // [ "Manchester" ] يعيد هذا التابع العنصر الذي أزيل من المصفوفة، ولكي تخزن هذا العنصر في متغيّر، يمكنك اتباع الطريقة التالية: const cities = ["Manchester", "Liverpool"]; const removedCity = cities.pop(); console.log(removedCity); // "Liverpool" وﻹزالة العنصر اﻷول من مصفوفة استخدم التابع ()shift: const cities = ["Manchester", "Liverpool"]; cities.shift(); console.log(cities); // [ "Liverpool" ] وإن كنت تعلم دليل العنصر بإمكانك إزالته من المصفوفة باستخدام التابع ()splice: const cities = ["Manchester", "Liverpool", "Edinburgh", "Carlisle"]; const index = cities.indexOf("Liverpool"); if (index !== -1) { cities.splice(index, 1); } console.log(cities); // [ "Manchester", "Edinburgh", "Carlisle" ] يحدد الوسيط الأول للتابع ()splice دليل العنصر الذي تبدأ عنده إزالة العناصر، ويحدد الوسيط الثاني عدد العناصر التي يجب إزالتها، وبالتالي بإمكانك استخدامه ﻹزالة عدة عناصر: const cities = ["Manchester", "Liverpool", "Edinburgh", "Carlisle"]; const index = cities.indexOf("Liverpool"); if (index !== -1) { cities.splice(index, 2); } console.log(cities); // [ "Manchester", "Carlisle" ] الوصول إلى كل العناصر قد تحتاج أحيانًا الوصول إلى كل عنصر من عناصر مصفوفة، عندها يمكنك استخدام الحلقة for...of: const birds = ["Parrot", "Falcon", "Owl"]; for (const bird of birds) { console.log(bird); } وقد تضطر أحيانًا إلى تنفيذ عملية ما على كل عنصر من عناصر مصفوفة للحصول على مصفوفة جديدة مختلفة عن اﻷصل. استخدم لهذه الغاية التابع ()map. يوضح المثال التالي كيفية مضاعفة جميع أعداد مصفوفة عددية: function double(number) { return number * 2; } const numbers = [5, 2, 7, 6]; const doubled = numbers.map(double); console.log(doubled); // [ 10, 4, 14, 12 ] مررنا إلى التابع ()map وسيًا هو الدالة double التي يستدعيها لمضاعفة كل عنصر ثم يضيف ناتج كل استدعاء إلى المصفوفة الجديدة ويعيد هذه المصفوفة في النهاية. وقد تحتاج في بعض اﻷحيان إلى تشكل مصفوفة جديدة تضم عناصر من مصفوفة قديمة إذا حققت هذه العناصر شرطًا ما، استخدم لهذه الغاية التابع ()filter. لاحظ كيف نستخدم هذا التابع في المثال التالي الذي يأخذ مصفوفة ويعيد مصفوفة تضم فقط العناصر التي طولها أكبر من 8: function isLong(city) { return city.length > 8; } const cities = ["London", "Liverpool", "Totnes", "Edinburgh"]; const longer = cities.filter(isLong); console.log(longer); // [ "Liverpool", "Edinburgh" ] وكذلك يستدعي التابع ()filterدالة لاختبار كل عنصر من عناصر المصفوفة فإن أعادت القيمة true يُضاف العنصر إلى المصفوفة الجديدة ثم يعيد هذه المصفوفة في النهاية. التحويل بين المصفوفات والسلاسل النصية قد يُعرض عليك كم كبير من البيانات الخام التي تتضكن سلاسل نصية طويلة، وتجد ضرورة لتقسيم هذه البيانات إلى عناصر أكثر فائدة يمكن معالجتها لاحقًا كأن تعرضها في جدول. يمكنك في هذه الحالة استخدام التابع ()split، وهو تابع يأخذ في أبسط أشكاله معاملًا واحدًا هو المحرف الذي تحدث عنده عملية تقسيم السلسلة. ملاحظة: هذا التابع هو تابع لمعالجة السلاسل النصية لكنه يعيد مصفوفة لذلك أشرنا إليه في هذا المقال. ولمعرفة طريقة عمل ()split اتبع الخطوات التالية: أنشئ السلسلة النصية التالية في طرفية جافا سكربت ;"const data = "Manchester,London,Liverpool,Birmingham,Leeds,Carlisle افصل السلسلة عند المحرف ,: const cities = data.split(","); cities; حاول حساب طول المصفوفة الجديدة واستخلص بعض عناصرها: cities.length; cities[0]; // the first item in the array cities[1]; // the second item in the array cities[cities.length - 1]; // the last item in the array بإمكانك عكس العملية باستخدام التابع ()join: const commaSeparated = cities.join(","); commaSeparated; كما يمكن تحويل المصفوفة إلى سلسلة نصية باستخدام التابع ()toString الذي يعده البعض أبسط من ()join لأنه يأخذ معاملًا وحيدًا، لكنه أكثر محدودية فلا يمكنه الفصل سوى عند المحرف , على عكس ()join الذي يمكن أن تحدد فيه أكثر من محرف لفصل السلاسل. const dogNames = ["Rocket", "Flash", "Bella", "Slugger"]; dogNames.toString(); // Rocket,Flash,Bella,Slugger تطبيق عملي: طباعة قائمة منتجات بالعودة إلى مثالنا السابق عن قائمة المنتجات وأسعارها التي نريد إدراجها في فاتورة ثم نحسب إجمالي الفاتورة ونطبعها في اﻷسفل. ستجد في المحرر التفاعلي التالي مجموعة من التعليقات المرقمة، ويحدد كل تعليق مكانًا لكتابة شيفرة معينة: تحت التعليق number 1// ستجد عددًا من السلاسل النصية التي تضم كلا منها اسم المنتج وسعره ويفصل بينهما فاصلة. والمطلوب منك تحويلها إلى مصفوفة وتخزينها ضمن المتغيّر products أنشئ حلقة for...of تحت التعليق number 2// كي تمر على جميع عناصر المصفوفة السابقة. اكتب تحت التعليق number 3// شيفرة لفصل عناصر المصفوفة السابقة () إلى عنصرين يضم اﻷول الاسم والثاني السعر. إن لم تكن متأكدًا من طريقة تنفيذ اﻷمر راجع مقال [توابع جافا سكريبت اﻷصلية للتعامل مع النصوص]()، أو عد إلى فقرة التحويل بين المصفوفات والسلاسل النصية التي عرضناها قبل قليل. ويجب عليك أيضًا أن تحوّل السعر في السطر السابق من نص إلى عدد. يمكنك العودة إلى مقال التعامل مع النصوص في جافا سكريبت كي تتذكر آلية تنفيذ اﻷمر. ستجد متغرًا باسم totalوقد أسندت إليه القيمة 0. نطلب إليك أن تضيف سطرًا ضمن الحلقلة الموجودة أسفل التعليق number 4// ﻹضاف سعر العنصر الحالي إلى قيمة المتغير total عند كل تكرار للحلقة حتى نحصل في النهاية على إجمالي السعر أسفل الفاتورة، وقد تحتاج إلى استخدام عامل إسناد مناسب. غيّر السطر أسفل التعليق number 5// لتصبح قيمة المتغيّر مطابقة للسلسلة "العنصر الحالي — سعر العنصر الحالي$" مثل "Shoes — $23.99" عند كل تكرار كي تُطبع المعلومات الصحيحة لكل منتج ضمن الفاتورة. وتُنفّضذ العملية بضم بسيط لسلسلتين نصيتين. أضف القوس { أسفل التعليق number 6// ﻹنهاء حلقة for...of. See the Pen js-array-1 by Hsoub Academy (@HsoubAcademy) on CodePen. تطبيق عملي: نتائج البحث الخمسة الأولى يظهر استخدام مهم للتابعين ()push و ()pop عندما تريد أن تحدّث سجلًا لعناصر نشطة في تطبيق ويب، كأن يكون لديك تطبيق يعرض رسومًا متحركة ويضم عددًا كبيرًا من الكائنات مثل الخلفية وعناصر اخرى وتريد لسبب أو ﻵخر عرض 50 كائنًا فقط معًا. فعند إضافة عناصر جديدة لمصفوفة الكائنات تّحذف عناصر أقدم ليبقى عدد الكائنات المعروضة 50. في تطبيقنا هذا سنبسط اﻷمر أكثر، إذ سنفترض وجود محرك بحث وهمي يضم صندوق بحث، ومن المفترض عرض قائمة بآخر خمس عمليات بحث عند إدخال أي شيء في صندوق البحث. وعند تجاوز عمليات البحث 5 عمليات تُحذف العملية اﻷقدم وتضاف العملية الجديدة كي يبقى عدد عناصر القائمة 5. ملاحظة: قد تكون قادرًا في تطبيقات البحث الفعلية على النقر على زر ما لاستعادة جمع عمليات البحث التي جرت وطريقة لعرض كل النتائج. ﻹنجاز اﻷمر: أضف سطرًا تحت التعليق number 1// الذي يضيف عملية البحث المدخلة مؤخرًا إلى بداية المصفوفة، ويمكن الحصول على هذه القيمة من خلال اﻷمر searchInput.vlue. أضف سطرًا تحت التعليق number 2// كي يزيل العنصر الموجود في آخر المصفوفة حاليًا. See the Pen js-array-2 by Hsoub Academy (@HsoubAcademy) on CodePen. الخلاصة لا بد وأنك استنتجت أهمية المصفوفات بعد إكمال قراءة هذا المقال، وستجدها في كل مكان في شيفرة جافا سكريبت وعادة بالتشارك مع حلقات كي تكرر نفس العمليات على كل عنصر من عناصرها. أما اﻵن وقد انتهيت من هذه السلسلة من التعليمات التي شرحنا فيها أساسيات جافا سكريبت، خذ قسطًا من الراحة واستعد للسلسلة القادمة التي سنوضح فيها مواضيع أكثر تقدمًا في لغة جافا سكريبت مثل العبارات الشرطية واتخاذ القرار في جافا سكريبت والتعامل مع الدوال البرمجية وغيرها من المفاهيم الضرورية لأي مطور. ترجمة -وبتصرف- للمقال Arrays اقرأ أيضًا المقال السابق: توابع التعامل مع النصوص في جافا سكريبت فهم المصفوفات في الجافاسكربت البحث والترتيب في المصفوفات Array في جافا كيفية استخدام وظائف المصفوفات في الجافا سكريبت – توابع التعديل تعلم جافا سكريبت
  3. البارحة
  4. وعليكم السلام ورحمة الله وبركاته. مرحبا ربيع . ستجد الان خانة جديدة ظهرت فى شريط التنقل تسمى دوراتى يمكنك الضغط عليها للدخول الى محتوى الدورة التى قمت بشرائها . ويمكنك قراءة هذه الاجابة لمعرفة كيفية تصفح الدورات على الموقع. ولا تقلق اذا ما احتجت اى مساعدة فجميع المدربين هنا على موقع الاكادمية متواجدون فى كل الاوقات لمساعدة الطلاب . بالتوفيق لك ان شاء الله.
  5. السلام عليكم با اخوه انا اشتركت في الدور لو سمحت لو لو سمحت كيف اتعلم وابدا بالتعلم ارسلو لي تم الاشتراك بس ادخل عليه نفس الشي اشترك الان ممكن تقولي اش المشكله كيف ومن أين ابدا
  6. السلام عليكوم ورحمة الله و بركاته اخواني في الله احتاج للمساعدة في تحويل روابط المنتدى من php إلى html حيث اني استخدمت الكود في هذا الموضوع :: : و السيرفر يعطي خطأ 404
  7. مرحبا اتكلم عن دوره تطوير واجهات المستخدم المعذره علا عدم التوضيح سابقا
  8. سيتم الرد عليك بخصوص الأمر لا تقلق، أرجو الإنتظار. شكرًا لتفهمك.
  9. بشكل عام، لا يتم إدراج أوامر قواعد البيانات بشكل مباشر داخل المخططات الانسيابية (Flowcharts). السبب في ذلك هو أن المخططات الانسيابية تركز على تدفق العمليات والمنطق، وليس على تفاصيل التنفيذ الفنية مثل أوامر قواعد البيانات. بدلاً من ذلك، يتم تمثيل التفاعل مع قاعدة البيانات في المخطط الانسيابي باستخدام رموز وعمليات عامة، مثل: * رمز الإدخال/الإخراج: يستخدم لتمثيل عملية قراءة البيانات من قاعدة البيانات أو كتابة البيانات إليها. * رمز العملية: يستخدم لتمثيل عملية معالجة البيانات المسترجعة من قاعدة البيانات أو التي سيتم تخزينها فيها. * رمز القرار: يستخدم لتمثيل الشروط والاختيارات التي تعتمد على البيانات المسترجعة من قاعدة البيانات. مثال: لنفترض أنك ترسم مخططًا انسيابيًا لعملية تسجيل الدخول إلى موقع ويب. يمكن تمثيل التفاعل مع قاعدة البيانات كالتالي: 1. رمز الإدخال/الإخراج: قراءة اسم المستخدم وكلمة المرور من المستخدم. 2. رمز العملية: إرسال اسم المستخدم وكلمة المرور إلى قاعدة البيانات للتحقق. 3. رمز القرار: إذا كانت بيانات الاعتماد صحيحة، انتقل إلى صفحة الرئيسية. وإلا، أظهر رسالة خطأ. ملاحظة: يمكن تضمين تفاصيل أوامر قواعد البيانات في وثائق منفصلة، مثل مواصفات التصميم أو تعليقات التعليمات البرمجية. أدوات بديلة لتمثيل عمليات قواعد البيانات: * مخططات ER (Entity-Relationship Diagrams): تستخدم لتمثيل بنية قاعدة البيانات والعلاقات بين الجداول. * مخططات UML (Unified Modeling Language): توفر مجموعة متنوعة من المخططات لتمثيل جوانب مختلفة من النظام، بما في ذلك التفاعل مع قاعدة البيانات
  10. اشكرك اخي اتمنى التوفيق لي ولك, لقد أرسلت رسالة للدعم ولم يتم الرد إلى الان
  11. السلام عليكم ، عندما تقوم برسم مخطط التدفق الخاص بخوارزمية تحتوي على عمليات على قواعد البيانات هل يتم إدارج هذه العمليات في الخطط أم نكتفي فقط بذكر أشياء مثل إضافة مستخدم إلى قاعدة البيانات أو حذفه و من هذا القبيل
  12. هل يظهر أخطاء في google console تفقد الأخطاء الخاصة بالصفحات ال none indexed وسبب الخطأ وهل يوجد أخطاء أخرى تتعلق بال index وهل الموقع جديد ام جديد وهل المقالات جديدة ام قديمة
  13. نعتذر لك عن أية مشكلة واجهتك في الدورة، في حال تريد مساعدة بأي شيء أو شرح شيء غير واضح لك فأرجو طرح سؤالك وسيتم مساعدتك من قبل جميع المدربين. وفي حال تريد استرجاع قيمة الدورة عليك التحدث لمركز المساعدة الخاص بأكاديمية حسوب ثم إخبارهم بذلك وسيتم الرد عليك،: https://support.academy.hsoub.com/conversations وأموالك في مأمن وحقك محفوظ فلا تقلق بخصوص ذلك أبدًا. وبخصوص الدورة يمكنك الاستفسار عن أي شيء تريده أسفل دروس الدورة في التعليقات وسيتم شرحها لك بالتفصيل، أو يمكنك استبدال الدورة بدورة أخرى إذا أردت ذلك أيضًا. أتمنى لك التوفيق إن شاء الله.
  14. هل يمكنني استرداد مالي والغاء الدورة ؟ وكم تحتاج الاموال من الوقت حتى تعود ؟اتمنى الرد
  15. السلام عليكم ماذا قبل تعلم اطار عمل لارافيل انا تعلمت بعض من لغة برمجة php من يوتيوب هدا اغلب تعلمته كيفية تعريف متغيرات جمل شرطية if switch جمل تكرار while for do wile المصفوفات بانواعها تعامل مع الوقت والتاريخ تعامل مع رفع ملفات تعلمت opp برمجة كائنية التوجه تعامل مع قواعد بيانات عن طريق mysqli ماذا احتاج لكن افهم اطار عمل لارافيل ياريت نصائحكم اخواني المبرمجين للعلم كل يوم اجد شي جديد عالم كبير برمجة اما احتاج تعلم مزيد في php انا عارف انه اطار عمل لارافيل مبني بلغة php نصائحكم اخواني مبرمجين وبارك الله فيكم
  16. سؤال لكل شخص: عندي مشكلة بموقعي لا أعرف ما هي بالتحديد ولكنة بيختفي من على جوجل. موقعي هو حل سؤال ارجو المساعدة وشكرا
  17. شكراا جدا لحضرتك وعلي المعلومات الجميل ده انا يعني الحمد الله بستفد كثير اوي من حضرتكم جزاكم الله كل خير انا كانت عاوز استخدم المكتبه عشان اسرع واحسن ولكن تمام استخدم لغه ذاته نفسها
  18. هذا الخطأ شائع فى البرمجة وهو ما يسمى overflow اى ان الذاكرة لا تستطيع ان تحمل جميع البيانات فى المتغير . فمثلا المتغير من نوع int64 فى numby يستطيع ان يحمل ارقام من -9223372036854775808 الى 9223372036854775807 واى رقم يتجاوز هذه الارقام ستحدث مشكلة ال overflow اى فائض فان الذاكرة لا تعرف كيف تتعامل مع هذه البيانات الزائدة فتقوم بكتابة بيانات فوق البيانات الحالة فى المتغير مما يسبب ظهور ارقام سالبة او حتى رقم 0 . وهذه مشكلة متعلقة فى numby فهى لا تستطيع ان تتحمل بيانات كثيرة عكس python فانها مرنه حيث تقوم بتغير حجم الذاكرة حتى يتناسب مع المتغير . حيث لاحظ الفرق عند تنفيذ هذين السطرين. print(np.power(2,100)) #0 print((2**100)) #1267650600228229401496703205376 لاحظ فى السطر الاول فان numby تقوم باراجع 0 حيث حدثت مشكلة ال oveflow لان numby لم تستطع ان تتعامل مع العدد الذى اكبر من 9223372036854775807 . اما فى السطر الثانى فان بايثون مرنة حيث تستطيع تغير الذاكرة كما تريد لتتحمل اى قيمة للرقم . وكما اخبرتك من البداية ان المشكلة من الممكن ان تكمن فى numby ولم الحظ ان الرقم الذى يتم الاختبار عليه كبير . ولذلك يمكنك استخدام python بدون اى مكتبة مثل هكذا . def power_of_two(n): power_two = []; for i in range(1,n): power_two.append(2**i) return power_two print(power_of_two(10000)) ستجد ان بايثون لديها القدرة على تحمل اى رقم مهما كان .
  19. لاحظ الإعدادات يوجد حقل باسم index file، عليك به كتابة اسم الملف الرئيسي للمشروع لديك، وبشكل إفتراضي هو index.php يمكنك إنشاء ملف بذلك الاسم، أو تغيير الاسم في حقل index file إلى اسم الملف الرئيسي لديك.
  20. انك تحاول تشغيل السيرفر عند الضغط على run فى برنامج netbeans و هو يتطلب ان يكون هناك ملف الجذر الذى سيتم بدا السيرفر منه . وهو فى الحالة الافتراضية يكون ملف index.php وهو ليس موجود فى ملف المشروع لديك. لذلك الحل هو انشاء ملف index.php او كتابة الملف الذى تريد ان يكون هو ال root للسيرفر .
  21. في php لما اسوي رن ما يرضى يسوي وتطلع لي هذي النافذه
  22. ذلك مذكور في التعليق من البداية يبدوا أنك لم تنتبه إليه:
  23. حاول تغيير اسم ملف php.ini-development إلى php.ini والذي ستجده في المسار التالي: zeffa\.config\herd\bin\<version>\php.ini حيث أنّ zeffa هو مجلد المستخدم لديك في قرص الـ C في مجلد users. وقبل التعديل تأكد من إيقاف جميع الخدمات في herd كالتالي: ثم قم بإعادة التشغيل من منفذ الأوامر: herd restart أو من خلال الواجهة بالضغط على restart أو start all.
  24. تعتمد مكتبة NumPy على مصفوفات متجانسة لتخزين البيانات، مما يعني أن جميع العناصر في المصفوفة يجب أن تكون من نفس النوع، ونوع البيانات المُستخدم لتخزين قوى 2 هو العدد العشري ذو الدقة المزدوجة (float64). على الرغم من أن ذلك النوع من البيانات يمكنه تمثيل أرقام كبيرة، إلا أن له دقة محدودة، مع ازدياد قيمة n، تصبح قوى 2 كبيرة جدًا لدرجة تتجاوز دقة تمثيلها كأعداد عشرية ذوات دقة مزدوجة. وعندما تفقد الأرقام دقتها، يتم تقريبها إلى أقرب قيمة ممكنة ضمن نطاق التمثيل، ولديك يتم تقريب قوى 2 الكبيرة جدًا إلى الصفر. إذاً، عليك استخدام نوع بيانات العدد الصحيح ذي الدقة العالية (int64) لتخزين قوى 2 إذا كانت قيمتها ضمن نطاق تمثيله، لكن أيضًا الحل أحيانًا غير مناسب لجميع الحالات، خاصةً مع قيم n كبيرة جدًا. أنصحك بالإعتماد على مكتبة gmpy2 التي توفر دقة حسابية أعلى من مكتبة NumP وتسمح بحساب قوى 2 بدقة أكبر. أو استخدام بايثون فقط فاللغة قادرة على تنفيذ ما تريد.
  25. ازداد الإقبال على الألعاب ومجالات الترفيه ويزداد يومًا بعد الآخر، حتى باتت تُقام لها مسابقاتٌ بأموالٍ طائلة، وأصبحت صناعةً مرتفعة الأرباح، وهذا زاد من الطلب على مبرمجي الألعاب ورفع من فرصهم التوظيفية، فما هي برمجة الألعاب؟ وما أهم تقنياتها؟ وما مراحل برمجة لعبة إلكترونية؟ ما هي برمجة الألعاب؟ تشير برمجة الألعاب إلى عملية بناء لعبة من الصفر، بدءًا من تصميم الشخصيات وتحديد قواعد اللعبة، مرورًا بتطويرها وتحويلها من فكرة مجردة إلى لعبة رقمية، وصولًا إلى إصدارها للمستخدمين وتحديثها المستمر. ولا تقتصر أهمية برمجة الألعاب على الترفيه والتسلية، وإنما تتعدد فوائدها وتمتد إلى مجالاتٍ أخرى، مثل: تسهيل التعليم: دخلت الألعاب إلى عملية التعليم وزادت الألعاب التعليمية زيادةً ملحوظة في الآونة الأخيرة، فنجد لُعَبًا لتعليم البرمجة، مثل: سكراتش ومايكروسوفوت ميك كود، ويوجد ألعابٌ لتعليم اللغات المختلفة، وألعابٌ أخرى لتعليم مبادئ الرياضيات والفيزياء. تطوير القدرة على الإبداع وحل المشكلات: تحفز غالبية الألعاب الفرد على ابتكار طرق جديدة للتفوق على أقرانه في اللعبة، مما يزيد من قدراته الإبداعية والابتكارية، وكذلك أثناء ابتكار هذه الطرق تجابهه مشكلات عديدة يسعى لحلها، فتتطور عنده مهارة حل المشكلات. تنمية المهارات الناعمة: باتت كثيرٌ من الألعاب تعتمد على تشكيل الفرق واللعب ضمن مجموعات، ما يساعد على تنمية مهارات التعاون والتواصل والقيادة وغيرها. ما لغات برمجة الألعاب الإلكترونية؟ تكثر لغات برمجة الألعاب الإلكترونية، ويشتهر منها أربع لغات، وهم: سي بلس بلس⁦ C++ سي شارب #C⁦ جافا Java بايثون Python لنعرف مزيدًا من المعلومات عن كل لغة واستخدامها في برمجة الألعاب. سي بلس بلس ++C⁦ تعد سي بلس بلس إحدى أهم لغات البرمجة في مجال برمجة الألعاب، إذ لديها قدرة قوية على إدارة الذاكرة والعتاد بكفاءة، كما تتميز الألعاب المطورة باستخدام سي بلس بلس بالسرعة والأداء المرتفع، وكذلك تحظى لغة سي بلس بلس بدعم واسع من محركات الألعاب المختلفة، ما يجعلها لغة مميزة في برمجة الألعاب الثقيلة والمعقدة، ولا يعيب سي بلس بلس سوى صعوبة تعلمها وطول الوقت المتوقع للانتهاء من برمجة لعبة. سي شارب #C⁦⁦ تتشابه لغة البرمجة سي شارب في مميزاتها مع لغة سي بلس بلس، من سرعة إلى إدارة مميزة للعتاد ودعم واسع من مختلف محركات الألعاب، إلا أن سي شارب تعد أقل تعقيدًا وأسرع تعلمًا من سي بلس بلس، ما يجعلها خيارًا مناسبًا للمبتدئين في برمجة الألعاب، وكذلك تعد لغة سي شارب متعددة المنصات؛ أي يمكن باستخدامها برمجة ألعاب لأنظمة تشغيل الحواسيب وأنظمة تشغيل الهواتف سواءً. جافا Java تشتهر لغة جافا في برمجة ألعاب نظام تشغيل أندرويد، وتتميز الألعاب المبنية على لغة جافا بالقدرة الهائلة على التوسع وتحمل الزيادة المستمرة في أعداد المستخدمين دون حدوث أعطال في اللعبة، وكذلك توفر لغة جافا أدواتٍ مميزة للتعامل مع الرسوم Graphics والرسوم المتحركة Animations، ما يساعد المطور على برمجة ألعاب معقدة بصريًا بسهولة. بايثون Python لعل ما يميز بايثون في مجال برمجة الألعاب هو سهولتها، ولذلك تُستخدم لغة بايثون في برمجة الألعاب البسيطة الخالية من التعقيدات الرسومية، وكذلك تُستخدم بايثون للنمذجة الأولية للألعاب المعقدة قبل الشروع في تطويرها باستخدام لغة أخرى. ما أهم التقنيات المستخدمة في برمجة الألعاب؟ تعد التقنيات التي يستخدمها مبرمجو الألعاب عديدة، وأهمها: محركات الألعاب Game Engines برامج التصميم أو النمذجة ثلاثية الأبعادوالتحريك 3D Modeling and Animations برامج تصميم رسومات البكسل Pixel Art محركات الألعاب Game Engines تعد محركات الألعاب بيئات مجهزة لتطوير وتشغيل الألعاب، وتضم مجموعة من المحركات الأخرى، مثل: محرك الفيزياء الذي يساعد المبرمج على محاكاة الحركات الحقيقية في اللعبة، ومحرك الرسوم الذي يعالج الرسوم ثنائية الأبعاد وثلاثية الأبعاد في اللعبة، ومحرك الصوت المسؤول عن معالجة التأثيرات الصوتية في اللعبة، ومحرك الرسوم المتحركة، وغيرها من المحركات. لعل أبرز فوائد محركات اللعبة هي تسهيلها لعملية برمجة الألعاب وتوفيرها للكثير من الوقت على المبرمج، إذ كانت هذه العملية قبلًا شديدة التعقيد، ولكن بفضل محركات اللعبة صارت عملية سهلة وزادت إمكانيات الألعاب من رسوم وأداء وغيرها، ومن أشهر محركات الألعاب نذكر محرك Unity ومحرك Unreal Engine ومحرك جودو Godot. برامج التصميم أو النمذجة ثلاثية الأبعاد والتحريك 3D Modeling and Animations تشير النمذجة ثلاثية الأبعاد إلى عملية التمثيل المرئي للأبعاد الثلاثة وهم الطول والعرض والارتفاع لعنصرٍ في اللعبة باستخدام النقاط والخطوط والمضلعات، مثل: تمثيل إحدى شخصيات اللعبة مرئيًا على هيئة رسم ثلاثي الأبعاد، كما تتضمن نمذجة تحريكات العناصر، علي سبيل المثال نمذجة تحريك النباتات حول الشخصية أثناء سيرها، أو نمذجة سير الشخصية نفسها. تتضمن عملية النمذجة ثلاثية الأبعاد تحديد حجم الكائن أو العنصر وهيئته وتحديد طريقة حركته وتناغمه مع باقي عناصر اللعبة، ويعد التصميم ثلاثي الأبعاد مهمًا لزيادة واقعية اللعبة وتحسين رسومها وجاذبيتها، ومن أشهر البرمجيات المستخدمة في هذه العملية: برنامج Blender وAutodesk. برامج تصميم رسومات البكسل Pixel Art يعد فن البكسل فنًا رقميًا يهتم بتوليد رسوم بتفاصيل شديدة الدقة، إذ يعمل مصمم رسوم البكسل على تصميم الصورة أو الرسم على مستوى البكسل، وهو الوحدة الأصغر من مكونات الصورة، ولتبيين هذا المفهوم بدقة أكبر انظر الصورة التالية: ولعل أبرز لعبة مبنية على هذا النوع من الرسوم هي لعبة ماينكرافت الشهيرة، ومن أشهر برامج تصميم فن البكسل نذكر برنامج Aseprite وبرنامج PyxelEdit. ما مراحل برمجة لعبة فيديو؟ تتضمن عملية برمجة لعبة فيديو عديدًا من المراحل، منها: التخطيط: تبدأ عملية برمجة لعبة فيديو بالتخطيط لها، وتبدأ عملية التخطيط بابتداع فكرة ثم تطوير هذه الفكرة، كما تضم مرحلة التخطيط عملية تحديد نوع اللعبة؛ هل هي لعبة رعب أم حرب أم رياضة أو غيرها؟ وتضم أيضًا تحديد طراز اللعبة؛ ثنائية الألعاب كانت أو ثلاثية الأبعاد، وكذلك تتضمن تحديد محرك الألعاب ولغة البرمجة والتقنيات التي ستستخدمها لبرمجة اللعبة. ما قبل التطوير: تضم هذه المرحلة خطوات عديدة، فمنها مثلًا كتابة قصة اللعبة وخلق عالمها وشخصياتها وتحديد صفات كل شخصية، ومنها أيضًا النمذجة الأولية للعبة وإنشاء تصاميم أولية لأشكال الشخصيات، وكذلك تحديد أسلوب التصميم والألوان المستخدمة في اللعبة حسب القصة ونوع اللعبة. التطوير: تعد المرحلة الأهم والأطول في عملية برمجة لعبة فيديو، ويعمل خلالها المطور على كتابة شيفرات اللعبة وتحويل التصاميم الأولية إلى لعبة حقيقية، كما يعمل فنانو الصوت على تسجيل الحوارات بين الشخصيات، ويعمل المصممون على تصميم الرسوم المتحركة للعبة، ويعمل مصممو الصوت على إضافة التأثيرات الصوتية للعبة، ثم تُجمع هاته الإبداعات المختلفة معًا عبر محرك اللعبة لتكون اللعبة جاهزة للاختبار. الاختبار: يُختبر في هذه المرحلة جميع أجزاء اللعبة، بدءًا من الشيفرات لاستخراج الثغرات الأمنية وتنقيحها، مرورًا بالأداء لتحسينه وتحسين تجربة المستخدم الكلية، وصولًا إلى تناغم الأجزاء المختلفة من اللعبة عمومًا مع بعضها، وكذلك تُختبر مدى صعوبة اللعبة، وغيرها من الأجزاء المختلفة في اللعبة، ثم تُجمَع الأخطاء المكتشفة وتُنقَّح قبل إطلاق اللعبة. ما قبل الإطلاق: تتضمن هذه المرحلة التسويق للعبة وكتابة إعلانات تسويقية عنها، كما تتضمن إطلاق نسخة مبدئية للعبة لتجربتها والحصول على آراء أولية قبل الإطلاق الرسمي لها، ما يساعدك على تحسين اللعبة وإطلاقها في أفضل هيئة لها. الإطلاق: أصبحت اللعبة جاهزة وحان موعد الإطلاق؛ في هذه المرحلة تنشر اللعبة على المنصات المخطط لها، ولكن لم تنتهِ المراحل بعض فلا تزال اللعبة تحتاج تحديثاتٍ. التحديث: لا تنتهي هذه المرحلة أبدًا، إذ تستمر في إصدار التحديثات تحديثًا بعد الآخر لإضافة مميزات جديدة تزيد من متعتها وتُحسِّن من تجربة المستخدم، كما تسد الثغرات والمشكلات المكتشفة بعد إطلاق اللعبة. ما الفرق بين برمجة ألعاب الجوال وبرمجة ألعاب الحاسوب؟ تتعدد الفروق بين برمجة ألعاب الجوال وبرمجة ألعاب الحواسيب، ومن أهمها: الإمكانيات: يفوق عتاد الحواسيب عتاد الجوالات قوةً وقدراتٍ، ما يزيد من إمكانيات ألعاب الحواسيب، بدءًا من الرسوم فتكون رسوم ألعاب الحواسيب أكثر تعقيدًا، مرورًا بالأداء المرتفع لألعاب الحواسيب، وصولًا إلى توسعية اللعبة وحجم بياناتها وتعقيدها. محركات الألعاب: تكثر محركات ألعاب الحواسيب وتتفوق على محركات ألعاب الجوال في المواصفات والإمكانات، ومن أشهرها: محرك الألعاب Unreal Engine ومحرك CryEngine، بينما يعد Unity محرك الألعاب الأشهر في برمجة ألعاب الجوال. التكلفة: تعد تكلفة تطوير لعبةٍ للحاسوب أكثر من تكلفة تطوير لعبة للجوال، إذ تتضمن ألعاب الحاسوب تعقيداتٍ أكثر وتأخذ أوقاتًا أطول لبرمجتها من ألعاب الجوال. الخاتمة استكشفنا في مقال اليوم عالم برمجة الألعاب الإلكترونية وحظينا بنظرةٍ شاملةٍ عن ماهيتها وتعرفنا على مجموعة متنوعة من لغات البرمجة المستخدمة في تطوير الألعاب، مع تسليط الضوء على مميزات كل لغة وأهم تقنياتها ومحركاتها، ومراحل تطوير لعبة والفرق بين برمجة ألعاب الجوال وبرمجة ألعاب الحاسوب. وختامًا إذا كنت مهتمًا بمجال برمجة الألعاب ننصحك بأن تبدأ رحلتك في تطوير الألعاب بخطوة صحيحة من خلال تحديد متطلبات اللعبة التي تود صناعتها واختيار اللغة ومحرك الألعاب المناسب، والاستمتاع في تنفيذ أفكارك الإبداعية وتحويلها للعبة مميزة مليئة بالتحديات والإنجازات. اقرأ أيضًا ألعاب الفيديو: تطورها وأهميتها وخطوات برمجتها كيف تصبح مبرمج ألعاب فيديو ناجح تعرف على أهمية صناعة الألعاب الإلكترونية تعرف على أفضل برنامج تصميم الألعاب الإلكترونية أشهر أنواع الألعاب الإلكترونية
  1. عرض المزيد
×
×
  • أضف...