با سلام و خسته نباشید ،
استاد من برای نوشتن این کد چند بار تلاش کردم و به مشکلات مختلفی میخوردم ودر آخر کدی که نوشتم رو اینجا میزارم ونسبت به این کد ،سوالاتم رو مینویسم.
یه توضیح کوتاه راجع به کد میگم ، در این مثال اگر کلید ‘A’ رو فشار بدم ،کد میره تو while و و هر بار که فشار بدم ، شمرده میشه و بعد از اینکه از while ، اومد بیرون نسب به این که چند بار دکمه فشرده شده ،چاپ میکنه ،این کد یه سری مشکلات داره که اگه دکمه ‘D’،فشرده بشه جمع میکنه و بعد ‘A’ هم فشره بشه جمع میکنه و isHeld رو برابر با 1 میکنه و نمیتونه متمایز کنه هر کلید رو باهم و اگه از متغیر های مختلف برای هر کلید استفاده کنم برای جمع کردن به نظرم کد غیر اصولی ای میشه و همینطور یکم دیر چاپ میشه و سریع نیست به خاطر while ،
حالا با توجه به تکلیفی که شما دادین ، من باید از متود addEventListener استفاده کنم و همینطور از getState یا با این روش که من رفتم هم میشه؟ ، چون من از این متود هم استفاده کردم ولی برای متمایز قائل شدن بین RELEASED ها به مشکل میخورم ،نمیتونستم این رو به کامپایلر بفهمونم که دکمه که فشره شد ، چاپ نکن چیزی رو و منتظر وایسا که اگه دکمه باز هم فشره شد که چیز دیگه ای رو چاپ کنی ، یا چاپ کنه و بعد پاک کنه و جدید رو چاپ کنه که در مانیتور putty میشه استفاده کرد و اگر بعد ها دکمه ای دیگر فشرده شد همه رو پاک نکنه ، بتونه تشخیص بده که دکمه جدید که مثلا چند ساعت بعد زده میشه رو پاک نکنه و فقط زمانی پاک کنه که من مثلا میخوام بنویسم C ، زمانی که یک بار فشار دادم دکمه رو A رو چاپ کنه دفعه بعد که کمتر از 1 ثانیه بعد باید فشار بدم A رو پاک کنه و B رو چاپ کنه و به همین شکل بره جلو .
نمیدونم تونستم منظورم رو درست توضیح بدم یا نه ، ولی مشکل اصلی این است که بین RELEASED ها هم بتونم سوییچ کنم .
از تابع میلیس هم برای این که یه Time out بزارم استفاده کردم ،ولی در loop که استفاده میکردم نمشید و در خود متود addEventListener هم که میخواستم بزارم ، نمشید چون فقط زمانی که دکمه ای فشرده میشد میرفت در اون متود و بقیه زمان ها در loop بود ، به خاطر همین مشکل ، در loop هم نمیتونستم چون addEventListener و loop انگار که جدا از هم کار میکردن و به کار هم دخالت نمیکردن .
با تشکر فراوان