Virtuelle KI-Gesten zum Spielen von Flugzeugkämpfen
Hallo zusammen.
Lassen Sie uns dieses kleine Projekt aufschlüsseln und Sie Schritt für Schritt bei der Umsetzung begleiten. Am Ende des Artikels erhalten wir den vollständigen Quellcode des Projekts.
1. Bereiten Sie das Flugzeugkriegsprogramm vor
Suchen Sie eine Python-Version des Flugzeugkriegsprogramms auf Github, installieren Sie Pygame und führen Sie es aus.
Die Spielbedienung ist einfach. In der oberen rechten Ecke befindet sich die Spielpause/Start-Taste, die durch Klicken mit der Maus bedient werden kann.
Mit den Tasten A, D, W und S auf der Tastatur steuern Sie die Bewegungsrichtung des Flugzeugs, entsprechend links, rechts, oben und unten.
Unser KI-Programm muss also zwei Kernfunktionen erfüllen: Erstens: Gesten erkennen; zweitens: Gesten in Maus- und Tastaturoperationen umwandeln, um das Spiel zu steuern.
2. Gesten erkennen
Hier verwenden wir opencv, um den Videostream von der Kamera zu lesen.
Senden Sie jeden Frame im Videostream an das Handflächenerkennungsmodell in Mediapipe, um 21 Schlüsselpunkte der Handfläche zu identifizieren.
In unserem Projekt werden nur der Zeigefinger und der Mittelfinger verwendet, das sind der 8. und 12. Punkt links und rechts.
Der Kerncode lautet wie folgt:
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]
Frame ist jedes Bild im Videostream und Hände ist das Handflächenerkennungsmodell.
Die analysierten Objekte finger_axis_8 und finger_axis_12 speichern die x- und y-Koordinaten des Zeigefingers bzw. des Mittelfingers.
3. Gestensteuerung zum Anhalten des Spiels
Berechnen Sie den Abstand zwischen den Koordinaten des Zeigefingers und des Mittelfingers. Wenn er größer als ein bestimmter Schwellenwert ist, bewegen Sie die Maus und klicken Sie auf die Schaltfläche „Spiel anhalten“.
Das Spiel ist pausiert
Wenn der Abstand zwischen den Koordinaten des Zeigefingers und des Mittelfingers einen bestimmten Schwellenwert unterschreitet, bewegen Sie die Maus und klicken Sie auf die Schaltfläche „Spiel starten“
Das Spiel beginnt
Die Entfernungsberechnung ist sehr einfach, hier wird kein Code gepostet. Konzentrieren wir uns nun auf die Steuerung der Maus durch Python.
Ich verwende die PyUserInput-Bibliothek, die zwei Klassen, PyMouse und PyKeyboard, zur Steuerung der Maus bzw. der Tastatur bereitstellt.
Wenn wir ein Python-Programm verwenden möchten, um die Pause und den Start des Spiels zu steuern, müssen wir nur die Maus über die Schaltfläche bewegen und einen Klickvorgang ausführen.
# 定义鼠标对象 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
Der Parameter dist der Funktion pause_or_start_game ist der Abstand zwischen Zeigefinger und Mittelfinger.
Die Koordinaten der Pause/Start-Taste sind (915, 125). Die Koordinaten jedes Computers sind unterschiedlich. Sie müssen entsprechend Ihrer tatsächlichen Situation neu berechnen.
Die Berechnungsidee ist sehr einfach. Das Spiel wird in der Mitte des Bildschirms gestartet grob geschätzt. Nachdem Sie die Verschiebungsfunktion von PyMouse aufgerufen haben, überprüfen Sie sie und optimieren Sie sie. Die Bewegungsfunktion von
PyMouse wird zum Verschieben der Mausposition verwendet, und die Klickfunktion wird zum Ausführen von Mausklickvorgängen verwendet.
4. Gestensteuerung der Flugzeugbewegung
Hier müssen Sie die Bewegungsrichtung und den Abstand der x- und y-Koordinaten des Zeigefingers in zwei benachbarten Frames berechnen. Dadurch wird bestimmt, welche der Tastaturen A, D, W und S gedrückt wird.
Ebenso sind die Richtung und Entfernung der Bewegung sehr einfach und werden hier nicht besprochen. Der Schwerpunkt liegt auf dem PyKeyboard-Modul, das die Tastaturtasten steuert.
self.key_board = PyKeyboard() # 按下按键 self.key_board.press_key(key) # 停留一段时间 time.sleep(press_dwell) # 释放按键 self.key_board.release_key(key)
Zwischen den Funktionen press_key und release_key wird time.sleep(press_dwell) aufgerufen, um die Dauer der Taste zu steuern. Wenn die Taste lange gedrückt wird, ist die Distanz, die das Flugzeug zurücklegt, lang Wird die Taste kurz gedrückt, ist die Distanz, die das Flugzeug zurücklegt, kurz.
Die Schwierigkeit besteht hier also darin, die Bewegungsdistanz des Zeigefingers auf die Dauer des Tastendrucks abzubilden.
Ich habe den folgenden Code verwendet, um es zu messen
for i in range(n): kb.press_key('A') time.sleep(0.05) kb.release_key('A')
Die feste Tastendauer beträgt 0,05 Sekunden, und das Testflugzeug bewegt sich von der Mitte nach ganz links, was das kleinste n erfordert.
Das Flugzeug bewegt sich von der Mitte nach ganz links und die Bewegungsdistanz beträgt 240. Daher ist 240 / (n * 0,05) die Bewegungsdistanz des Flugzeugs pro Sekunde.
Ich habe n=7 gemessen, daher beträgt die Distanz, die das Flugzeug pro Sekunde zurücklegt, 685,7142857.
Berechnen Sie einfach die Bewegungsdistanz des Zeigefingers und teilen Sie sie durch 685,7142857, um die Tastendauer der Tastatur zu erhalten.
Der vollständige Code für die Gestensteuerung von Flugzeugbewegungen lautet:
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)
Der Kernteil des Projekts wurde erklärt und der vollständige Code wurde aussortiert. Wenn Sie ihn benötigen, hinterlassen Sie einfach eine Nachricht im Kommentarbereich.
Nachdem Sie den Code erhalten haben, schauen Sie sich zunächst die laufende Datei „steps.txt“ an.
Wenn Sie glauben, dass dieser Artikel für Sie nützlich ist, klicken Sie bitte auf „Lesen“, um mich zu ermutigen, auch in Zukunft hervorragende Python+KI-Projekte zu teilen.
Das obige ist der detaillierte Inhalt vonVirtuelle KI-Gesten zum Spielen von Flugzeugkämpfen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



Verarbeiten Sie 7 Millionen Aufzeichnungen effizient und erstellen Sie interaktive Karten mit Geospatial -Technologie. In diesem Artikel wird untersucht, wie über 7 Millionen Datensätze mithilfe von Laravel und MySQL effizient verarbeitet und in interaktive Kartenvisualisierungen umgewandelt werden können. Erstes Herausforderungsprojektanforderungen: Mit 7 Millionen Datensätzen in der MySQL -Datenbank wertvolle Erkenntnisse extrahieren. Viele Menschen erwägen zunächst Programmiersprachen, aber ignorieren die Datenbank selbst: Kann sie den Anforderungen erfüllen? Ist Datenmigration oder strukturelle Anpassung erforderlich? Kann MySQL einer so großen Datenbelastung standhalten? Voranalyse: Schlüsselfilter und Eigenschaften müssen identifiziert werden. Nach der Analyse wurde festgestellt, dass nur wenige Attribute mit der Lösung zusammenhängen. Wir haben die Machbarkeit des Filters überprüft und einige Einschränkungen festgelegt, um die Suche zu optimieren. Kartensuche basierend auf der Stadt

Es gibt viele Gründe, warum MySQL Startup fehlschlägt und durch Überprüfung des Fehlerprotokolls diagnostiziert werden kann. Zu den allgemeinen Ursachen gehören Portkonflikte (prüfen Portbelegung und Änderung der Konfiguration), Berechtigungsprobleme (Überprüfen Sie den Dienst Ausführen von Benutzerberechtigungen), Konfigurationsdateifehler (Überprüfung der Parametereinstellungen), Datenverzeichniskorruption (Wiederherstellung von Daten oder Wiederaufbautabellenraum), InnoDB-Tabellenraumprobleme (prüfen IBDATA1-Dateien), Plug-in-Ladeversagen (Überprüfen Sie Fehlerprotokolle). Wenn Sie Probleme lösen, sollten Sie sie anhand des Fehlerprotokolls analysieren, die Hauptursache des Problems finden und die Gewohnheit entwickeln, Daten regelmäßig zu unterstützen, um Probleme zu verhindern und zu lösen.

Der Artikel führt den Betrieb der MySQL -Datenbank vor. Zunächst müssen Sie einen MySQL -Client wie MySQLworkBench oder Befehlszeilen -Client installieren. 1. Verwenden Sie den Befehl mySQL-uroot-P, um eine Verbindung zum Server herzustellen und sich mit dem Stammkonto-Passwort anzumelden. 2. Verwenden Sie die Erstellung von Createdatabase, um eine Datenbank zu erstellen, und verwenden Sie eine Datenbank aus. 3.. Verwenden Sie CreateTable, um eine Tabelle zu erstellen, Felder und Datentypen zu definieren. 4. Verwenden Sie InsertInto, um Daten einzulegen, Daten abzufragen, Daten nach Aktualisierung zu aktualisieren und Daten nach Löschen zu löschen. Nur indem Sie diese Schritte beherrschen, lernen, mit gemeinsamen Problemen umzugehen und die Datenbankleistung zu optimieren, können Sie MySQL effizient verwenden.

Detaillierte Erläuterung von Datenbanksäureattributen Säureattribute sind eine Reihe von Regeln, um die Zuverlässigkeit und Konsistenz von Datenbanktransaktionen sicherzustellen. Sie definieren, wie Datenbanksysteme Transaktionen umgehen, und sorgen dafür, dass die Datenintegrität und -genauigkeit auch im Falle von Systemabstürzen, Leistungsunterbrechungen oder mehreren Benutzern gleichzeitiger Zugriff. Säureattributübersicht Atomizität: Eine Transaktion wird als unteilbare Einheit angesehen. Jeder Teil schlägt fehl, die gesamte Transaktion wird zurückgerollt und die Datenbank behält keine Änderungen bei. Wenn beispielsweise eine Banküberweisung von einem Konto abgezogen wird, jedoch nicht auf ein anderes erhöht wird, wird der gesamte Betrieb widerrufen. begintransaktion; updateAccountsSetBalance = Balance-100WH

Die Hauptgründe für den Fehler bei MySQL -Installationsfehlern sind: 1. Erlaubnisprobleme, Sie müssen als Administrator ausgeführt oder den Sudo -Befehl verwenden. 2. Die Abhängigkeiten fehlen, und Sie müssen relevante Entwicklungspakete installieren. 3. Portkonflikte müssen Sie das Programm schließen, das Port 3306 einnimmt, oder die Konfigurationsdatei ändern. 4. Das Installationspaket ist beschädigt. Sie müssen die Integrität herunterladen und überprüfen. 5. Die Umgebungsvariable ist falsch konfiguriert und die Umgebungsvariablen müssen korrekt entsprechend dem Betriebssystem konfiguriert werden. Lösen Sie diese Probleme und überprüfen Sie jeden Schritt sorgfältig, um MySQL erfolgreich zu installieren.

Remote Senior Backend Engineer Job Vacant Company: Circle Standort: Remote-Büro-Jobtyp: Vollzeitgehalt: 130.000 bis 140.000 US-Dollar Stellenbeschreibung Nehmen Sie an der Forschung und Entwicklung von Mobilfunkanwendungen und öffentlichen API-bezogenen Funktionen, die den gesamten Lebenszyklus der Softwareentwicklung abdecken. Die Hauptaufgaben erledigen die Entwicklungsarbeit unabhängig von RubyonRails und arbeiten mit dem Front-End-Team von React/Redux/Relay zusammen. Erstellen Sie die Kernfunktionalität und -verbesserungen für Webanwendungen und arbeiten Sie eng mit Designer und Führung während des gesamten funktionalen Designprozesses zusammen. Fördern Sie positive Entwicklungsprozesse und priorisieren Sie die Iterationsgeschwindigkeit. Erfordert mehr als 6 Jahre komplexes Backend für Webanwendungen

MySQL kann JSON -Daten zurückgeben. Die JSON_EXTRACT -Funktion extrahiert Feldwerte. Über komplexe Abfragen sollten Sie die Where -Klausel verwenden, um JSON -Daten zu filtern, aber auf die Leistungsauswirkungen achten. Die Unterstützung von MySQL für JSON nimmt ständig zu, und es wird empfohlen, auf die neuesten Versionen und Funktionen zu achten.

Laraveleloquent-Modellab Abruf: Das Erhalten von Datenbankdaten Eloquentorm bietet eine prägnante und leicht verständliche Möglichkeit, die Datenbank zu bedienen. In diesem Artikel werden verschiedene eloquente Modellsuchtechniken im Detail eingeführt, um Daten aus der Datenbank effizient zu erhalten. 1. Holen Sie sich alle Aufzeichnungen. Verwenden Sie die Methode All (), um alle Datensätze in der Datenbanktabelle zu erhalten: UseApp \ Models \ post; $ posts = post :: all (); Dies wird eine Sammlung zurückgeben. Sie können mit der Foreach-Schleife oder anderen Sammelmethoden auf Daten zugreifen: foreach ($ postas $ post) {echo $ post->
