دانشگاه شهید بهشتی
دانشکده مهندسی برق و کامپیوتر
ترم دوم ۹۰-۸۹

برنامه‌سازی پیشرفته

گروه درسی بر روی گوگل
تارنامه ارسال تمرینات
استاد : دکتر آزاده منصوری
برنامه‌سازی پیشرفته - دانشگاه شهید بهشتی - ترم دوم سال تحصیلی ۹۰-۸۹ | پروژه پایانی
آخرین به روز رسانی : ۶ خرداد ۹۰

پروژه پایانی


نبرد کهکشانی

مقدمه

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

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

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

همچنین هریک از سیارات دارای منابع مشخصی هستند و مقدار منابع آنها نیز محدود است. سیارات بزرگ و پر از منابع، امکان ساختن تا ۲۰ ساختمان عظیم (کارخانه، معدن، پدافند دفاعی) را دارند. سیارات کوچکی نیز وجود دارند که به اندازه چند ساختمان بیشتر فضا و جمعیت ندارند.

سیاراتی که کارخانه دارند، به میزان منابع خود میتوانند به تولید سفینههای فضایی جنگی بپردازند. مجموعهای از سفینهها نیز یک ناوگان سفینهای را تشکیل میدهند. ناوگانها امکان حرکت به سیارات و منظومهها دیگر و درگیر شدن با ناوگانهای دشمن و تسلط نظامی بر سیارههای دشمن را دارند.

برنده این جنگ ستارگان گروهیست که بتواند پایتخت گروه دیگر را از آن خود نماید.

ویژگیهای کهکشان

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

بازی به صورت گرافیکی نمایی از کهکشان به همراه منظومهها و سیارات آنرا نشان میدهد و امکان زوم کردن در یک کهکشان و یک سیاره خاص را داراست. هر کهکشان یک مرحله از بازی را تشکیل میدهد.

منظومه‌ها و سیارات

هر کهکشان بین دو تا هشت منظومه دارد و هر منظومه بین سه تا ده سیاره. در ابتدای بازی پایتخت هرکدام از دو گروه در یک منظومه مجزا از کهکشان در یک سیاره بزرگ و قدرتمند قرار دارد.

در هر سیاره، تعداد ساختمانهای قابل ساخت مشخص است و متناسب با اندازه سیاره است. اندازه سیاره در زمان فتح نظامی و فتح منابعی آن تاثیرگذار است.

ساختمان‌ها

تعداد کارخانههای هر سیاره، سرعت ساخت دیگر موارد در آن سیاره را مشخص میکند. هر سیاره در آن واحد میتواند تنها بر روی یک پروژه کار کند. پروژههای موجود عبارتند از ساخت ساختمان و ساخت سفینه. به عنوان مثال اگر ساخت یک سفینه ۲۰۰ سیکل زمان لازم داشته باشد، سیارهای که دو کارخانه دارد آنرا در ۱۰۰ سیکل به اتمام خواهد رسانید. تعداد سیکلهای ساخت هر چیزی متناسب با مواد اولیه مورد نیاز آن است.

ساختمانهای قابل ساخت عبارتند از معادن، کارخانهها و پدافندهای دفاعی. پدافندهای دفاعی ساختمانهای نظامی بسیار قدرتمندی هستند که از سیاره در برابر حمله دشمن به طور بسیار موثری حفاظت میکنند.

معادن نیز مواد اولیه تولید میکنند. مواد اولیه برای داشتن ساختمانها و سفینهها لازم است. به عنوان مثال اگر یک سفینه خاص، ۵۰۰ مواد اولیه لازم داشته باشد، و هر معدن ۱۰۰ مواد اولیه خروجی دهد، برای ساختن و داشتن این سفینه باید حداقل پنج معدن داشته باشیم و در صورت نبود مواد اولیه کافی نمیتوان چیزی ساخت.

توجه داشته باشید که مواد اولیه مصرف می شوند، یعنی اگر ده معدن داشته باشیم که ۱۰۰۰ مواد اولیه تولید میکنند، و سه سفینه داشته باشیم که هرکدام ۲۰۰ مواد اولیه مصرف میکنند، تنها ۴۰۰ مواد اولیه برای ساختن سفینهها و ساختمانهای دیگر داریم. مواد اولیه تولید شده منحصر به سیاره نیستند و در کل کهکشان برای آن گروه مشترک محسوب میشوند.

مردم و تعلق

مردم هرکدام از سیارات منظومه، طیفی از تعلق به دو گروه دارند، یعنی هر سیارهای، به مقدار X گروه اول را میپسندد و به مقدار کل علاقه سیاره منهای X گروه دوم را. اگر هرکدام از سیارات بیشتر از ۷۵ درصد به یک گروه خاص تعلق داشته باشد، به تملک آن گروه در میآید. پایتختها در شروع بازی صد در صد به گروه خود علاقه دارند.

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

همچنین در صورتی که یک سیاره به صورت نظامی فتح گردد، علاقه آن به گروه فاتح ۲۵ درصد کاهش مییابد. در صورتی که یک سیاره در سلطه نظامی بماند، در هر سیکل مقداری به گروه سلطهگر علاقمند خواهد شد و پس از رسیدن به ۷۵ درصد تملک خواهد شد. سیارهای که در فتح نظامیست و هنوز به ۷۵ درصد نرسیده، در وضعیت شورش به سر میبرد و امکان ساخت هیچ چیزی را ندارد.

سفینه‌ها و ناوگان‌ها

سفینهها حتما در قالب ناوگان قرار دارند و حرکت میکنند. در هر سیارهای چندین ناوگان میتوانند مستقر باشند. سفینهها به صورت مستقل وجود ندارند و به محض ساخته شدن یک سفینه در یک سیاره خالی، یک ناوگان در آن ایجاد میشود. در صورتی که سفینه دوم نیز ساخته شود، در همان ناوگان قرار میگیرد.

بازیکن میتواند ناوگانهای موجود در هر سیاره را مرتب کند، بدین صورت که سفینهها را بین ناوگانها جابجا نماید و یا سفینهها را از ناوگانی بیرون کشیده ناوگان جدیدی تشکیل دهد. این عملیات مستقل از زمان انجام میگیرد.

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

جنگ

سیارات بیطرف و پدافند های دفاعی آنها در جنگهای دوطرفه دو گروه شرکت ندارند، ولی اگر گروهی به آنها حمله کند در برابر آن میجنگند.

جنگ ناوگانها به صورت خودکار صورت میگیرد. در صورتی که جنگ بر روی سیارهای صورت بگیرد که پدافند دفاعی به نفع یکی از طرفین دارد، به ازای هر پدافند ۲۵ درصد به کل قدرت ناوگان خودی اضافه میشود. همچنین هر پدافند دفاعی خود به اندازه یک سفینه بسیار قوی قدرت دفاعی دارد.

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

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

رخداد‌ها

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

موارد لازم پیاده‌سازی

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

  • پیاده سازی تمامی مواردی که در بخش قبل تعریف شد.
  • حداقل ۲۰ نوع سفینه با نیاز به مواد اولیه مختلف و قدرتهای دفاعی، حملهای و تحمل متفاوت (و متناسب با مواد اولیه مورد نیاز)
  • ایجاد کهکشان به صورت تصادفی و پارامتریک
  • برنامه منوی اجرا کننده جهت تنظیم پارامترهای کهکشان و شروع بازی (یک برنامه مستقل)
  • صفحه نمایش کهکشان (با نمایش منظومهها و وضعیت کلی آنها)
  • صفحه نمایش منظومهها (با نمایش سیارات آنها و وضعیت کلیشان)
  • صفحه نمایش یک سیاره (با تمام مشخصات و ساختمانها و ناوگانهای مستقر در آن)
  • سیستم گزارش‌گیری و گزارش دهی Active یا Passive
  • امکان بازی کردن با ماوس و کیبورد
  • نمایش زنده روند پیشرفت بازی (ساخته شدن ساختمان‌ها به صورت یک نوار پیشروی در کنار شکل سیاره‌ها، حرکت ناوگان‌ها و غیره)

ویژگی‌های فنی

    ویژگیهای فنی نیز لایه دوم کار است. در صورتی که تیمی از این لایه ده درصد نمره را بگیرد، نمره لایه دیگر او در ده درصد ضرب خواهد شد و نمره کلی محاسبه خواهد شد.

  • کل برنامه باید به شیوه شی‌گرایی نوشته شده باشد. صرف وجود اشیاء و کلاس‌ها، دلیلی برای شی‌گرا بودن برنامه نیست.
  • در کل برنامه تنها یک تابع main قابل تعریف است و بقیه برنامه باید در قالب کلاس‌ها باشد
  • استفاده از تمامی زبان‌های شی‌گرایی مجاز است، ولی استفاده از C++ توصیه اکید می‌شود.
  • تک تک کلاس‌ها باید در فایلهای .h و .cpp جداگانه نوشته شوند.
  • استفاده از هر کتابخانه گرافیکی شی‌گرا مجاز است. در صورتی که استفاده از کتابخانه گرافیکی غیر شی‌ء گرا شود، می‌بایست برای آن Wrapper نوشته شود.
  • فقط تیم‌ها دو نفره قابل قبول است. تیم‌های دو نفره پس از انتخاب و اعلام، به هیچ وجه قابل تغییر نیست. هر تیم تنها یک پروژه با تایید هر دو نفر تیم می‌تواند تحویل دهد.
  • تیم‌های بیشتر از دو نفره به شرطی مجاز است که کل اعضای تیم بر روی سیستم‌های کنترل نسخ مانند SVN کار کنند . برای اینگونه تیم ها در ابتدای شروع کار آزمونک آشنایی با SVN گرفته می‌شود و در انتهای کار نیز هر کاربری باید سهم خود از کد را در داخل سیستم کنتنرل نسخ داشته باشد (با نام کاربری خود)
  • تیم‌ها می‌توانند به دو روش XP (یعنی هر دو نفر باهم یک تکه از برنامه را بنویسند، معمولا حضور فیزیکی هر دو) و یا تفکیک وظایف (یعنی تقسیم کل کار به قسمت‌های نسبتا مساوی و انجام آنها توسط افراد تیم) یا ترکیب ایندو کار کنند. در هنگام تحویل باید نحوه کار معین گردد.
  • نمودار روابط کلاس‌ها (Class Diagram) با هر قالب استاندارد یا غیر استاندارد باید ترجیحا قبل از شروع کد نویسی تحویل و تایید اولیه گردد.

نحوه تحویل

تحویل پروژه به صورت حضوری خواهد بود. برای تحویل حضوری پروژه، تا قبل از اتمام فرصت تحویل، همه اعضای تیم باید حاضر باشند. در صورتی که تیمی برای زمان خاصی مشکل حضور دارد، در نزدیکترین زمانی که قبل از اتمام مهلت تحویل می‌تواند، باید پروژه را تحویل نماید. در صورتی که پروژه تا زمان مقرر تحویل نگردد نمره صفر منظور خواهد شد.

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

آخرین مهلت تحویل :‌ ۱۶ تیر ۹۰

Site Footer

Sliding Sidebar