622 سوال

629 پاسخ

855 نظر

242 کاربر

به سامانه پرسش و پاسخ کیوت خوش آمدید, این سامانه به شما امکان می دهد پرسشهای خود را طرح نموده و در کوتاهترین زمان ، پاسخ خود را دریافت نمایید.

-قبل از سوال پرسیدن حتما جست و جو کنید.

-در صورتی که سوالی به شما کمک کرد و یا جوابی ، حتما به آن امتیاز مثبت دهید.

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

-از ارسال چند سوال در یک تاپیک جدا خودداری کنید.

-نام مناسب برای سوالات انتخاب کنید.

-برچسب مناسب برای سوالات انتخاب کنید.

-برای نوشتن کد کافی است کد را از ادیتور خود کپی و در ادیتور سایت الصاق کنید و با انتخاب کد کلید CTRL+K را فشار دهید.

-حتما قوانین و نکات دیگر را از اینجا بخوانید.

راهنمایی برای ساخت قسمتی از بازی شطرنج توسط کیوت

0 امتیاز
107 بازدید

با سلام خدمت دوستان
شاید سوالی که میخوام بپرسم مستقیم به خود کیوت ربط نداشته باشه اما چون دوستان همیشه اینجا خوب جواب میدن جایی بهتر از اینجا پیدا نکردم
من برای ساخت بازی شطرنج تا حدود زیادیشو.با کیوت ساختم اما دقیقا نمیدونم برای زدن یک مهره چطوری عمل کنم
البته اینو بگم که برنامه رو تا حدی پیش بردم که مهره ها از روی هم عبور نکنند یا نوبت رعایت بشه...برای کل مهره ها یه کلاس والد تعریف کردم که بقیه مهره ها مثل سرباز و غیره همه از اون به ارث میبرن و خود کلاس والد هم از Qlabel به ارث میبره...حالا میخوام بدونم اگه من یه مهره ای رو بزنم مثلا با فیل اسب رو بزنم...کلاس فیل که به کلاس اسب دسترسی نداره که بخوام اونو delete کنم بهترین راه برای اینکه بخوام یه مهره رو حذف کنم یا به مکانی بیرون از صفحه شطرنج ببرمش چیه؟(در ضمن همه ی object های مهره هم در کلاس mainwindow تعریف شده)

سوال شده شهریور 5, 1393  بوسیله ی amir_mohammad (290 امتیاز)  
75% درصد پذیرش جواب ها

1 پاسخ

0 امتیاز

سلام
راههای مختلفی می شه پیشنهاد داد و مسلما هر کسی سلیقه ای رو داره.
چیزی که می گم از نظر بنده درسته و دوستان می تونند ایده رو کامل کنند و یا ایده بهتری بدند.
از نظر بنده حقیر، برای این کار باید همه اونها توسط کلاس کنترلی کنترل شند که همه اونها رو شامل می شه ،این کنترلر هست که تعیین می کنه کی باید delete شه و کی نباید باشه...بهتره کلاسی به عنوان کنترلر بنویسید که شامل یک آرایه دو بعدی 8 در 8 از نوع اشاره گر کلاس abstract تون باشه که آدرس اشیای اونها رو در خونه های خاص داره، منظور از کلاس abstract همون کلاس اصلی مهره هست که مهره های دیگه از اون به ارث رفتند، باز هم بنده فرض می گیرم ارث بری کلاسیتون، ارث بری یه سری کلاس به اسامی کلاس سرباز، کلاس شاه، کلاس وزیر، کلاس فیل، کلاس اسب، کلاس قلعه از یه کلاس پایه ای abstract به اسم مهره هست که خود اون می تونه از QWidget یا QLabel بنا به کاربرد به ارث بره و شامل مشخصه ها و متد های مشترک + متد های abstract هست.خونه های خالی آرایه 8 در 8 اشاره گری با مقدار NULL دارند و خونه های شامل مهره، اشاره گری به شی مورد نظر دارند که می تونید در abstract کلاس اصلی مهره که مهره های دیگه از اون به ارث می رند، یه متغیر بولین برا سیاه یا سفید بودن تعیین کنید، پس مهره های سیاه اون بولین رو false می کنند و سفید ها برعکسش true.درواقع خونه بعدی که باید حرکت روش انجام شه توسط مهره به کنترلر گفته می شه و کنترلر هم تأیید می کنه که امکان پذیر هست یا نه... چرا که کنترلر شامل یه آرایه 8 در 8 از نوع کلاس اصلی مهره هست.بعد هر مهره خونه بعدی رو تأیید می کنه و توسط سیگنالی به کنترلر این پیغام رو می رسونه که خونه بعد کجا هست و با emit سیگنالی، کنترلر می فهمه که مهره کجا می ره و می تونه بهش اجازه بده که بره یا اجازه نده.حذف مهره های حریف هم به عهده کنترلر هست. چرا که برای مثال اگه بخواهید به این بازی، سیستم پشته undo - redo یا ثبت وقایع بگذارید، بهتره تأییدیه نهایی حرکت ها و ثبت وقایع یا چیدمان مهره های سیو شده (فرض کنید بازیتونو بتونید سیو کنید) و حتی ارسال نتایج به صورت مدل به دیتابیس و ... توسط یه کلاس به اسم کنترلر انجام باشه.دادن اختیار بیش از حد به مهره ها می تونه باعث تخریب تمیزی کد، اختلال در کارها، سختی کنترل و حتی چیزی شبه اسپاگتی شدن مکانیسم برنامه تون شه و این اصلا برا شما خوب نیست.چیزی که بنده می گم شبیه به مکانیسمی شبیه به mvc هست. البته مطمئن نیستم که خود mvc باشه.
موفق باشید...

پاسخ داده شده شهریور 5, 1393 بوسیله ی hadiabbasi کیومن (18,890 امتیاز)  

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

سلام
یه چند روز فرصت بدید...

...