تبلیغات :
ماهان سرور
آکوستیک ، فوم شانه تخم مرغی ، پنل صداگیر ، یونولیت
دستگاه جوجه کشی حرفه ای
فروش آنلاین لباس کودک
خرید فالوور ایرانی
خرید فالوور اینستاگرام
خرید ممبر تلگرام

[ + افزودن آگهی متنی جدید ]




نمايش نتايج 1 به 6 از 6

نام تاپيک: tetris در C#

  1. #1
    در آغاز فعالیت
    تاريخ عضويت
    Jun 2013
    پست ها
    9

    9 tetris در C#

    با سلام.
    دوستان من یه پروژه دارم برای نوشتن بازی tetris که میخواستم ازتون کمک بگیرم چون نه تاحالا بازی نوشتم نه با C# آشنایی کافی رو دارم.پروژه من ساخت بازی tetris هست اما در اون برای ترسیم باید فقط از setpixel استفاده بشه.من نمیخوام بازی رو برام بنویسید یا سورس آماده برام بزارید فقط راهنمایی میخوام که چطوری خودم بنویسمش.مثلا اینکه اشکالشو کجا باید تعریف کنم؟ چطوری به صورت رندوم میان پایین؟ سرعتشون رو چطوری کنترل کنم؟ چطوری بچرخن؟ و همه چی دیگه.
    فقط راهنمایی میخوام که از چه توابعی چطوری و کجا باید استفاده کنم و اگر هم بشه یه طرح کلی از برنامه برام بزارید.اگه دوستان اطلاعاتی دارن در این زمینه خواهش میکنم که دریغ نفرمایند و ما رو راهنمایی کنند.
    زکاة العلم نشرها...
    ممنون
    Last edited by yasser72; 16-10-2013 at 01:29.

  2. #2
    ناظر انجمن .NET Framework _H2_'s Avatar
    تاريخ عضويت
    Feb 2007
    محل سكونت
    یک جایی بین Framework و نارمک!
    پست ها
    4,746

    پيش فرض

    سلام
    طبیعتاً نیاز به یک مخزنی از اشکال مجاز دارید
    یک List یا یک Array که انواع اشکال پایه مجاز و ممکن را داشته باشد و برنامه بتواند با رندوم یکی را برای ارائه بعدی استفاده کند.

    برای رندوم میتوانید از کلاس Random و متد Next ان استفاده کنید که عددی شانسی به شما خواهد داد که میتواند ایندکس آرایه فوق الذکر باشد و بوسیله آن شکل بعدی که باید وارد شود را انتخاب کنید.

    هر شکل در مخزن فوق میتواند خود یک آرایه دوبعدی bool باشد مانند [bool[4,4 یا در حالت کلی تر هم میتوانید یک کلاس Wrapper روی آن بنویسید که دوران را هم پشتیبانی کند.
    اگر ابعاد ماتریس شکل تان مشخص باشد، (مثلاً حداکثر 4*4) نوشتن کد دوران ساده خواهد بود.

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

    برای ترسیم باید دقت کنید که یک پیکسل مانیتور برای دیده شدن خیلی خیلی کوچک است، منظورم آن است که هر مربع شما نمیتواند یک پیکسل باشد.
    مثلاً شاید نیاز باشد یک مربع شما در بازی حداقل 16*16 پیکسل باشد.
    برای این منظور تابع FillRectangle که یک مربع رسم میکند مناسب تر از SetPixel است.
    فوقش اگر نخواستید حتماً باید تابعی مشابه FillRectangle را جزء اهداف اولیه تان خودتان با کمک از SetPixel بنویسید، در این برنامه خیلی به کارتان خواهد آمد.
    (گرچه اگر من بودم استفاده از تصاویر bmp آماده و زیبا از قبل آماده را ترجیح میدادم و بیخیال نظرات غیر عقلانی استاد میشدم!)


    برای حرکت آهسته نیاز به Timer یا چند ریسمانی دارید که حدس میزنم برای شما Timer ساده تر باشد.
    زمانی میدهد و Timer مدام به ان فاصله رویدادی را اجرا میکند (رویداد مشابه رویداد کلیک یک دکمه)

    برای ترسیم و SetPixel میتوانید از کلاس System.Drawing.Bitmap استفاده کنید که بعداً به راحتی هم روی مانیتور قابل ترسیم است.
    خود متد اصلی ترسیم هم نامش OnPaint و یا رویداد Paint پنجره اصلی برنامه تان است.

    موفق باشید.
    Last edited by _H2_; 16-10-2013 at 12:52.

  3. این کاربر از _H2_ بخاطر این مطلب مفید تشکر کرده است


  4. #3
    در آغاز فعالیت
    تاريخ عضويت
    Jun 2013
    پست ها
    9

    پيش فرض

    خیلی ممنون از توضیحاتتون
    اولش بگم که استفاده از setpixel پیشنهاد استاد نیست بلکه اجبار استاده هدفش از این پروژه استفاده از این هستش.
    توضیحاتتون خیلی عالیه اما من تا حالا سی شارپ کار نکردم یکم برام پیچیده هست مثل اینکه اول باید برم سی شارپ رو قشنگ یاد بگیرم تا متوجه توضیحاتتون بشم
    اولش که گفتید اشکال در آرایه باشند ، آرایه باید از چه نوعی باشه؟ بیتمپ باید بزارم؟
    کلا همه چی انکار برام گنگ اگه براتون مقدوره یه نمونه سورس کد خیلی کوچولو برام بزارید از هر قسمتش واقعا ممنونتون میشم. مخصوصا نحوه ترسیم و استفاده از اشکال . مثلا شما میگید یه تابع بنویسم واسه مربع و اشکال رو از اون استفاده کنم برای رسم خب نمیدونم چطوری باید با اون ترسیم کنم. یا وقتی میاد پایین چطوری باید مشخص کنم براش که نره تو قبلی و روش بشینه یا چطوری یه سطر حذف بشه و بقیه میان پایین اصلا بهش فکر میکنم گیج میشم. خنگ نیستم ها() ولی چون اولین باره و هیچ پیش زمینه ای هم ازش ندارم اینجوریه
    بازم ممنون از راهنماییتون.

  5. #4
    ناظر انجمن .NET Framework _H2_'s Avatar
    تاريخ عضويت
    Feb 2007
    محل سكونت
    یک جایی بین Framework و نارمک!
    پست ها
    4,746

    پيش فرض

    سلام
    ، آرایه باید از چه نوعی باشه؟ بیتمپ باید بزارم؟
    به نظر این مخزن اشکال شما میتواند آرایه ای از جنس bool باشد که خانه های پر را مشخص کند.

    یه نمونه سورس کد خیلی کوچولو برام بزارید
    متاسفانه کمی کمبود وقت دارم...
    ولی نگاهی به سایت کدپروژکت انداختم و دیدم چندین پروژه موجود دارد که میتوانید برای شروع نگاهی بیاندازید و کمکتان کند.
    بررسی کنید، مشکلی بود در خدمت هستم:
    [ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]

  6. این کاربر از _H2_ بخاطر این مطلب مفید تشکر کرده است


  7. #5
    در آغاز فعالیت
    تاريخ عضويت
    Jun 2013
    پست ها
    9

    پيش فرض

    سلام دوباره خدمت شما
    عزیز من دو روز پیش شروع کردم نوشتن این برنامه
    مخزن اشکال رو ساختم اما چون بلد نبودم با آرایه کار کنم با تابع نوشتم
    الان یه تابع نوشتم به این صورت
    (private Bitmap forms(int f,int d,int x,int y
    که متغیر اول شکلشه که بین 0 تا 6 متغیره و متغیر دوم هم زاویه اش هستش که اونم بین 0 تا 3 تعریف کردم که اینا رو با رندوم مقداردهی کنم
    x و y هم مختصاتشه که در جهت افقی و عمودی جابه جا بشه
    اگه با 0 و 0 بدیم بهش شکلا بالای صفحه وسط میاد و با افزایش y شکل میاد پایین و با تغییر x هم میشه چپ و راست بردش

    حالا سوالم از شما اینه که اصلا اینی که نوشتم درسته؟؟ یعنی میشه باهاش این بازیو نوشت؟؟
    و سوال دیگه اینکه چطوری میتونم با timer کار کنم؟؟ برای پایین آوردن اشکال و اینکه چیکار کنم که پایین میاد پاک بشه شکل قبلی و کلا بقیه برنامه رو موندم چطوری بنویسم مثلا چطوری متوجه بشه که متوقف بشه و شکل بعدی بیاد یا یه ردیف حذف بشه و بیاد پایین

    اگه زحمتی نیست یه توضیحی در سطح مبتدی بدید چون من با سی شارپ زیاد آشنا نیستم و تازه ترم سوم کامپیوترم

    پیشاپیش ممنون
    Last edited by yasser72; 25-11-2013 at 22:03.

  8. #6
    ناظر انجمن .NET Framework _H2_'s Avatar
    تاريخ عضويت
    Feb 2007
    محل سكونت
    یک جایی بین Framework و نارمک!
    پست ها
    4,746

    پيش فرض

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

    گمانم کلش یک کلاس باشد (مثلاً همان فرم اصلی برنامه) خیلی خیلی ساده تر باشد و زودتر به جواب نهاییتان برسید.

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

    بخش هایی را برایتان تکمیل کرده ام...

    در واقع الآن مسئله شما را به چند تابع کوچک شکسته ام که امیدوارم بتوانید این بخش های کوچک ساده را تکمیل کنید.

    بخش هایی که باید تکمیل کنید با ... code مشخص شده اند.

    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    (اخطار! کد موجود آزمایش/آزمونی را طی نکرده)

    سوال دیگه اینکه چطوری میتونم با timer کار کنم؟؟
    تایمر را روی فرم تان قرار دهید، زمان سرریز با نام Interval قابل تنظیم است.
    مانند یک رویداد Click دکمه عادی تایمر رویدای به نام Tick دارد که در سرریز آن رخ میدهد و میتوانید کددلخواه تان را اجرا کنید.

    بهتر است شما کد فوق را مطالعه کنید و سپس با معیار قراردادن کد فوق، اگر سوال یا نکته ابهامی داشید مطرح نمایید.
    موفق باشید.
    Last edited by _H2_; 29-11-2013 at 12:44.

  9. این کاربر از _H2_ بخاطر این مطلب مفید تشکر کرده است


Thread Information

Users Browsing this Thread

هم اکنون 1 کاربر در حال مشاهده این تاپیک میباشد. (0 کاربر عضو شده و 1 مهمان)

User Tag List

قوانين ايجاد تاپيک در انجمن

  • شما نمی توانید تاپیک ایحاد کنید
  • شما نمی توانید پاسخی ارسال کنید
  • شما نمی توانید فایل پیوست کنید
  • شما نمی توانید پاسخ خود را ویرایش کنید
  •