کسی می تونه توی بازی کمک کنه ...

Next

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

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


به بینم اصلا میشه...
 

mehrzadmo

عضو جدید
دوست عزيزي اين كار رو توي سايت برنامه نويس انجام داده بود و داشت به مرحله توسعه هوش مصنوعي مي رفت . فكر ميكنم به اونها بپيونديد زودتر به نتايج دلخواه برسيد ...
barnamenevis.org/forum
 

Next

عضو جدید
با دروود ...

نفرماییید قربان ....
یعنی مهندسای عزیز وقت اینجور کار هار و ندارند....
 

Mehdi.A

عضو جدید
لطفا به این سؤالات پاسخ بده:

1. این برنامه برای بازی دو نفر نوشته شده (یا می خواهی با کامپیوتر بازی کنی)؟
درصورت دو نفره بودن:
2. می خواهی نحوه برقراری ارتباط بین دو برنامه چگونه باشد (Networking یا Web)؟
3. آیا زبانی را برای نوشتن آن انتخاب کرده ای؟
 

Next

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

Mehdi.A

عضو جدید
می دونم که خیلی طولانی شده

می دونم که خیلی طولانی شده

خوب حالا باید یکی از تکنولوژیهای تحت وب را انتخاب کنی. من جاوا کارم و با تکنولوژیهای مبتنی بر جاوا آشنایی دارم. ولی برای این برنامه نیازی به پیچیدگیهای جاوا نیست. بخصوص که برای افراد تازه کار و آنهایی که با جاوا آشنا نیستند، استفاده از سرورهای وب مبتنی بر جاوا کمی سخت است. ولی درصورت استفاده از جاوا برای اینکار، وارد حیطه ای خواهی شد که در آینده کاریتان تاثیر فراوانی خواهد داشت (به مرگ عمه جانم قصد مقایسه جاوا و دات نت را ندارم).
به هر شکل قدم بعدی انتخاب تکنولوژی وب و یک سرور جهت پیاده سازی برنامه خواهد بود (اگر می خواهی بپرسی که چرا سرور؟ باید خدمت عرض کنم که شما به یک سرویس دهنده میانجی و صد البته به یک IP استاتیک نیاز دارید). فرض را بر استفاده از ASP، COM (مثلا C#) و IIS می گذارم (که همگی مبتنی بر MS هستند). دلیل انتخاب C#، شیئ گرا بودن آن است، چراکه برای پیاده سازی این برنامه استفاده از اشیاء (Object) کار را بسیار ساده خواهد کرد. اگر دانشجو و یا تازه کار هستی، احتمالا به C یا C++ آشنایی. C++ باز هم مشکل را حل می کند ولی C علارقم حل مشکل، کمی کار را پیچیده تر می کند (به قول خودت این ور و نگاه کردی نبود...). من فرض را بر استفاده از یک زبان شیئ گرا قرار می دهم.
خوب بیا حالا یه کم حرفه ای بازی در بیاریم. منظورم این است که می خواهم با این سؤال شما همانند یک پروژه واقعی برخورد کنم. من فرض می کنم که مشتری از من خواسته تا برنامه ای برای وی بنویسم. صورت درخواست مشتری بدین ترتیب است. آقای مهندس عزیز: من یک سایت فلان دارم که اخیرا بنا بر نظر مدیر سایت، قصد افزودن برخی سرگرمیها را بدان داریم. در قدم اول می خواهیم یک بازی شطرنج برای سایتمان طراحی کنیم. در حال حاضر سایت ما مطابق شرایطی که در بالا گفته شده، در حال کار است و در ادامه هم می خواهیم که این برنامه ها با بستر در حال اجرای ما سازگار باشند. آقای مهندس عزیز گفتگوهای بیشتری با مشتری خواهند داشت که نتیجه آن یک سری متن به شرح زیر خواهد بود (البته این متن به شدت خلاصه شده و غیر دقیق است).

موضوع پروژه:
طراحی یک بازی شطرنج برای یک بستر تحت وب.

ویژگیهای فنی پروژه:
1. از تکنولوژیهای Microsoft .Net در این پروژه استفاده خواهد شد (علت استفاده از این تکنولوژی، سازگاری با بستر در حال اجرای مشتریست).
2. به منظور ساخت GUI برنامه از تکنولوژی ASP استفاده می شود.
3. به منظور ساخت هسته برنامه از زبان C# استفاده می شود.
4. به منظور اجرای برنامه از سرور IIS استفاده می شود.

برآورد مدت زمان پیاده سازی پروژه:
(فعلا بی خیال)

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


متدولوژی تولید:
(حتما در درس مهندسی نرم افزار یک سری مزخرفات در مورد متدولوژیهای تولید خواندی. خدمت عرض کنم که متد Spiral (حلزونی) دیگه خیلی قدیمی شده، اگرچه برای برخی پروژه ها همچنان تنها راه ممکن است. از متدلوژی حلزونی معمولا برای پروژه هایی استفاده می شود که امکان اشراف نسبی بر آن وجود نداشته و تیم تولید محکوم به سعی و خطا می باشند. همانطور که حدس می زنی، در این پروژه چیز مبهمی وجود ندارد بنابراین نیازی به استفاده از این متد نیست. اما، اما، اما... بی تعارف اگر تازه کاری، بهترین متد همین است، چرا که شما هنوز بر روند تولید یک نرم افزار اشراف کامل ندارید. ولی اگر تازه کار نبوده و تجربیاتی در زمینه تولید نرم افزارها (بخصوص تحت وب) دارید، با خیال راحت می توانید به سراغ متد Waterfall (آبشاری) بروید. در این روش، تیم تولید بر کلیه فازها و پیچیدگیهای پروژه مسلط بوده و طی یک جریان زمانی مشخص، پروژه را قدم به قدم کامل می کنند. منظور از قدم به قدم این نیست که نخست فاز اول، بعد فاز دوم، بعد فاز سوم... و به همین ترتیب تا آخر. بلکه کلیه اجزای تیم (شامل معماری، تحلیل، طراحی، پیاده سازی و تست)، تقریبا با فاصله زمانی کمی از یکدیگر، کار خود را شروع می کنند. نکته اینجاست که هیچ یک از واحدهای تولید قصد ساخت محصول نهایی را در یک قدم (First Step) ندارند، بلکه در حیطه خود کار را به چند مرحله پیشرونده (Progressive) تقسیم می کنند. به عنوان مثال، نخست یک شکل کلی از کار را پیاده سازی می شود (امیدوارم در مورد حیطه های تولید و کار مخصوص به هر یک مشکلی نداشته باشی)، با گذشت زمان و گذر از فازهای داخلی هر واحد، گام به گام به محصول نهایی نزدیک می شوند.
شما هم (چنانچه در حد متوسط هستید) می بایست هر یک از مراحل تولید را به چند قسمت پیشرونده تقسیم کرده، و در پایان هر یک از این مراحل، پروژه را در حیطه بعدی تولید دنبال نمایید. به عنوان مثال می توانید پروژه را در سطحی کلی تحلیل کرده و سپس به نوشتن کدهای اولیه بپردازید. در گام بعدی تحلیل خود را به سطح طراحی اشیاء رسانده، و دوباره با بازگشت به کد نویسی، اقدام به ساخت اشیاء طراحی شده نمایید. در گام بعدی، روابط بین اشیاء را پیدا کرده و دوباره به کد نویسی باز گردید)

خوب تا اینجا دیگه حرفه ای بازی کافیه!
بگذار یه کم به هسته برنامه بپردازیم. همانطور که خودت گفتی، کار چندان مشکلی نیست. ما یک صفحه 64 خانه ای داریم که این خانه ها یک در میان در دو محور اصلی (چپ و راست، بالا و پایین) رنگهایشان سفید و سیاه، و در یک محور (ضربدری) همرنگ اند. از طرفی 32 مهره داریم که از برخی جهات با یکدیگر متفاوت و از برخی جهات با یکدیگر مشابه اند. صفحه ما چیزی جز یک آرایه دو بعدی 8*8 نیست، که البته این آرایه حاوی 64 شیئ به نام Cell با برخی ویژگیها خواهد بود، به عنوان مثال رنگ، مختصات افقی، مختصات عمودی وضعیت فعلی (البته برخی ویژگیهای دیگر را نیز می توان بدان افزود که شاید در این مرحله چندان معنی دار نباشند. به عنوان مثال تعداد دفعات امکان گذر از یک خانه می تواند در افق هوش مصنوعی برنامه، فاکتور مهمی به حساب آید. همانطور که حدس می زنی، تسلط بر خانه هایی که امکان گذر و عبور از آنها بیشتر است، شانس برنده شدن را افزایش می دهد (ببین من نه شطرنج بازم، و نه اصلا از این بازی خوشم می آید، پس اگر اشتباه می کنم سوتی نگیر)). بریم سر مهره ها. مهره ها دو ویژگی اصلی دارند که همان رنگ و شخصیت آنهاست. از هر مهره حداقل دو عدد در صفحه موجود است که البته رنگ آنها با یکدیگر متفاوت است. در اینجا دو تا نظر پیش خواهد آمد. تقسیم بندی اولیه مهره ها برحسب رنگ یا شخصیت. از آنجاییکه پس از شروع بازی (یعنی پس از تعیین رنگ هر یک بازیکنان)، تنها فاکتورهای مهم شخصیت و نحوه حرکت هر مهره است، من پیشنهاد می کنم تقسیم بندی مهره ها از شخصیت شروع شود. یعنی مهره شاه، مهره وزیر، مهره رخ ... .
پس تا اینجا یک شیئ داریم به نام مهره شطرنج (که در انگلیسی به آن Man گفته می شود). این شیئ یک ویژگی به نام شخصیت (face) و یک عملکرد به نام حرکت (move) دارد. نکته مهم در مورد این شیئ آن است که کلاس پیاده سازی کننده آن می بایست abstract باشد، چراکه در این مرحله ما نمی دانیم شیئ ساخته شده از آن چه شخصیت و چه حرکتی خواهد داشت. در قدم بعدی می بایست کلاس دیگری را از این کلاس مشتق کنی تا ویژگی رنگ را نیز بدان بیافزاید (می توانی نام این کلاس یا کلاسها را BlackMan و WhiteMan بگذاری). بسته به پیچیدگی مورد نظر، این دو کلاس در این مرحله می توانند abstract یا concrete باشند، این موضوع را برعهده خودت می گذارم (ای بابا؛ مسئله حرکت کم موضوعی نیست. در هر لحظه شما تعداد زیادی مهره دارید که هر کدام قادر به انجام چندین حرکت اند، والبته قادر به انجام چندین حرکت هم نخواهند بود. برخی حرکتها فقط حرکت رو به جلو اند، ولی برخی حرکتها حمله به حساب می آیند. برخی حمله ها ممکن است مجاز نباشند و یا موجب به خطر افتادن وضعیت بازی شوند. پس در هر لحظه تنها شکل حرکت یک مهره مهم نیست، ماهیت حرکت، امکان حرکت و تبعات هر حرکت نیز می بایست بررسی شوند).
یک کم پیشرفته تر:
نکته 1: شما یک شیئ دارید به است Chessboard که اجتماعیست (Composition or Aggregation?) از 64 شیئ دیگر به نام Cell.
سؤال: چرا یک شیئ Chessboard؟
پاسخ: فرض کن برنامه را نوشته ای و به درستی هم در حال اجراست. حال شما و اون دوست محترمتون در حال بازی هستید. فراموش نکرده ای که می خواهیم برنامه مبتنی بر وب باشد، پس صفحه برنامه شما یک URL دارد که من مردم آزار از آن مطلع شده و به سراغ برنامه تان می آیم. با ورود من به صفحه اجرای برنامه چه اتفاقی خواهد افتاد؟ آیا من هم به عنوان یکی از طرفین بازی شروع به دخالت در بازی خواهم کرد (سه نفری)؟ آیا امکان هیچ کاری جز تماشای بازی شما نخواهم داشت؟ آیا برنامه با خطای منطقی مواجه شده و با یک استثنای (Exception) آبروبر متوقف می شود؟ پس هر یک شیئ Chessboard می بایست مختص به دو کاربر باشد. در ادامه می توان به برنامه اجازه ساخت چندین روند (Session) بازی را دارد، یعنی یک شیئ Chessboard دیگر و سایر قضایای آن.
نکته 2: خوب این شیئ Chessboard با 32 شیئ دیگر به نام Man در ارتباط است (Relation). همانطور که می دانی از لحظه شروع بازی تا پایان، تعداد مهره های حاضر در صفحه متغیر خواهند بود. پس ارتباط بین این دو شیئ می بایست با دقت فراوانی تحلیل شود. به عنوان مثال وارد کردن مهره های خارج شده از صفحه مطابق برخی قوانین بازی ممکن است. عدم توجه به این قوانین می تواند منجر به ورود غیر مجاز مهره ها به صفحه، برخلاف قوانین جاری بازی شود.
نکته 3: هر بار که نوبت یکی از طرفین بازی می شود، بازیکن می تواند هر یک از مهره ها را انتخاب کرده، و آن را حرکت دهد. هر مهره تعدادی حرکت مجاز، تعدادی حرکت غیر مجاز، و تعدادی حرکت مخاطره آمیز خواهد داشت. برخورد برنامه با این مسئله چگونه است؟ آیا برنامه در تمام طول بازی کلیه وضعیتهای خانه ها و مهره ها را می بایست در جایی ذخیره کرده، و با انجام هر حرکت، کلیه وضعیتها را به روز رسانی (Update) نماید؟ آیا با انتخاب هر مهره، برنامه وضعیتهای مرتبط با همان مهره را در همان لحظه بررسی می کند؟
نکته 4: در دنیای واقعی می دانیم نتیجه بازی چگونه محاسبه خواهد شد، ولی برنامه شما چگونه می تواند نتیجه یک بازی را مشخص نماید؟ آیا برنامه می بایست زمان تاخیر بین حرکات هر بازیکن را محاسبه نماید؟ آیا برنامه می بایست تعداد حرکات هر بازیکن را محاسبه نماید؟ آیا وضعیت مهره ها می بایست محاسبه شود؟ اگر بازی با کیش و مات یک طرف تمام نشود، نتیجه بازی چگونه محاسبه خواهد شد؟
خوب من دیگه خسته شدم، راستش را بخواهی خیلی طولانی شد. همه آنچه که خواندی می تواند نتیجه اولین جلسه بررسی تولید یک برنامه باشد. فرض من بر این است که هدف نهایی شما آشنایی با روند تولید یک برنامه حرفه ایست، وگرنه ساخت یک برنامه شطرنج اصلا نیازی به طرح آن در یک همچین فضایی ندارد. پس قدم بعدی با شما. خیلی مایلم نتیجه خود را از این مطالب بفرمایید، و در ضمن قدمهای بعدی را نیز برداشته و در همینجا به اطلاع ما هم برسانید.
من همیشه می گم: سر پر سودا نترسد ز سنگ
(البته کلاه ایمنی هم می شه،،، حالا!)
 
  • Like
واکنش ها: Next

Next

عضو جدید
با دروود..
در ابتدا عرض کنم ..که من تا حدود خیلی زیادی تازه کارم ولی تا حدی هم اشنایی دارم..
اما مشکل اینجاست که من C# نمی دونم ...تغریبا برنامه نویسی من در برابر شما سطح پایین تری دار ه ...ولی (سر پر سودا...)
با سپاس ...
ادامه دارد.
 
بالا