الشبكة العربية لمطوري الألعاب

مبتدئ  Bushido مشاركة 1

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

تحية طيبة للقائمين على هذا الموقع الرائع وكل الاخوة الاعضاء الكرام.

انا بدأت بتعلم لغة #C  من خلال فجوال ستوديو 2003 قبل مدة و تعلمت بعض الـ keyword مثل if else integer string والحمد لله بلا مشاكل حتى الآن لكن وصلت لدرس اسمه Loops وانا استصعبته نوعاً ما ولم افهمه بشكل جيد.. اليكم هذا الكود وارجو شرح ماذا يفعل بالضبط وهل هو مهم في عالم برمجة الألعاب؟
وكيف اتقن استخدامه؟ بصراحة انا خائف منه.. حيث انني مازلت بالبداية وهذا صعب علي فكيف سيكون الحال بعد اسبوعين او شهر؟ بالتأكيد ستصعب الأكواد أكثر.. ومما زاد الأمور تعقيداً.. المدرس ليس عربياً كي افهم منه بشكل اسرع.
من فضلكم ارجو المساعدة..

ولكم أجمل تحية


أخوكم

عمر

Bushido

// TODO 1: writing loops

int total = 10;
for (int i = 10; i<=15; i++)
{
total=(total+i);
}
Output ("Result: " + total);

موهوب  حسن أيوب مشاركة 2

أخي الكريم,
ان ال"loop" هي عبارة عن حلقات تكرار, حيث عندما يأتي البرنامج الى مرحلة التكرار ويدخل بها, يظل ينفذ جملا برمجية حتى ينتفي الشرط ليخرج من التكرار ويتابع عمله. وهو أساسي في كل البرامج وتحديد الألعاب, حيث أن التكرار يحدث في كل جزء من الثانية في الألعاب. وسأشرح لك مثلا بسيطا لتفهمه:
تخيل أنك تريد أن تطبع على الشاشة كلمة Welcome, فهنا عليك أن تكتب مرة Console.WriteLine("Welcome"); 100, ولكن باستخدام التكرار تكتب الجملة السابقة مرة واحدة وتجعل التكرار يكررها 100 مرة, مما يوفر الكثير من الوقت. ومن حسناته أيضا أنك لو أردت أن تغير الجملة المكتوبة على اشلاشاة, فبدلا أن تغيرها 100 مرة في كل سطر, يكفي أن تغيرها مرة واحدة داخل التكرار وهكذا...
لاتقانه عليك بالممارسة والممارسة والممارسة, وقراءة العديد من الكودات كما الحال في كل أمور البرمجة. ولا داعي للخوف فكل جديد صعب, ومع التكرار يصبح عاديا, أرأيت ما أجمل التكرار!؟
والتكرار من نوع for له شكل معين وهو
for(1;2;4)
{
3
}
حيث يقوم بتنفيذ رقم 1 ثم السؤال عند رقم 2, في حال الاجابة صح ينفذ الرقم 3, ثم ينفذ رقم 4, ثم يعود الى السؤال في رقم 2, واذا كان الجواب خاطئا يخرج ولا ينفذا رقم 3, وان كان صحيحا يعاود الدخول مجددا وهكذا.
 
بالنسبة للكود الذي أدرجته فانه يعني:
السطر الأول: هو عبارة عن تعليق, أي شرح معين لا يدخل في الكود.
السطر الثاني: تعريف لمتغير من نوع رقم اسمه total ويحمل القيمة 10.
السطر الثالث: يقوم بعمل تكرار, حيث يبدأ بالرقم 10 ويسأل هل ال10 أصغر أو تساوي 15؟ وهذا صحيح بالفعل, فيقوم التكرار بالدخول لتنفيذ محتوى التكرار وهو زيادة 10 الى قيمة الtotal وتصبح القيمة 20 ويخزنها في total ولكن لا ينتهي التكرار هني لأن قيمة الi المعرفة هي 10 وهي أصغر من 15, فينفذ i++ وبالتالي تصبح القيمة للi هي 11, وهنا يعيد السؤال هل 11 أصغر أو تساوي 15؟ وهذا صحيح فيعيد الدخول الى التكرار ويزيد هذه المرة 11 الى 20 لتساوي 31, وينفذ i++ ثم يعيد السؤال ذاته والاجابة ايضا صحيحة لأن قيمة i والتي هي 12 أصغر أو تساوي 15, فيدخل التكرار مجددا وينفذ محتواها بزيادة 12 الى 31 فتصبح 43, ومن ثم يزيد 1 على i فتصبح الi تساوي 13, ويسأل مجددا والجواب ايجابي ويعاود الدخول لتصبح total  تساوي 43 زائد 13 يساوي 56 ويزيد واحد على i ومن ثم يسأل من جديد وبما أنه أيضا 14 أصغر من 15 يدخل مجددا وتصبح الtotal تساوي 56+14 تساوي 70, ويزيد واحد على i فتصبح 15 ويسأل مجددا هل 15 أصغر أو تساوي 15 والجواب مجددا ايجابي فيدخل الى التكرار وتصبح قيمة total تساوي 70 + 15 وبالتالي تساوي 85, ويعيد زيادة 1 الى قيمة i فتصبح 16 وهنا يسأل مجددا فنرى أن 16 ليست أصغر أو تساوي 15 وبالتالي هنا يخرج من التكرار ولا ينفذ السطر الخاص بزيادة قيمة i الى لtotal.
ثم ينفذ السطر خارج التكرار وهو استدعاء الfunction output والتي ستطبع Result: 85.
 
أتمنى أن أكون قد شرحتها بشكل جيد لك, وبالتوفيق دائما.

لا شيء مستحيل. الشي الوحيد المستحيل هو قول مستحيل. لذا لا تقلها.

خبير مدير وسام البهنسي مشاركة 3

وعليكم السلام،
 
كما قال حسن. الحلقات والجمل الشرطية وتقريباً جميع التعابير البرمجية الأخرى هامة وتــُستخدم يومياً في برمجة الألعاب. لذلك أنصح بالابتعاد عن فكرة "هذه الميزة ليست مفيدة في الألعاب.. لن أتعلمها"..
 
الآن لندخل في الحلقات. الحلقات هي وسيلة برمجية لتنفيذ مجموعة تعليمات بشكل متكرر ومتتالي. كما المثال الذي طرحه حسن، لو أردتَ أن تكتب برنامجاً يقوم بطباعة كلمة "مرحباً" 100 مرة، فبدلاً من كتابة سطر الطباعة 100 مرة هكذا:



Console.WriteLine("مرحباً");
Console.WriteLine("مرحباً");
Console.WriteLine("مرحباً");
Console.WriteLine("مرحباً");
Console.WriteLine("مرحباً");
Console.WriteLine("مرحباً");
Console.WriteLine("مرحباً");
.
.
.
 
 
فتستطيع استبدال ذلك بحلقة:


for (int i=1; i<=100; i++)
{
  Console.WriteLine("مرحباً");

}
 
 
كل التعليمات بين الأقواس الكبيرة {  }  سيتم تكرارها 100 مرة. هذه الأقواس تشكل "جسم الحلقة" وهو القسم الذي يحوي التعليمات التي تود تكرارها.
 
الآن القسم الثاني من بنية الحلقة هو السطر الأول في المثال أعلاه، وهو الذي يحدد عدد مرات التكرار (لاحظ الرقم 100). وهذا السطر في الحقيقة مكون من ثلاث عبارات مفصولة عن بعضها بفاصلة منقوطة ;
 
حلقة for تعمل بطريقة بدائية نوعاً ما. فأنت تخبرها بأن تقوم بالعدّ من 1 إلى 100 خطوة بخطوة. وعند كل خطوة عدّ، على الحلقة أن تقوم بتنفيذ التعليمات في جسم الحلقة.
 
العبارة الأولى في السطر الأول هي مجرد إعلان عن متغير اسمه i ويحمل القيمة 1. تخيل السطر مكتوباً لوحده... سيصبح مفهوماً وواضحاً جداً:


int i=1;
 
هذا الرقم يخبر الحلقة بأن تبدأ العدّ من الرقم 1. الآن العبارة الثانية تدعى "شرط الحلقة"، وهذا الشرط يتم التحقق منه قبل تنفيذ العمليات في جسم الحلقة. فإن لم يتحقق، فستتوقف الحلقة عن العمل فوراً. الشرط أعلاه يقول:


i<=100;
 
أي، استمر بالعدّ والتكرار طالما المتغير i الذي أعلنـّا عنه سابقاً لم تتعدّ قيمته الـ 100 بعد. تستطيع طبعاً تغيير هذه القيمة لما يناسبك وتستطيع تغيير الشرط لأي شيء آخر... مثلاً:


i==100;
 
هو أيضاً شرط صالح ☺
 
بقيت التعليمة الثالثة في رأس الحلقة، وهي:


i++;
 
وهي أيضاً تعليمة بسيطة نعرف معناها... زد قيمة i واحداً!  فلو كانت 0 تصبح 1، ولو كانت 1 إجعلها 2، ولو كانت 2 إجعلها 3... وهكذا. التعليمة الثالثة يتم تنفيذها مباشرة في كل مرة بعد الانتهاء من تنفيذ التعليمات في جسم الحلقة.
 
لو نشرنا هذه التعليمات المتراكبة نحصل على شيء مشابه لـ :



int i=1;  // العبارة الأولى في رأس الحلقة
 
if (i <= 100)  // العبارة الثانية في رأس الحلقة
{
  Console.WriteLine("مرحباً");  // loop body جسم الحلقة
  i++;  // العبارة الثالثة في رأس الحلقة
 
  // التكرار مرة أخرى...
 
  if (i <= 100)
  {
    Console.WriteLine("مرحباً");
    i++;
 
    // التكرار مرة أخرى...
 

    if (i <= 100)
    {
      Console.WriteLine("مرحباً");
      i++;
 
      // التكرار مرة أخرى...
      .
      .
      .

    }
  }

}
 
 
 
من الأمور الجميلة في حلقة for، هو أنك ضمن التعليمات داخل جسم الحلقة تستطيع معرفة رقم مرة التكرار الحاصل حالياً. هذا الرقم محفوظ في المتغير i في الحقيقة.. فلو جعلنا الكود هكذا:


for (int i=1; i<=100; i++)
{
  Console.WriteLine(i);
}
 
فإن الخرج سيظهر:


1
2
3
4
5
6
7
.
.
.
98
99
100
 
تستطيع الاستفادة من هذا الرقم بأي شكل تريده داخل جسم الحلقة... الآن لو نعود للمثال الأصلي الذي طرحتــَه أنت:
 


int total = 10;
for (int i = 10; i<=15; i++)
{
  total=(total+i);
}
Output("Result: " + total);

ولنحلله معاً... حلقة تبدأ العد من الرقم 10... وتستمر في العد وصولاً للرقم 15... ونقوم بالعد واحداً واحداً... أي أن قيمة i عند نشر التكرار ستكون:

10
11
12
13
14
15
 
في كل تكرار، نقوم بأخذ رقم التكرار وإضافته إلى قيمة متغير يدعى total، والذي بدايةً كان يحمل القيمة 10... إذن ما سيحصل هو:



total = 10     // في البداية
total = 10 + 10 = 20
total = 20 + 11 = 31
total = 31 + 12 = 43
total = 43 + 13 = 56
total = 56 + 14 = 70
total = 70 + 15 = 85
 
تمت. هل توضحت الأمور الآن؟

وسام البهنسي
مبرمج في إنفيديا وإنفريمز