آموزش برنامه‌نویسی پایه _ بخش 1


در این مطلب و ادامه‌ی آن قصد دارم برنامه‌نویسی و بازی‌سازی را از پایه به شما آموزش بدهم. این آموزش حاصل تجربیات چندین سال شخصی‌ام در این مسیر است. شاید این راه برای شما سخت باشد و قصد دارم با این مطالب مسیر را کمی هموار‌تر کنم. اگر قصد دارید به شخصی آموزش بدهید یا آموزش ببینید این مطلب و در ادامه بقیه‌ی آموزش ها احتمالا برای شما مفید هستند. در این سری از مطالب از الگوریتم و فلوچارت و زبان بیسیک شروع کرده، و در ادامه به آموزش زبان C# می‌پردازیم و بعد از آن با موتور یونیتی آشنا می‌شویم.




در برنامه‌نویسی نیز مانند زندگی روزمره، همیشه با مسائلی حل‌نشده روبه‌رو هستیم که نیازمند راه‌حل هستند و اساس برنامه‌نویسی نیز همین است، «پیدا کردن راه‌حل». اما قبل از پیدا کردن راه حل، ما باید به یک شناخت مناسب از مساله برسیم و آن را بهتر را درک کنیم تا بتوانیم به بهترین راه‌حل برسیم.

مراحل بالا به ترتیب برای پیدا کردن بهترین راه‌حل
مراحل بالا به ترتیب برای پیدا کردن بهترین راه‌حل


شناخت دقیق

در ابتدا فکر کنید که این مسئله چه اطلاعاتی به شما می‌دهد و چه چیزی از شما می‌خواهد، همچنین برای تبدیل اطلاعات به خروجی مورد نظر نیاز به چه پردازش‌هایی است. در اینجا بهتر است با چند اصطلاح آشنا شوید:

سیستم (system): مجموعه‌ای از اجزای مختلف که معمولاً برای رسیدن به یک هدف با یکدیگر در ارتباط و تعامل هستند. هر سیستم دارای ورودی، خروجی و پردازش مشخصی است.

ورودی (Input): داده هایی که توسط سیستم دریافت می‌شوند.

خروجی (Output): سیگنال‌ها یا اطلاعاتی که سیستم آن‌ها را ارسال می‌کند.

پردازش (process): مجموعه‌ی عملیاتی که بر روی داده‌های ورودی انجام می‌شود تا آن را به اطلاعات خروجی مد نظر تبدیل کند.

داده (Data): مجموعه‌ای از اعداد، ارقام، نشانه‌ها و ... که هیچ گونه عملیاتی روی آن‌ها انجام نشده و اصطلاحا خام هستند.

اطلاعات (Information): مجموعه‌ای از داده‌ها که طی عملیات‌های منطقی پردازش می‌گردند و تبدیل به اطلاعاتی می‌شوند که دانشی را به کاربر منتقل می‌نمایند.
پس اطلاعات از داده‌های پردازش شده تشکیل شده است.

برای درک بهتر این مفاهیم به مثال زیر توجه کنید:

معلمی می‌خواهد میانگین نمرات کلاسش را حساب کند. ورودی او 30 نمره ای (داده) است که در دفترش از هر دانش‌آموز دارد. عملیاتی که انجام می‌دهد جمع و تقسیم اعداد است و در نهایت میانگین نمرات کلاس (اطلاعات) را به عنوان خروجی دارد.

تمرین:
داده، عملیات و اطلاعات را برای مثال های زیر بیان کنید
1. محاسبه مساحت مستطیل به عرض و طول 2 و 4
2. سرعت ماشینی 20 کیلومتر بر ساعت است. سرعت آن بر حسب متر بر ثانیه چقدر است؟
جواب تمرین‌های بالا در آخر این مطلب قابل مشاهده هستند.

تجزیه و تحلیل

در مرحله‌ی دوم باید مسئله را برای خود تجزیه کنید. اگر مسئله قابل حل است و راه‌حل آن به ذهنتان می‌رسد به مرحله‌ی بعد بروید، اما اگر این‌طور نیست بهتر است آن را به مسئله‌های کوچک‌تری تبدیل کنید. اگر برای این ریزمسئله‌ها نیز جوابی پیدا نکردید مجددا آن‌ها را به مسائل کوچک‌تری تبدیل کنید.

برای مثال اگر شما بخواهید یک ماشین بسازید، هیچ‌گاه نمی‌توانید آن را به صورت یکجا آماده کنید، بلکه باید آن را قطعات کوچک‌تری تقسیم کرده، آن ها را آماده و بعد قطعات را مونتاژ کنید.

این در مسائل کوچک‌تر نیز قابل فهم است:

  • اگر می‌خواهید میانگین نمره 30 دانش آموز را حساب کنید (مسئله)
  • باید در مرحله اول 30 نمره را با هم جمع کنید (ریزمسئله اول)
  • و سپس آن را تقسیم بر تعداد کنید (ریز مسئله دوم)
تمرین:
مسائل زیر را به ریزمسئله تبدیل کنید.
3. محاسبه حجم یک مکعب مستطیل به ابعاد 2 ، 3 و 4
4. ساخت بازی Shoot Em Up
جواب تمرین‌های بالا در آخر این مطلب قابل مشاهده هستند.

طراحی راه‌حل

در این مرحله ما باید راه‌حل را طراحی کنیم و سپس آن را تبدیل به کد کنیم. خیلی وقت ها مسائلی که با آن‌ها رو‌به‌رو شده‌ایم قبلا توسط افراد دیگر حل شده‌اند. در این حالت شما به راحتی با سرچ کردن در اینترنت می‌توانید آنها را پیدا کنید و زمان خود را صرف بهبود آن کدها کنید. همچنین ممکن است در برنامه‌های قبلی‌ای که نوشته‌اید به این مسئله برخورد کرده باشید و بتوانید از آرشیو کدهای قدیمی خود استفاده کنید.

(درباره‌ی استفاده از کدهای قدیمی، من در یکی از جشنواره‌های بازی‌سازی با فردی آشنا شدم که می‌گفت با استفاده از آرشیو بسیار قوی و مرتبی که از کدهای قبلی خود دارند توانستند یک بازی را از صفر تا صد در یک هفته بزنند، در صورتی که اگر از کد‌های آرشیو خود استفاده نمی‌کردند این پروسه دو یا سه ماه طول می‌کشید.)

اما اگر در ابتدا راه هستید این راه اصلا پیشنهاد نمی‌شود، چون شما در این مرحله باید بتوانید خلاقیت خود را بالا برده و توانایی تفکر خود را افزایش دهید. پس بهتر است حداقل به تمامی مسائلی که برخورد می‌کنید یک ساعت فکر کنید و بعد اگر راه‌حلی به ذهنتان نرسید سرچ کنید و ایده بگیرید، و البته کدها را کپی نکنید!

زمانی که شما گمان می‌کنید به یک مانع بزرگ برخورد کرده‌اید دقیقا همان زمانی است که شما می‌توانید به موفقیت‌های بسیار زیادی دست پیدا کنید.

حال اگر می‌خواهید خودتان مسئله را حل کنید، یا سرچ پاسخگو شما نبوده است، باید از تفکر منطقی استفاده کنید. منظور از تفکر منطقی سپری کردن تمام مراحل بالا و بعد به دنبال بهینه‌ترین راه‌حل بودن است. برای مسائل به این فکر کنید که آیا این راه‌حلی که پیدا کردید در تعداد بالا نیز پاسخگو است؟ آیا می‌توانم بعدا آن را تغییر دهم؟ آیا راه‌حل بهتری وجود ندارد؟ اگر این قسمت از عملیات را پاک کنم نتیجه فرقی می‌کند؟ و سوالاتی از این قبیل ...

برای مثال به شما گفته‌اند تعداد اعداد زوج از 1 تا 20 را حساب کنید

در ابتدا شاید شما تک تک اعداد زوج را پیدا کنید و بشمارید، اما آیا این روش در تعداد بالا نیز کارآمد هست؟ پس از نظر منطقی به آن نگاه کنید. در اعداد به ترتیب از هر دو عدد یکی از آن‌ها زوج است، پس در بیست عدد ده عدد زوج وجود دارد.




تا به این‌جا با برخوردی که با مسائل در نگاه اول باید داشته باشیم آشنا شدیم. اگر از این اصول در تمامی برنامه‌هاتون استفاده کنید، تضمین می‌کنم که کار برای شما بسیار آسان تر خواهد شد و سرعت پیشرفت بیشتری داشته باشید.

در بخش بعدی با الگوریتم و مفاهیم و شروط آن آشنا می‌شویم.




پاسخ تمرین ها:

1. داده ها = 2 و 4
عملیات = ضرب این دو برای محاسبه مساحت
اطلاعات = مقدار مساحت که برابر عدد 8 می‌شود

2. داده ها = 20 کیلومتر بر ساعت
عملیات = تبدیل کیلومتر‌ بر‌ ساعت به متر‌ بر‌ ثانیه بر اساس فرمول دارد
اطلاعات = سرعت بر اساس متر‌ بر‌ ثانیه که با 5.555 برابر است

3. ابتدا مساحت یک وجه مکعب را حساب کرده (ریزمسئله 1) بعد آن را در ارتفاع ضرب می‌کنیم تا حجم را به دست آوریم. (ریزمسئله 2)

4. برای ساخت این بازی ما مکانیک‌های مختلف داریم. هر کدام از آن‌ها را حل می‌کنیم تا به کلیت بازی برسیم. مکانیک 1 = حرکت موشک
مکانیک 2 = حرکت دشمن ها
مکانیک 3 = پرتاب تیر موشک
مکانیک 4 = از بین رفتن دشمن ها
مکانیک آخر باخت یا برد