PDA

View Full Version : 2-3 تا سوال در مورد یه برنامه گرافیکی



bashir_nashi
جمعه 23 آذر 1386, 18:53 عصر
سلام دوستان
من دارم یه بازی ماشین نسبتا ساده با اسمبلی می نویسم . تا اینجا تازه تونستم طرح بازی رو پیاده کنم و هنوز هیچ حرکتی انجام نمیشه. (عکس)
برای ادامه کار به چند مشکل برخوردم :
- من یه پروسیجر نوشتم که یک x و y1 و y2 رو می گیره و یه خط عمودی می کشه.ومثلا برای رسم جاده این پروسیجر برای x های از 200 تا 440 فراخوانی میشه(یعنی 240 بار)و در هر بار فراخوانی یه خط از y=0 تا y=480 میکشه .
مشکل اینه که این کار تقریبا 5 ثانیه طول میشکه و رسم این خطوط مثل یه انیمیشن قابل رویته. که این مشکل سازه . نمی دونم این طبیعیه یا نه!!!!
- در زبونهای ویژوال یه کنترل timer داریم که می تونیم بهش بگیم مثلا هر 200ms یه کاری رو برامون انجام بده. من برای حرکت دادن خطوط سفید وسط جاده - که نمایانگر حرکت ماشین هستند - به همچین چیزی نیاز دارم که مثلا هر 50ms خطوط سفید 5 پیکسل پایین تر بیایند.آیا می توان چنین چیزی رو شبیه سازی کرد؟
- من می خوام برنامه مدام منتظر فشردن یک کلید از صفحه کلید باشه تا هروقت کلید چپ فشرده شد ماشین به سمت چپ برود و ... برای این کار باید چه کنم؟

منو ببخشید که اینقدر طولانی شد . خوشحال میشم راهمایی هاتون رو بشنوم.

Delphi Coder
جمعه 23 آذر 1386, 19:36 عصر
بهتر بود مشخص می کردید که این برنامه رو چه OS و چه مودی کار می کنید.
با فرض اینکه تو 80x86 و RealMode برنامتونو می نویسید در این صورت احتمالا از وقفه های bios برای اینکار استفاده کردید که خیلی کند هستن. بهتره ترسیمات رو خودتون مستقیم در VIDEO RAM انجام بدید تا مشکل کندی رفع بشه.

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

bashir_nashi
شنبه 24 آذر 1386, 18:33 عصر
با فرض اینکه تو 80x86 و RealMode برنامتونو می نویسید در این صورت احتمالا از وقفه های bios برای اینکار استفاده کردید که خیلی کند هستن. بهتره ترسیمات رو خودتون مستقیم در VIDEO RAM انجام بدید تا مشکل کندی رفع بشه.

سلام . حدستون درسته ولی نمی دونم چطور باید مستقیم در video ram بنویسم. ممکنه یه راهنمایی کنین.

Delphi Coder
یک شنبه 25 آذر 1386, 00:08 صبح
اولا عرض ارادت دارم خدمتتون به خاطر همین علاقه و تحقیقی که دارید. در مورد سوالی که فرمودید حقیقتش ایجاشو خودوم هم دقیق نمیدوم یعنی مشکل خود من هم بود یه زمانی ولی به خاطر اینکه باید سویچ میکردم روی برنامه نویسی ویندوز یه سری از تیپ این سوالات همونجوری مجهول دفن شد توی ذهنم. فقط میدونم که نباید از bios برای set کردن pixel ها استفاده کرد bios همینه که هست و کاریشم نمیشه کرد. سوال شما رو که دیدم تصمیم گرفتم یکی دو روز روش کار کنم چون خودم هم علاقه زیادی به این موضوع دارم. من به زودی نتیجه کارمو ایجا میگم بهتون شما هم اگه چیزی پیدا کردید ممنون میشم اگه همینجا Share کنید .
در مورد Timer نگران نباشید وقفه 8 رو داریم که نرمال ثانیه ای 18/2 بار تیک میزنه که میشه مقدارشو به دلخواه تنظیم کرد. در مورد کلید هم وقفه 16 تابع 1 واسه همون کاره تابع 0 وامی ایسته تا کلید فشار داده بشه ولی به درد شما نمی خوره چون کارای دیگه ای توی برنامتون باید انجام بشه. راستی اگر Reference خوبی برای وقفه ها پورت ها و آدرسهای bios و این چیزا ندارین می تونید از helppc استفاده کنید یکی دو تا تاپیک بالاتر یا پایینتر ضمیمه یکی از Post هام کردم.

bashir_nashi
یک شنبه 25 آذر 1386, 19:44 عصر
ممنون از راهنمایتون
int list رو هم گرفتم . خیلی کارامده.
ولی در مورد وقفه 8 که همراه با 1c استفاده میشه و همچنین وقفه 16 تابع 1 برای کیبورد نتونستم کاری بکنم. در واقع انگار روش استفاده از این وقفه ها یه مقدار متفاوت با بقیه است.
میشه طریقه بکاربردن این دو وقفه رو بگید . اگه چند خط کد باشه بهتره!!!
در مورد وقفه timer می دونم که باید در آدرس وقفه 1c پرویسجرم رو قرار بدم و از اونجا به یه جای دیگه که این وقفه رو انتقال دادم پرش کنم ولی با توجه به اطلاعات کمم از اسمبلی این کار رو بلد نیستم. اگه کدی دارید برای این کار ممنون میشم اگه بدستم برسه .
thanks

Delphi Coder
دوشنبه 26 آذر 1386, 07:51 صبح
دو برنامه کوچک به اسمهای vga و clock ضمیمه کردم که فکر میکنم از بهتر از هر توضیح دیگری باشند. برنامه vga نحوه نوشتن روی VideoRam را در مد 13 و 256 رنگ نشان میدهد و برنامه Clock چگونگی Hook کردن وقفه1c. این برنامه وقفه 1C را Hook کرده و در هر بار اجرای وقفه ساعت جاری سیستم را در گوشه سمت راست بالای صفحه نشان میدهد.

bashir_nashi
دوشنبه 26 آذر 1386, 20:04 عصر
واقعا ممنون از راهنماییتون
مشکل من در مورد سرعت پایین رسم اشکال کاملا حل شد.
ولی در مورد وقفه 1c چیزی دستگیرم نشد. در واقع همون فایل clock هم اجرا که میشه هیچ اتفاقی نمی افته (یا اگه می افته من متوجه نشدم!!!) . احساس من اینه که این برنامه کاری بیش از چیزی که من میخوا داره انجام میده . من می خواهم این برنامه رو جوری تغییر بدم که پروسجری که فراخونی میشه مثلا یه کاکتر چاپ کنه . در نتیجه با اجرای برنامه باید در هر ثانیه 18 کارکتر چاپ بشه و همین جوری بره پایین. من وقتی برنامه clock رو اجرا میکنم در جا خارج میشه و ...
تو برنامه جای اون پروسیجری که هربار فراخونی باید بشه هر چیز دیگه ای هم که نوشتم اجرا نشد (مثلا همون چاپ یه کارکتر)
در واقع به بن بست خوردم! می تونم ازتون خواهش کنم همین برنامه clock رو جوری تغییر بدین که هر بار یه کارکتر چاپ کنه. چون فکر می کنم اینجوری از شر جوانب کار آزاد بشم و بتونم بفهمم دقیقا چطوری داره کار می کنه.

Delphi Coder
سه شنبه 27 آذر 1386, 09:20 صبح
احتمالا سعی کردید از ویندوز نتیجه شو ببینید. از منوی Start گزینه Run رو بزنید و بعد از Type کردن CMD دکمه ok رو بزنید. اونجا میتونید برنامه رو اجرا کنید و نتیجه شو ببینید.

bashir_nashi
سه شنبه 27 آذر 1386, 15:22 عصر
این طور نیست . من تو xp از cmd اجرا کردم چیزی ندیدم ولی تو 2000 که اجرا کردم نتیجه رو مشاهده کردم . برنامه جواب میده ولی کاری که من می خوام بکنم متفاوت با اینه .
من می خوام در حال اجرای برنامه خودم یه پروسیجر مدام صدا زده بشه تا بتونه همزمان با اجرای مکرر اون کارهای دیگه برنامم هم انجام بشه.
این طور که من متوجه شدم clock یه برنامه مقیم در حافظه ایجاد میکنه که در حین انجام دیگر کارها تو داس اجراش ادامه پیدا می کنه .
بازم ازتون می خوام یه برنامه ای که این کار رو انجام بده برام بزارین . ممنون

Delphi Coder
سه شنبه 27 آذر 1386, 19:36 عصر
یه توضیح کوچولو میدم اگه کمکتون نکرد حتما همون کارو میکنیم.
1- می تونید تو برنامتون یه حلقه داشته باشید که همه کارارو براتون انجام بده تا اینکه از Timer کمک بگیرید.
2- اگر تغییری تو Interrupt Handler دادید و کار نکرد به 2 تا نکته توجه داشته باشید. اول اینکه از سرویسهای DOS اونجا استفاده نکنید و دوم DS Register رو اگه استفاده می کنید حتما باید مقدار دهی کنید. اگر خواستید برنامتونو upload کنید اینجا تا بتونم کمکتون کنم. در ضمن اون قسمتی که برنامه رو تو Memory مقیم میکنه Ignore کنید انگار که وجود نداره و بعد نصب interrupt handler برنامه همینطور مشغوله و داره کارایی رو انجام میده. مهم کارگردان وقفه و قسمتی هست که اون رو نصب میکنه.

اگر بازهم احساس نیاز کردید که برنامه عوض بشه بگید تا براتون عوضش کنم.

bashir_nashi
پنج شنبه 29 آذر 1386, 17:22 عصر
با تشکر از توجهتون
شما هر چی بیشتر برام توضیح می دید , من بیشتر متوجه میشم که ار اسمبلی چیزی نمی دونم !!!
در واقع می خوام بگم خیلی از چیزهایی که در بالا گفتید سردرنیاوردم. ولی یه توضیح کوچولو در مورد برنامم بدم که جریان کار دستتون باشه (البته حتما بعد از اتمام برنامه اونو اینجا میزارم تا تازه کارهایی مثل من ازش استفاده کنن)
نمای کلی بازیم که تو اون عکس بود . من یه پروسیر دارم به نام GoDown که هر بار که فراخونی بشه تمام اشیائی که در جاده هستند (البته غیر از ماشین) چند پیکسل به سمت پایین میان و نمایانگر حرکت ماشین به سمت بالا است. کار که باید بکنم اینه که این پرسیجر هر ثانیه 18 بار احرا بشه تا مثلا در هرثانیه همه چیز 18 پیکسل به سمت پایین بیاد .
اگه اونو تو یه حلقه فراخونی کنم که یکسره اجرا میشه و اصلا چیزی رو نمی شه دید.
در ضمن چون باید همزمان با حرکت ماشین (فراخوانی های مکرر GoDown) برنامه آماده دریافت کلیدی از ورودی جهت حرکت به سمت چپ و راست هم باشه نمی شه مثلا این فراخونی ها رو با یه delay انجام داد.
فکر کنم منظورم رو رسونده باشم . خواهش می کنم شما یه برنامه بنویسید که توش یه پروسیجر که یه کار ساده میکنه همزمان با اجرای برنامه هر ثانیه 18 بار اجرا بشه که من بتونم ازش تو برنامم استفاده کنم.
ممنون

Delphi Coder
جمعه 14 دی 1386, 15:15 عصر
خواهش می کنم شما یه برنامه بنویسید که توش یه پروسیجر که یه کار ساده میکنه همزمان با اجرای برنامه هر ثانیه 18 بار اجرا بشه که من بتونم ازش تو برنامم استفاده کنم.
برنامه ساعت دقیقا داره همین کار رو انجام میده فقط شما فکر کنید اون قسمتیش که داره برنامه رو مقیم میکنه وجود نداره.

bashir_nashi
دوشنبه 17 دی 1386, 19:02 عصر
جناب Delphi Coder از تمام راهنمایی هاتون ممنونم
با توجه به کم آوردن وقت من دیگه برنامه رو ادامه ندادم و در واقع حرکت ماشین با فشردن کلید بالا در کیبورد صورت می گیره. (این برنامه رو بعنوان پروژه باید تحویل میدادم)
همون طور که گفتم سورسش رو اینجا میزارم تا تازه کارهایی مثل من بتونن ازش استفاده کنن.

mohammadreza0123
سه شنبه 13 تیر 1391, 12:31 عصر
سلام

خواهشا یه نفر کمکم کنه

کسی هست رسم خط با استفاده از معادله خط رو بلد باشه

تورو خدا کمک کنید

گیر افتادم

حتما با استفاده از معادله خط باشه

و هر بار که اجرا میشه شیبش هم تغییر کنه

کمک کنید

یعنی هیچکی نمی تونه کمکم کنه؟
؟؟؟

:(

mohammadreza0123
سه شنبه 13 تیر 1391, 12:33 عصر
کسی هست بتونه کد رسم خط با استفاده از معادله خط را به من بده

ssbostan
سه شنبه 13 تیر 1391, 14:38 عصر
با سلام؛
دوست عزيز شما تاپيك سال 86 رو مجددا فعال كرديد و ميتونستيد به جاي اين، سوالتون رو در يك تاپيك جديد مطرح كنيد.!!!

در اين مورد قبلا پست داديد و جواب هم داده شده...

رجوع كنيد به: http://barnamenevis.org/showthread.php?344589-%D9%85%D8%B4%D9%83%D9%84-%D8%AF%D8%B1-%D8%B1%D8%B3%D9%85-%D8%AE%D8%B7-%D8%AF%D8%B1-%D8%A7%D8%B3%D9%85%D8%A8%D9%84%D9%8A

موفق باشيد.