PDA

View Full Version : گفتگو: تبادل نظر درباره مزايا و معايب سورس بازي Minesweeper



EbiPenMan
شنبه 23 آذر 1387, 23:08 عصر
سلام به همگي
من يه بازي نوشتم يعني بازي ويندوز minesweeper و در طي اين مدت خيلي از دوستان كمك گرفتم و به هشون زحمت دادم و الان از همشون تشكر ويژه رو دارم.

البته هنوز خيلي ناقص هست و شايد ( حتما ) همين مقدار رو هم كه نوشتم خيلي با اصول برنامه نويسي سازگار نباشه.

براي همين سورسش رو مي زارم تا هم از نظر دوستان استفاده كنم و اشتباهات و راه هاي بهتري اگه در نوشتن اين بازي بوده به من و بقيه بگن تا بتونيم سطح مون رو ارتقاء ببخشيم.

اگه هم كسي خواست كه كاملش كنه چه بهتر چون اين سورس شامل هيچ حق قانوني براي كسي نيست و فقط اگه دوست داشتيد مي تونيد يه اسمي هم از اين سايت ببريد.

اين اولين پروژه من در C# هست و من بيشتر در vb كار كردم.
دوست دارم كه از نظرات حرفه اي شما استفاده كنم.

EbiPenMan
پنج شنبه 28 آذر 1387, 18:01 عصر
آقا كسي نيست كه يه نظري بده؟

shohre_fa
سه شنبه 03 دی 1387, 22:21 عصر
من تازه با #c آشنا شدم وخیلی علاقه مند به برنامه نویسی بازی ها هستم ولی هم نمیدونم چکار کنم هم نمیدونم چی مطالعه کنم اچه امکان داره منو کمک کنید

Amir Oveisi
چهارشنبه 04 دی 1387, 09:41 صبح
خسته نباشی دوست عزیز
جالب و زیبا بود

نظرات بنده:
1- OOP واقعی نیست سورس برنامه (مثلا به جای اینکه بیاین یه آرایه button و یه آرایه int برای ظاهر و باطن مین ها داشته باشین بهتر بود یه کلاس برای مین تعریف میکردین که هم ظاهر و هم باطن مین و تو خودش داشته باشه
2- برای اون کلاستون event های مورد نیاز رو تعریف میکردید و بعدا هر جا احتیاج بود handle میکردینش . مثلا برای انفجار مین تو کلاس مین (که فرض میکنیم تعریف شده) یه event تعریف مکردین و برای اینکه بفهمین مین منفجر شده یا نه کافی بود که event مربوط رو تو کد های فرم تون handle میکردین.

3- وقتی راست کلیلک و نگه میداری و چپ کلیک می کنی اصولا باید خونه های اطراف رو چک کنه که کدوما موندن که ممکنه بمب اشته باشن ولی من ندیدم تو برنامتون

4- برای تام احتیاجی نبود که بیاین دقیقه و ساعت رو حساب کنید. چون تا 999 ثانیه کافیه چک کنید فقط (اونم فقط ثانیه هاش رو)

فعلا زیاد وقت نکردم همشو ببینم بازم اگه مطلبی بود حتما نظراتمو میگم.

--> در کل پیشنهاد میکنم که از همین الان سعی کنید برنامه هایتون با مفاهیم OOP پیاده شده باشن و بیشتر از اینکه فقط به اجرا شدن درست برنامه فکر کنید به این فکر کنید که چقدر اصول OOP رعایت شده تو کد هاتون. (البته من تو مقامی نیستم که بخوام نصیحت کنم یا ایراد بگیرم و فقط یک پیشنهاد دوستانه است)


موفق باشید
jooje

mehdi.mousavi
چهارشنبه 04 دی 1387, 13:34 عصر
...از نظر دوستان استفاده كنم و اشتباهات و راه هاي بهتري اگه در نوشتن اين بازي بوده به من و بقيه بگن تا بتونيم سطح مون رو ارتقاء ببخشيم. اگه هم كسي خواست كه كاملش كنه چه بهتر چون اين سورس شامل هيچ حق قانوني براي كسي نيست و فقط اگه دوست داشتيد مي تونيد يه اسمي هم از اين سايت ببريد. اين اولين پروژه من در C# هست و من بيشتر در vb كار كردم. دوست دارم كه از نظرات حرفه اي شما استفاده كنم.

سلام.
این ایرادها، هنگام اجرای بازی به چشم میخوره:



پس از اینکه یک مین منفجر شد، بازی باید متوقف بشه و کاربر امکان Click کردن روی خونه های جدید رو نداشته باشه.
اگر قراره پنجره اصلی برنامه، کوچک و بزرگ بشه، باید محتویات Client Area هم بزرگ و کوچک بشه، نه اینکه صفحه رو Maximize کنم و هنوز در همون ناحیه قبلی محتویات صفحه نمایش داده بشه.
وقتی روی خونه ای Click میکنم، Focus بصورت خودکار به یک خونه دیگه منتقل میشه.
کلید Mouse روی هر خونه ای رها شد، اون خونه باید روشن بشه. نه اینکه وقتی کلید Mouse فشار داده شد، دیگه اهمیتی نداشته باشه که کجا رها بشه! چون ممکنه کاربر به اشتباه کلیک کرده باشه و بخواد کلید Mouse رو خارج از خونه های موجود رها کنه تا در واقع با اینکار، Click خودش رو Cancel کرده باشه.
تغییر نامناسب صفحه، در صورت تغییر Theme.
و ...

این ایرادها در Source دیده میشه:


عدم استفاده از کلاس (یا کلاسهای) مشخصی برای اجرای کلاس مین یاب.
عدم استفاده از Naming Convention مشخصی در کد. بعنوان مثال، نام یکی از توابع رو func_general_initialize_form گذاشتید که با هیچیک از اصول نامگذاری ها تطابق نداره.
Precondition ها در ذهنتون بوده، و در کد آورده نشده.
استفاده نامناسب از Timer، Array، as و ...
نگهداری اطلاعات Config برنامه در فایل size mines.txt
استفاده از تعداد زیادی Button برای اجرای برنامه. (درستش اینه که محتویات صفحه رو خودتون نقاشی میکردید، تا اینکه بخواهید از N تا Button استفاده کنید).
if های تو در تو.
شرطهای بی مورد، از جمله:


if (timer_sec.Enabled == false)
timer_sec.Enabled = true;

عجیب و غریب بودن نحوه نوشتن کد! بعنوان مثال، جای نوشتن


for (int x = 0; x < int_x; x++)
{
for (int y = 0; y < int_y; y++)
{
if (ButtonArray[x, y].Visible == false)
ButtonArray[x, y].Visible = true;
}
}
می تونستید بنویسید:



for (int x = 0; x < int_x; x++)
for (int y = 0; y < int_y; y++)
ButtonArray[x, y].Visible = true;
چون شرطی که شما نوشتید، در واقع در درون Visible Property وجود داره، و اگر مقدار جدید تغییر نکرده باشه، خودش Return میشه. یا جای دیگه ای همچین چیزی نوشتید:



if (ButtonArray[x, y].Visible == false)
bo_check_win = true;
else
bo_check_win = false;
که بهتر بود مینوشتید:


bo_check_win = !ButtonArray[x, y].Visible;که هم خواناتر هستش و هم جمع و جورتر.

و ...

پاورقی: با همه این تفاصیل، بعنوان اولین کار بد نیست.

javad.ahmadi
شنبه 14 خرداد 1390, 22:36 عصر
سلام شهره جان!!
خوشحالم که مشتاق به یادگیری سی شارپ هستی!!!
اگه میخوای مفاهیم رو یاد بگیری با #Cدر 21روز شروع کن!!
و اگه زبانت خوبه!! دایتل از همش کاملتر و بهتر هست!!

B.I.O.H.A.Z.A.R.D
شنبه 14 خرداد 1390, 23:14 عصر
سلام.

من خیلی تشکر میکنم از این کار قشنگی که انجام دادید. برای من که مبتدی هستم، خیلی عالی بود. هر چند مثل خوده MineSweeper ویندوز نمیشه ولی خب معلومه خیلی واسش زحمت کشیدید.

بازم مرسی

javad.ahmadi
یک شنبه 15 خرداد 1390, 13:28 عصر
سلام آقای ebipenmanواقعا قابل تحسین بود!!!
خواستم اگه میشه کل کد هاشو تو قالب ورد بذاری و اجازه بدی من روش کار کنم!!
رو سیستمم net.نصب هست اما express edition هست!! و کدای شما رو نخوند :دی
ممنون میشم

j_naroogha@yahoo.com
یک شنبه 15 خرداد 1390, 14:00 عصر
سلام
مرسی از زحمت هایتون
دوست من اگه یک اسکرول استفاده کنی بهتر می شه. چون هنگامیکه حد بالای اندازه رو انتخاب میکنیم اندازه فرم از اندازه صفحه تجاوز می کند.
باز هم مرسی.