پروژههای برنامهنویسی خیلی بیشتر از یک ساعت در هفته کار دارند (مثلا بیست تا چهل ساعت در هفته!)، اما چون شما دانشآموزید منصفانه نیست که از شما اینقدر وقت بخواهیم! از طرف دیگر هم اگر پروژه انجام ندهید نصف خوشیهای دنیا را از دست خواهیم داد. بنابراین در این آزمونک میخواهیم با کمک همدیگر - کل ۹۳ نفر با هم یک پروژه بزنیم. چگونه؟! همین موضوع را در ادامه توضیح خواهم داد.
حالا که میخواهیم وقت بگذاریم باید خیلی با دقتتر وقت بگذاریم!
چگونه میتوانید این متن را بخوانید؟!همه ما میدانیم «آ» چیست و چه صدایی دارد، بنابراین میتوانید متن را بخوانید، حالا چه ربطی به برنامهنویسی و پروژه دارد؟ قرارداد! ما انسانها قراردادهایی داریم که امکان همکاری و همافزایی را برای ما فراهم میکند. بنابراین در اینجا هم میخواهیم مواردی را قرارداد کنیم و به آن پایبند باشیم تا همکاری و همافزایی ممکن شود.
- قراردادها تنها با هماهنگی با آقای جمعهای امکان تغییر دارند و این تغییر تنها در صورت اعلام در کوئرا معتبر است!
- تنها در صورتی در مورد یک قرارداد پیشنهاد تغییر بدهید که مطمئن هستید راهحلی برای بهبود دارید، یا یک مشکل اساسی که کار را مختل میکند وجود دارد
- بحث نکنید، اگر فکر میکنید ایدهای دارید که طرف مقابل شما متوجه آن نمیشود، از منظر دیگری موضوع را توضیح دهید، ممکن است لازم باشد صبر کنید تا ایده بهتری به ذهن خود شما برسد!
- شما میةوانید تنهایی یا دونفره کار کنید، ولی بهتر است اگر کاری را میتوانید به تنهایی انجام دهید سراغ کار تیمی نروید، چرا که نتیجه امتیاز شما در کار تیمی ضرب در شصت و پنج صدم خواهد شد
- هر کس کدی مینویسد که دیگران باید از آن استفاده کنند. امتیاز هر نفر به نسبت تعداد دفعاتی است که دیگران از کد او استفاده کردهاند.
- به ازای هر استفاده بدون تغییر، استفاده کننده یک و نیمامتیاز و کسی که کد را زده ۲ امتیاز میگیرد، اگر هر ویرایشی در برنامه صورت بگیرد، حتی در حد ویرایش نام متغیر یا تابع، استفاده کننده هیچ امتیازی نخواهد گرفت و کسی که از کد او استفاده شده یک امتیاز میگیرد.
- همفکری و کمک به تیمهای دیگر آزاد است اما کسی که کدی را تحویل میدهد، نباید از کد همسطح (توضیح سطوح در ادامه خواهد آمد) دیگری استفاده کرده باشد!
- هر کس تنها میتواند در یک سطح کد بزند اما گروههای دو نفره میتوانند در دو سطح برنامهنویسی کنند.
- استفاده از گیت در هر کدام از سطوح برای استفاده کننده دو امتیاز مثبت دارد!
- هر شخص یا تیم برای هر سطح باید حداقل یک فایل ارایه دهد که در آن هیچ کدی از کس دیگری کپی نشده باشد بلکه نهایتا از فایلهای سطح پایینتر دیگران استفاده کرده باشد!
در ادامه یک حالت پایه را توصیف خواهیم کرد، اما شما میتوانید در سطحی که انتخاب میکنید هر چقدر که علاقهمند هستید مطابق قراردادها ویژگیهای بیشتری اضافه کنید بدیهی است اضافه کردن ویژگیهای بیشتر خوب، باعث خواهد شد کد شما بیشتر مورد استفاده قرار بگیرد. ویژگی خوب ویژگی است که شما را به هدف نزدیکتر کند!
- دو مربع در صفحه وجود دارد که فاصله آنها پنج واحد است.
- هر مربع در هر ثانیه یک سکه میسازد.
- مقاومت هر مربع بیست واحد است و اگر هر سرباز دشمن به آن برسد به اندازه قدرت تخریب خود از مقاومت میکاهد
- دو نوع سرباز داریم، سرعت همه سربازها یک واحد در ثانیه است، اگر سربازها به یکدیگر برسند و قدرت تخریب یکی بیشتر از دیگری باشد آن که قویتر است دیگری را از بین خواهد برد و اگر قدرت تخریب مساوی باشد هر دو از بین خواهند رفت
- سرباز اول با سه سکه تربیت میشود و قدرت تخریب آن دو است،
- سرباز دوم با ده سکه تربیت میشود و قدرت تخریب آن نه است،
- برنده در نهایت کسی است که زنده بماند
هر سطح زمان شروع و پایان دارد! بعضی از سطحها با بعضی دیگر موازی هستند اما برخی پس پایان دیگری شروع خواهند شد. مشکلی ندارد اگر گروهی در دو سطح موازی یا غیر موازی شرکت کند.
لطفا همه سطوج را کامل بخوانید، ممکن است شما نخواهید در آن سطح فعالیت کنید اما اطلاعات لازمی برای شما داشته باشد!
- زمان شروع: سر کلاس!
- زمان پایان: بیست و چهار دوشنبه ۳ بهمنماه
- سختی این بخش از نظر برنامهنویسی زیاد نیست اما شما باید روی مفاهیم مربوطه تسلط داشته باشید
- آموزش گیت خیلی از دوستان شما با گیت آشنایی ندارند، در یک آموزش سریع برای آنها آشنایی ایجاد کنید، نیاز نیست بلد باشند که با خط فرمان کار کنند، همین که بتوانند در پروژه مشارکت کنند کافی است، هر چه تعداد کسانی که از آموزش شما استفاده میکنند بیشتر باشد شما امتیاز بیشتری خواهید گرفت، هر نفر تنها از یک آموزش میتواند استفاده کند
- چگونه در چند فایل مجزا برنامه بنویسیم قرار بود تنها مانند همه کتابخانههایی که تا به حال دیدهایم از ترتل تا ریکوئست توابع برنامههای دیگران را صدا بزنیم و کدشان را مستقیم استفاده نکنیم، چگونه؟ آموزش این چگونگی مسئله این قسمت است.
- شیگرایی! پیشنهاد این است که بخش هسته روند بازی شیگرایانه نوشته شود، هر چند اگر طور دیگری میتوانید بنویسید، بنویسید!
- observer paradigm (!) and think of callbacks!
- *args و **kwarg
- فکر میکنید موضوع دیگری وجود دارد که نیاز به آموزش دارد و در فهرست بالا نیامده؟ به آقای جمعهای بگویید
- زمان شروع: سر کلاس!
- زمان پایان: پنجشنبه ۶ بهمن ۱۲ ظهر
- این بخش از نظر برنامهنویسی نسبتا سخت است
-
شما به عنوان کف برنامهای که مینویسید باید جزییاتی که در بالا نوشته شده را بدون رابط گرافیکی یا خط فرمان پیاده کنید. شما باید منطق بازی را بنویسید و این که با استفاده از توابعی که نوشتهاید دیگران بتوانند کد شما را تکمیل کنند، بنابراین برنامه شما باید توابعی که در ادامه میآیند را داشته باشد
-
get_status()
- ورودی ندارد
- کار این تابع ارایه گزارشی در مورد وضعیت کنونی بازی است!
- خروجی این تابع یک دیکشنری است، این دیکشنری کلیدهای زیر را دارد،
- "first castle health" مقدار این کلید مطابق مقاومت فعلی قلعه اول است
- "first castle soldiers" مقدار این کلید یک لیست از تاپلهاست، که اولین خانه تاپل برابر با قدرت تخریب هر سرباز است و دومین خانه تاپل برابر با فاصله از قلعه خودش، همینطور هر سربازی که میمیرد از لیست حذف خواهد شد
- "second castle health" مقدار این کلید مطابق مقاومت فعلی قلعه دوم است
- "second castle soldiers" مقدار این کلید یک لیست از تاپلهاست، که اولین خانه تاپل برابر با قدرت تخریب هر سرباز است و دومین خانه تاپل برابر با فاصله از قلعه خودش، همینطور هر سربازی که میمیرد از لیست حذف خواهد شد
-
teach(team_id: str, soldier_id: str)
- ورودیها
- ورودی اول میتواند دو مقدار زیر را داشته باشد
- "first"
- "second"
- ورودی دوم نیز میتواند دو مقدار زیر را داشته باشد
- "3"
- "10"
- اگر علاقهمند باشید میتوانید سربازهای متفاوتتر با ویژگیهای بیشٰتری داشته باشید، حتی اگر علاقهمند هستید میتوانید طرفین بیشتری در بازی داشته باشید اما مستند کردن این چیزهای جدید را فراموش نکنید، خود شما کسی نیستید که از این کد استفاده خواهد کرد.
- ورودی اول میتواند دو مقدار زیر را داشته باشد
- این تابع دستور ساخت یک سرباز جدید است! اگر ساخت موفقیت آمیز باشد سرباز را میسازد و درست برمیگرداند در غیر این صورت غلط برمیگرداند!
- مطابق توضیح بالا خروجی این تابع درست یا غلط است
- ورودیها
-
add_event(callback: function, event_id: str)[اختیاری]
- ورودی تابعی است که هنگام رویدادن رخدادی که با ایونت آیدی مشخص میشود صدا خواهد شد! در زیر فهرستی از رویدادهای پیشنهادی آمده، اما اگر علاقهمند بودید میتوانید آنها را کم، زیاد یا ویرایش کنید
- هنگامی که سرباز کشته میشود "soldier died" -- پارامتری که به تابع به عنوان ورودی داده خواهد شد، محل مرگ سرباز است!
- چه اتفاقی میافتد؟ فرض کنید کسی میخواهد از برنامهای که شما نوشتهاید استفاده کند و برای آن یک رابط کاربری گرافیکی بنویسد! ساخت سرباز و را از خروجی تابع تیچ میفهمد و افکتهای لازم را پخش میکند اما مرگ سرباز را باید چگونه بفهمد؟ شما باید یک لیست از تابعهایی که کاربر شما (که برنامهنویس رابط گرافیکی است) داده ذخیره کنید و در موقع مناسب آن را فراخوانی کنید، آگاه باشید که در پایتون میتوان تابع را مانند متغیر به تابع دیگر ورودی داد و آن را بعدا صدا زد، توجه به این نکته خیلی مهم است که خود تابع، نه نتیجه اجرای آن!
- این تابع خروجی ندارد!
- ورودی تابعی است که هنگام رویدادن رخدادی که با ایونت آیدی مشخص میشود صدا خواهد شد! در زیر فهرستی از رویدادهای پیشنهادی آمده، اما اگر علاقهمند بودید میتوانید آنها را کم، زیاد یا ویرایش کنید
-
-
دقت کنید که کنترل مسائل مربوط به زمان مربوط به همین بخش است، میتوانید از کتابخانه تایم کمک بگیرید
-
دقت کنید مدیریت سکهها باید توسط همین کد صورت بگیرد!
-
باید شیوه استفاده از توابع و احیانا کلاسهایی که نوشتهاید را در سندی آماده کنید، مانند همین سند، استفاده از مثالها موجب فهم راحتتر کد شما خواهد شد.
-
اگر علاقهمندید تابع دیگری هم بنویسید، از آقای جمعهای اجازه بگیرید!
- زمان شروع: سر کلاس!
- زمان پایان: پنجشنبه ۶ بهمن ۱۲ ظهر
- این بخش برنامهنویسی ندارد!
در بازی اتفاقاتی میافتد، مثل تربیت، حرکت یا مرگ سرباز! این اتفاقات باید افکتهای صوتی، تصویری و تصاویر مناسب داشته باشند، لازم است که شما این مواد را طراحی یا پیدا کنید!
- زمان شروع: پنجشنبه ۶ بهمن ۱۲ ظهر
- زمان پایان: یکشنبه ۱۰بهمنماه ساعت بیست و چهار
- این بخش از نظر برنامهنویسی میتواند ساده یا سخت باشد!
دو امدادی به آخر خود میرسد، باید کار را جمع کنید، اسناد دوستان توسعهدهنده هسته روند بازی را بخوانید، آموزشهای لازم را ببینید، مجموعه مواد هنری لازم را انتخاب کنید و بازی خود را بسازید! دقت کنید که انتخاب شما روی نمره دوستان شما تاثیر دارد اما نهایتا این بازی که شما جمع شدن آن را مدیریت میکنید باید قابل ارایه باشد و شما در مقابل آن مسئولید!