質問: プログラミングにおける同時入力について python3.7でゲームの作成をしようと考えています。 わたくし、プログラミング初心者の学生です。 現在初歩的なところからパイソンでのプログラミングを独学で勉強しています。 プログラミングについて私がわかってることといえば、コードはメイン文を上から順に実行されるということくらいです。 パイソンのキー入力といえばinput()関数や、モジュールを追加してのgetch() (エンターキーを不要とする1文字入力)がありますよね。 本題ですが、上から順に実行される上でどのような処理を施したら同時入力が可能になるのでしょうか? 調べ方もよくわからないので、その仕組みや検索ワードなどが知りたいです。 例としてはゲームのスーパーマリオで右移動("→キー"を押す)をしながらジャンプキー("スペースキー"を押す)という処理がありますが、どのように実装されているのか気になっています。 簡単なところから詳しいところまでなんでもいいので、回答宜しくお願いいたします。
回答: `Python`でゲーム向き、すなわちキーリピートメッセージ無視してキー**同時押し**を取得、判定できるプラットフォーム非依存、汎用的な手法は意外となかったと記憶しています。 Windows限定なら以下のようなコードで可能ですが。 参考:How do I detect key presses and mouse clicks in Python? ``` def getKeyState(): import win32api VK_KEYS = [0x26,0x25,0x27,0x28] # 判定対象キーコード。上左右下 VK_STS = { 0x26:0x01, 0x25:0x02, 0x27:0x04, 0x28:0x08} # 同時押し結果はビットで返すように ret = 0 for i in VK_KEYS: if win32api.GetAsyncKeyState(i): ret |= VK_STS[i] return ret while True: s = '' keys = getKeyState() if keys & 0x01: s += '上' if keys & 0x08: s += '下' if keys & 0x02: s += '左' if keys & 0x04: s += '右' if len(s) > 0: print(s) ```