PDA

View Full Version : تشخيص فشار دادن كليد



DataMaster
جمعه 14 تیر 1387, 23:53 عصر
سلام دوستان
من تو قطعه كد زير از تابع kbhint() براي اينكه تشخيص بدم كليدي زده شده يا نه و اگر كليدي زده شده بود اون رو توسط getch ميخونم ، اما مشكل اينه وقتي به ابتداي حلقه ميره بازم تا زماني كه كليد جديدي فشار داده نشه همون مقدار قبلي خوانده ميشه در صورتي كه من ميخوام هر كليدي كه زده شد فقط يك بار توسط برنامه خوانده بشه
لطف كنيد كد رو مطالعه كنيد و بنده رو راهنمايي بفرماييد

do{
if (kbhit()) key=getch();
if(!mat1.test_shape())
{
oldx=x;oldy=y;
switch(key)
{
case 75: x--;if(x<0)x=0;break;
case 77: x++;if(x>20-mat1.get())x=20-mat1.get();break;
case 13: mat1.changeshape();
}
oldshape=shape;
delay(500);
y++;
if(y>20-heigh)
{y=0;shape=newshape;newshape=random(9);y=0;
mat1.draw_shape(shape,22,17,0);
mat1.draw_shape(newshape,22,17,4);}
else
mat1.draw_shape(oldshape,oldx,oldy,0);
}else
if(y==0)
{key=27;printf("You Win!!!");}
else
{x=8;y=0;shape=newshape;newshape=random(9);
mat1.draw_shape(shape,22,17,0);
mat1.draw_shape(newshape,22,17,4);}
mat1.clearmatrix();
mat1.refresh();
mat1.draw_shape(shape,x,y,3);
key==0;
}while(key!=27);

A.S.Roma
شنبه 15 تیر 1387, 23:29 عصر
سلام

نمی دونم منظورتون رو درست متوجه شدم یا نه .
چک کنید با جایگزینی این خط


while(!kbhit());
key = getch();
جای این خط


if(kbhit()) key = getch();
مشکلتان حل می شود یا خیر !؟