PDA

View Full Version : درک فشرده شدن 2 کلید بالا و پایین توسط c



shr6557
یک شنبه 07 اسفند 1384, 22:23 عصر
من می خوام یک بازی ساده بنویسم
برای این کار نیاز دارم پیاده سازی حرکت در 4 جهت اصلی و 4 جهت فرعی برای چهار جهت فرعی باید بتونم بفهمم که کاربر کی مثلا دو دکمه بالا و راست را با هم فشار می ده تا مثلا حرکت به سمت شمال شرقی داشته باشه ولی وقتی کاربر این دو را با هم فشار می ده و نگه می داره با تابع getch که کار می کنم فقط اون دکمه ای رو که اول زده هی تکرار می کنه!
چه کار باید بکنم

mzjahromi
دوشنبه 08 اسفند 1384, 08:18 صبح
اگر تحت داس کار می کنی بهتره از Interrupt استفاده کنی. یه چیزی شبیه به TSR یکی از توابع بایاس هستش(الان شماره اش دقیق یادم نیست) وقتی که یک کلید فشرده میشه یک بار کال میشه و وقتی رها میشه یک بار دیگه. این فکر کنم مشکلتو کاملا حل کنه. ولی خوب یخورده دردسر داره

shr6557
دوشنبه 08 اسفند 1384, 18:29 عصر
اقا من رفتم تو help و دستورات bios.h رو خوندم دو تا دستور بود که به کیبورد ربط داشته که هیچ کدوم کار من رو راه نداخت می شه بیشتر توضیح بدین

Iran-PC
دوشنبه 08 اسفند 1384, 18:43 عصر
سلام
من قبلا این کار رو کرده بودم و همراه یک برنامه دیگه تو این سایت گذاشتم.
یه برنامه بود برای گرافیک و اینا و همین کار رو هم میکرد.
حتی با کمی تغییر میشه به هر تعداد که خواستی اضافه کنی.
یعنی مثلا بجای 2 تا کلید همزمان 4 تا کلید رو بگیره.
یه کتابخونه گرافیکی ناقص (ولی سریع رو هم گذاشته بودم).
بگردید پیداش کنید.

mzjahromi
دوشنبه 08 اسفند 1384, 18:51 عصر
اقا من رفتم تو help و دستورات bios.h رو خوندم دو تا دستور بود که به کیبورد ربط داشته که هیچ کدوم کار من رو راه نداخت می شه بیشتر توضیح بدین
منظور من توابع بایاس هدر نبود منظور من وقفه ای بود که وقتی یک کلید فشرده میشه صدا زده میشه. الان یادم نیست کدوم وقفه هست.

daneshjoye_azad
دوشنبه 01 خرداد 1385, 19:45 عصر
سلام

ببین من خودم یه بازی با ++c نوشتم و میدونم داری چی میگی

پس برات توضیح میدم ::::

برای اینکه تو تغریف کنی که جسمت به بالا بره بایئ دستوری بنویسی که با دریافت یه کلید به مقدار x ش مثلا 5 تا اضافه بشه....

daneshjoye_azad
دوشنبه 01 خرداد 1385, 19:47 عصر
بعدش برای اینکه در جهات دیگه حرکت کنه میتونی همین کار رو انجام بدی که با دریافت کلید تعریف شده توسط شما در جهت خاص حرکت کنه ....



اگه مشکلی داشتی بگو تا توضیح بیشتری بدم ......

daneshjoye_azad
یک شنبه 21 خرداد 1385, 09:56 صبح
ببین
یه if میدی با شرط ()kbhit بعد تئیه این شرط یه switch میزاری که شرط اون getch باشه
حالا تویه case ها یکی یکی تیریف میکنی یعنی یه case برای حرکت رو به بالا و ........

Argonod
یک شنبه 21 خرداد 1385, 20:58 عصر
int b;
while(1)
{
union REGS ii,oo;
ii.h.ah=0;
int86(22,&ii,&oo);
b=oo.h.ah;
switch(b)
{
case 72 : your function for up(); break;
case 80 : your function for down(); break;
case 75 : your function for left(); break;
case 77 : your function for right(); break;
}
}
اگر یک بار حرکت داری پس نیازی به حلقه نداری. در غیر اینصورت شرط خروج قرار بده