###こんにちは、みんな。
この小さなプロジェクトを分解して、実装を段階的に説明していきます。記事の最後に、プロジェクトの完全なソース コードを入手します。 1. 航空機戦争プログラムの準備Github で航空機戦争プログラムの Python バージョンを見つけ、Pygame をインストールして実行します。 ゲームの操作は簡単で、右上にゲームの一時停止/開始ボタンがあり、マウスでクリックすることで操作できます。 キーボードの A、D、W、S キーは、それぞれ左、右、上、下に対応し、航空機の移動方向を制御するために使用されます。 したがって、AI プログラムは 2 つのコア機能を完了する必要があります。1 つはジェスチャーを認識することであり、2 つ目はジェスチャーをマウスとキーボードの操作に変換してゲームを制御することです。 2. ジェスチャを認識するここでは、opencv を使用してカメラからビデオ ストリームを読み取ります。 ビデオ ストリームの各フレームをメディアパイプの手のひら検出モデルに送信して、手のひらの 21 のキー ポイントを識別します。 私たちのプロジェクトでは、左右の 8 番目と 12 番目のポイントである人差し指と中指のみを使用します。 コア コードは次のとおりです。ret, frame = cap.read() results = hands.process(frame[:, :, ::-1]) if results.multi_hand_landmarks: # 遍历每个手掌 for hand_landmarks in results.multi_hand_landmarks: finger_axis_8 = hand_landmarks.landmark[8] finger_axis_12 = hand_landmarks.landmark[12]
# 定义鼠标对象 self.mouse = PyMouse() def pause_or_start_game(self, dist): """ 判断是否需要暂停(开始)游戏 :param dist: :return: """ if (not self.is_pause and dist > 80) or (self.is_pause and dist < 80): self.mouse.move(915, 125) self.mouse.click(915, 125) self.is_pause = not self.is_pause
self.key_board = PyKeyboard() # 按下按键 self.key_board.press_key(key) # 停留一段时间 time.sleep(press_dwell) # 释放按键 self.key_board.release_key(key)
for i in range(n): kb.press_key('A') time.sleep(0.05) kb.release_key('A')
def press_key_board(self, direction, move_dist): """ 将手指移动距离,换算为按键间隔,并执行按键操作 :param direction:移动方向 :param move_dist:移动距离 :return: """ dist_per_sec = 685.7142857 if direction == 'x': key = 'A' if move_dist < 0 else 'D' elif direction == 'y': key = 'W' if move_dist < 0 else 'S' else: return press_dwell = math.fabs(move_dist / dist_per_sec) self.key_board.press_key(key) time.sleep(press_dwell) self.key_board.release_key(key)
以上がAI 仮想ジェスチャーで飛行機戦闘をプレイの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。