PDA

View Full Version : بازی شطرنج در اسمبلی



merelin
پنج شنبه 14 دی 1385, 18:34 عصر
سلام به دوستان عزیز
راستش یه پروژه دارم که باید تا 3 هفته ی دیگر تحویلش بدم پروژم هم نوشتن بازی شطرنج با تمام امکناتش هست یعنی تمامی قوانین و حرکات به طور کامل، حالا تا حالا تونستم فقط صفحه با مهرهاشو طراحی کنم ولی نمی دونم چطوری باید حرکتشون بدم ؟راستی من تمامی مهرهامو با مستطیل و مثلث طراحی کردم اگر بخوام دایره بکشم باید چی کار کنم ؟
تر خدا منو راهنمایی کنید نوشتن یه بازی اون هم با اسمبلی کار خیلی سختی

someCoder
پنج شنبه 14 دی 1385, 18:59 عصر
اول اینکه باید محل قرار گرفتن مهره ها رو داشته باشی(مثلا تو یه آرایه 8*8) و از روی اون صفحه شطرنج رو بکشی. در این صورت حرکت مهره هات میشه تغییر در اون آرایه و رسم دوباره شکل صفحه از روی آرایه.

merelin
شنبه 16 دی 1385, 22:51 عصر
ممنون از راهنماییتون ولی اینو خودم هم می دونستم مشکل اینجاست که در این بازی کاربر باید با ماوس مهرها رو حرکت بده و من از لحاظ گرافیکی نمی دونم که باید چطوری یک وقفه بندازم تا این حرکت رو شبیه سازی کنم البته ناگفته نماند که وقفه های ماوس رو می دونم و بلدم باهاشون کار کنم ولی اینکه مهررو بدون رنگ کنم ودوباره رنگ کنم(منظورم همون حرکتش)کار سختی و اصلا نمی دونم باید از کجا شروع کنم ، میدونید اینکه چطوری میشه یک شکل خمیده کشید و داخل اون رو رنگ کرد برام شده یه سئوال اگر لطف کنید و تو این زمینه ها من رو راهنمایی بفرمایید کمک بزرگی میکنید

someCoder
شنبه 16 دی 1385, 23:14 عصر
اینکه مهررو بدون رنگ کنم ودوباره رنگ کنم(منظورم همون حرکتش)کار سختی و اصلا نمی دونم باید از کجا شروع کنمچرا اینقدر مساله رو برای خودت پیچیده میکنی؟ خوب کل صفحه جدید رو یک بار روی قبلی بکش! اینجوری قبلی هم پاک میشه. یه کمی کند تر هست ولی خیلی راحت تره.


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

merelin
یک شنبه 17 دی 1385, 14:48 عصر
بازم ممنون از راهنماییتون راستش اینکه یک بار صفحه رو بکشیم و پاک کنیم رو یکی از بچه ها پیشنهاد کرد ولی استدمون گفت نه این کارو انجام ندید
و در ضمن میشه در باره ی این فراخوانی که در مورد رنگ کردن فرمودید بیشتر توضیح بدید البته خودم هم سعی می کنم روش فکر کنم
بازم ممنون

merelin
یک شنبه 17 دی 1385, 14:54 عصر
مرسی از راهنماییتون روی پیشنهادتون کار می کنم و اگر به نتیجه نرسیدم بازم مزاحمتون می شم
خیلی ممنون

someCoder
یک شنبه 17 دی 1385, 22:09 عصر
سلام،
اگر به نتیجه نرسیدی اینو یه نگاهی بکن. یه چیزی تو این مایه ها میشه:

paint(x, y, newColor)
{
oldColor = Image[x][y].color;
Image[x][y].color = newColor;
if(Image[x][y+1].color == oldColor){
paint(x, y+1, newColor);
}
if(Image[x][y-1].color == oldColor){
paint(x, y-1, newColor);
}
if(Image[x+1][y].color == oldColor){
paint(x+1, y, newColor);
}
if(Image[x-1][y].color == oldColor){
paint(x-1, y, newColor);
}
}

simonet
جمعه 06 بهمن 1385, 09:39 صبح
برای اینکه یک ماتریس تعریف کنیم از دستور زیر استفاده می کنیم :

mat db 8 dup(8 dup(?))
ولی من نمی دونم وقتی بخواهیم مقدار دهی کنیم چه طور باید ماتریس رو تعریف کنیم.
مثلا" ماتریس زیر:

2 3 4 5 6 4 3 2
1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
7 7 7 7 7 7 7 7
8 9 10 11 12 10 9 8
هر شماره مربوط به یک مهره است.دو ردیف بالا مربوط به مهره های سفید و دو ردیف پایین مربوط به مهره های سیاه است و صفر نشان دهنده ی این است که خانه خالی است و مهره ای در آن قرار نگرفته.
لطفا" من رو راهنمایی کنید. من هنوز در حرکت دادن مهره ها مشکل دارم:ناراحت:

someCoder
جمعه 06 بهمن 1385, 10:38 صبح
mat db 2,3,4,5,6,4,3,2,1,1,1,1,1,1,1,1,0,0,...
بقیه اش رو جای ... بنویس

aidinwashere
جمعه 06 بهمن 1385, 20:29 عصر
سلام
میشه استاد و دانشگاهتون رو معرفی کنید؟
علاقه مند شدم با استادتون آشنا بشم. (اگه مایل بودید پیغام خصوصی بدید)
مرسی.

merelin
شنبه 07 بهمن 1385, 16:13 عصر
سلام اگر بخواهیم این ماتریس رو به گرافیک مرتبط کنیم باید چیکار کنیم ؟ منظورم اینه که مهر ه های صفحه ی شطرنج را چطوری به ماتریسی که ساختیم مرتبط کنیم
ممنون میشم اگر زودتر راهنمایی کنید

someCoder
شنبه 07 بهمن 1385, 16:27 عصر
نمیدونم مشکلت دقیقا کجاست؟
اما اگر میتونی وارد مد گرافیکی بشی و نقطه و خط و ... بکشی، بعدش کافیه صفحه شطرنج رو بکشی و با دو تا حلقه روی این ماتریس حرکت کنی، و به ازای هر خونه اگر توش مهره بود، مهره رو در مختصاتی که حساب میکنی رسم کنی.

حالا بگو دقیقا کجاشو مشکل داری؟

Emir New
شنبه 07 بهمن 1385, 19:04 عصر
سلام من می خوام یک برنامه ای بازه بین 100 تا 999 رو بگیره و به توان 2 برساند مثلا
اگر 100 را داشته باشیم 1رو به توان 2 برساند و 0اول رو به توان 2 برساند و 0دوم رو به توان 2 برساند و اگر جواب ان دویاره برابر 100 بود ان را در خروجی چاپ کند اگر همچین برنامه ای رو داشته باشید و د راختیار من بگذارید از شما ممنون می شوم
با تشکر
7/11/85
(amir_changizi2003@yahoo.com)

Emir New
شنبه 07 بهمن 1385, 19:05 عصر
ممنون می شوم اگر جواب را به ایمیل من هم ارسال کنید چون به دلیل گرفتاری زیاد به سایت برنامه نویس نمایم
amir_changizi2003@yahoo.com

someCoder
شنبه 07 بهمن 1385, 20:06 عصر
ممنون می شوم اگر جواب را به ایمیل من هم ارسال کنید چون به دلیل گرفتاری زیاد به سایت برنامه نویس نمایم
amir_changizi2003@yahoo.com

هر دم از این باغ، بری می رسد! :متعجب:

mortez maya
شنبه 07 بهمن 1385, 20:35 عصر
هر دم از این باغ، بری می رسد! :متعجب:

حافظاااااااااااااا.........!!!! ؟؟

simonet
یک شنبه 08 بهمن 1385, 08:53 صبح
سلام
مثلا" کاربر با موس رو نقطه ای به مختصات(40و50)کلیک می کنه برای جابه جا یی مهره .
خوب ما نمی دونیم که رو کدوم مهره کلیک کرده ماتریس رو هم به همین دلیل ایجاد کردیم .حالا نمی دونیم ماتریس رو چه طور به مهره ها ربط بدیم.

someCoder
یک شنبه 08 بهمن 1385, 13:13 عصر
سلام
مثلا" کاربر با موس رو نقطه ای به مختصات(40و50)کلیک می کنه برای جابه جا یی مهره .
خوب ما نمی دونیم که رو کدوم مهره کلیک کرده ماتریس رو هم به همین دلیل ایجاد کردیم .حالا نمی دونیم ماتریس رو چه طور به مهره ها ربط بدیم.

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

aidinwashere
یک شنبه 08 بهمن 1385, 15:33 عصر
عمل Drag & Drop رو چطوری میشه انجام داد؟

simonet
یک شنبه 08 بهمن 1385, 17:30 عصر
مختصاتی که کاربر کلیک کرده که معلومه کجای صغحه شطرنج میشه. از روی آرایه ببین تو اون خونه چی داری
همین دیگه نمی دونیم چه طور مهره ها رو به ماتریس ربط بدیم.:ناراحت:

someCoder
یک شنبه 08 بهمن 1385, 20:32 عصر
کجاشو نمیدونی؟

مختصاتی که کاربر کلیک کرده که معلومه کجای صغحه شطرنج میشه
یا

از روی آرایه ببین تو اون خونه چی داری

Emir New
یک شنبه 08 بهمن 1385, 22:58 عصر
سلام
من از شما ممنونم که قانون سایت رو به من یاد داید
هیچ وقت فکر نمی کردم یک برنامه نویس بتونه شعر حفظ کنه یا اینکه اصلا ذوق شعر داشته باشه



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


. پشت ابرها نگاه می کردند بی طاقت شدند
نمی دانستم که حرفم را باید به که بگویم ، یا اصلا" از چه بگویم .

و ایــــن حقــــــــیقتی ســـــت مـــــــاندنی .............

someCoder
یک شنبه 08 بهمن 1385, 23:47 عصر
آقای امیر چنگیزی(Emir New)، حالا که صحبت از قوانین کردی، فکر میکنم لازمه یک سری از قوانین رو بهتون یادآوری کنم. هرچند موقع ثبت نام همه اینها رو خوندین و طبق همین قوانین من حق ندارم بهتون تذکر بدم! اما چون صحبت رو به اینجا کشوندین، لازم شد:

قانون شماره 27
درخواست و حل تمرین پروژه های دانشجویی اکیداً ممنوع بوده و تنها استفاده از مباحث و درخواست راهنمایی در این راستا مجاز می باشد.

قانون شماره 9
از ایجاد گفتگوهای یکسان در بخش های مختلف پرهیز کنید.
ضمنا یاد آوری میکنم شما همین سوال رو در ۲ جای دیگه هم (بجز اینجا) عینا تکرار کرده اید:
http://barnamenevis.org/forum/showthread.php?p=302597#post302596
http://barnamenevis.org/forum/showthread.php?p=302601#post302601

قانون شماره 8
لطفاً در هنگام طرح سوالات خود آن ها را به صورت جداگانه مطرح فرمایید.

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


ضمنا من اول به این دلیل تذکر ندادم:
قانون شماره 24
کاربران عادی سایت حق دخالت در مسائل مدیریتی سایت را ندارند

لیست کامل قوانین رو هم اینجا (http://barnamenevis.org/forum/showthread.php?p=292810) میتونین ببینین.

فکر میکنم شکستن این همه قانون فقط با ارسال ۷ پست کار ساده ای نباشه! ماجرای ؛هر دم از این باغ بری میرسد هم این بود که ما همیشه مینالیدیم که قوانین رو رعایت نمیکنند و شما یک دفعه کولاک کردین در مورد قانون شکنی!

simonet
دوشنبه 09 بهمن 1385, 13:20 عصر
ما یک ماتریس برای حرکت مهره ها ساختیم حالا من نمی تونم چه طوری اون ماتریس رو به مهره ها ربط بدم. مثلا" وقتی موس رو یک نقطه کلیک می شه برنامه از کجا بفهمه اونجا کدوم مهره وجود داره که دوباره همون مهره رو جایی که موس برای دومین بار کلیک می شه بکشه. حالا شما فرمودید از رو آرایه می بینیم تو اون خونه چه مهره ای وجود داره.
درسته.
ولی من نمی تونم این رو در برنامه ایجاد کنم.

someCoder
دوشنبه 09 بهمن 1385, 13:53 عصر
ما یک ماتریس برای حرکت مهره ها ساختیم حالا من نمی تونم چه طوری اون ماتریس رو به مهره ها ربط بدم. مثلا" وقتی موس رو یک نقطه کلیک می شه برنامه از کجا بفهمه اونجا کدوم مهره وجود داره که دوباره همون مهره رو جایی که موس برای دومین بار کلیک می شه بکشه. حالا شما فرمودید از رو آرایه می بینیم تو اون خونه چه مهره ای وجود داره.
درسته.
ولی من نمی تونم این رو در برنامه ایجاد کنم.

یا من بد توضیح میدم، یا شما منظورمو نمیگیرین و یا هردوش! :لبخندساده:

جایی که کلیک شده، از روی مختصاتش، مختصات خونه شطرنج رو بدست بیارید. (کجای صفحه 8*8) Ok؟

از تو آرایه ببینید اونجا چه مهره ای هست. ok؟

والسلام!

simonet
دوشنبه 09 بهمن 1385, 14:16 عصر
شما به نظرتون دارید توضیح می دید یا همون حرف های قبلی تون رو تکرار می کنید؟
در هر حال احتمال رو به این بدید که من منظورتون رو نمی گیرم .
از اینکه تا الآن پیگیر این تاپیک بودید ممنون.

someCoder
دوشنبه 09 بهمن 1385, 15:35 عصر
شما به نظرتون دارید توضیح می دید یا همون حرف های قبلی تون رو تکرار می کنید؟
در هر حال احتمال رو به این بدید که من منظورتون رو نمی گیرم .
از اینکه تا الآن پیگیر این تاپیک بودید ممنون.

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

Younes
چهارشنبه 11 بهمن 1385, 10:10 صبح
با سلام
ببخشید که من وسط توضیحات someCoder وارد شدم ولی فکر می کنم اگر نویسنده برنامه که صفحه شطرنج را روی مونیتور رسم کرده جایی نگه دارد(یا از رو ی یک قانون کلی بتواند بدست آورد ) که از چه مختصاتی تا چه مختصاتی (y,x) مربوط به مثلا خانه اول شطرنج است بعد وقتی کاربر کلیک می کند می تواند با گرفتن مختصات محل کلیک و مقایسه آن ( ویا یک محاسبه بر اساس قانون موجود ) بفهمد که در کدام خانه شطرنج است. اینطوری رابطه بین خانه های شطرنج روی صفحه مونیتور با ماتریس تعریف شده بدست می آید.

someCoder
چهارشنبه 11 بهمن 1385, 11:23 صبح
یونس جان! اصلا بقیه اش با تو! والله simonet عزیز که حتما خوشحال میشه کس دیگه ای هم بهش کمک کنه. چون من منظورم رو نمیتونم برسونم.

simonet
جمعه 13 بهمن 1385, 10:10 صبح
سلام
برای ربط دادن خانه های شطرنج به ماتریس کافیه مختصات نقطه ی ابتدایی صفحه شطرنج را از نقطه ی مورد نظر کم می کنیم و عدد حاصل را تقسیم برطول خانه های شطرنج می کنیم.:لبخند: حا لا اگر میشه کسی از دوستان در مورد حرکت دادن مهره ها از طریق صفحه کلید راهنمایی کنه.:لبخند:
ممنون

merelin
جمعه 13 بهمن 1385, 18:59 عصر
سلام somecoder عزیز من می دونم که شما از لحاظ اطلاعاتی خیلی بالا هستید به همین دلیل خواهش می کنم صحبتهای simonet را به دل نگیرید .
خوب پس سئوال رو اینطور مطرح می کنم که من رایطه ی بین ماتریس و صفحه کلید رو پیدا کردم و تمامی توابع حرکت مهر ها رو نوشتم ولی مشکل اینجاست که نمی دونم چطور با ماوس کار کنم البته می دونم که ماوس چطور فعال میشه و مختصات x,y را در cx,dx ذخیره میکنه ولی هر کاری که می کنم تا ماوس یکی از مهرها رو برداره و به جای دیگه ی حرکت بده نمیشه واقعا دیگه نمی دونم چی کار کنم هر الگوریتمی که به ذهنم رسید رو امتحان کردم ولی نشد خواهش می کنم زودتر جواب من رو بدید.....
البته خوشحال میشم اگر به جز somecoder هر کس دیگه ی به من کمک کنه و پیشاپیش ازش تشکر می کنم

someCoder
جمعه 13 بهمن 1385, 19:36 عصر
سلام somecoder عزیز من می دونم که شما از لحاظ اطلاعاتی خیلی بالا هستید به همین دلیل خواهش می کنم صحبتهای simonet را به دل نگیرید .
خوب پس سئوال رو اینطور مطرح می کنم که من رایطه ی بین ماتریس و صفحه کلید رو پیدا کردم و تمامی توابع حرکت مهر ها رو نوشتم ولی مشکل اینجاست که نمی دونم چطور با ماوس کار کنم البته می دونم که ماوس چطور فعال میشه و مختصات x,y را در cx,dx ذخیره میکنه ولی هر کاری که می کنم تا ماوس یکی از مهرها رو برداره و به جای دیگه ی حرکت بده نمیشه واقعا دیگه نمی دونم چی کار کنم هر الگوریتمی که به ذهنم رسید رو امتحان کردم ولی نشد خواهش می کنم زودتر جواب من رو بدید.....
البته خوشحال میشم اگر به جز somecoder هر کس دیگه ی به من کمک کنه و پیشاپیش ازش تشکر می کنم

اولا که خواهش میکنم، بالا کجا بود؟ من کجا بودم؟ اینجا کجاست؟ ...
ثانیا دلگیر چیه؟ دلگیر کیه؟ اینجا کجاست؟ ... :لبخند:
اما از شوخی گذشته، اصلا از این فکرا نکن! :چشمک: و همچنین از این حرفا نزن :متفکر:

بذار برات با شکل توضیح بدم:
فرض کن تو صفحه شطرنج رو با فاصله a از پایین صفحه رسم کردی و همینطور هر خونه ای هم از صفحه شطرنج ارتفاعش b باشه. حالا موس در نقطه x و y کلیک کرده. ما الان فقط با ارتفاعش (y) کار داریم.

http://i5.tinypic.com/2dt4201.png
حالا میخوایم ببینیم کجای صفحه شطرنج شده. دیگه ساده است. از y مقدار a رو کم میکنیم تا فاصله از گوشه صفحه شطرنج باشه (بجای گوشه مانیتور) بعد بر b تقسیم میکنیم تا ببینیم چند خونه از پایین صفحه جلوتر بوده. میشه [y-a)/b)] همینطوری مختصات افقی رو هم حساب میکنی تا ببینی کدوم خونه شطرنج بوده. بعد این خونه select میشه و یه بار دیگه کاریر رو خونه مقصد هم کلیک میکنه.

merelin
یک شنبه 15 بهمن 1385, 19:08 عصر
سلام
ببخشید من قبلا به این روابط رسیدم ولی مشکل سر به دست آوردن مختصات نیست مشکل اینجاست که من دستور cmp bx,01h رو برای کلیک چپ نوشتم ولی اجرا نمیشه حتی با emu این رو debug کردم ولی وقتی کلیک چپ می کنم به فرمان مربوطه پرش نمی کنه و از همه بدتر اینکه من یه تابع update برای اینکه بعد از هر تغییری که در ماتریس داده شد صفحه را با مهرهایش رسم کند نوشتم ولی بی نهایت بار مهرها رو می کشه وخطای unmatched macro nesting می ده در حالی که debug ش کردم مشکلی نداشت واقعا نمی دونم دیگه باید چی کار کنم!!!!!!!؟؟؟؟؟.........

simonet
دوشنبه 16 بهمن 1385, 09:16 صبح
use this interupt:
mov ax,5h
int 33h
cmp bx,0

merelin
سه شنبه 17 بهمن 1385, 15:11 عصر
سلام simonet عزیز دستت درست مرسی .....