Erstellen einer KI für ein Pong-Spiel + grundlegendes Verständnis des Geschwindigkeitsalgorithmus

StackOverflow https://stackoverflow.com//questions/11706756

  •  13-12-2019
  •  | 
  •  

Frage

Ich mache ein Pong-Spiel für meinen Softwareentwicklungskurs, und ich sollte wahrscheinlich sagen, dass dies eine Hausaufgabe ist, daher mein begrenztes Verständnis.und ich habe einige Probleme beim Erstellen der KI für mein NPC-Paddel.Ich verwende Kivy und Python.

Derzeit kann ich erstellen unmöglich zu schlagen KI, indem Sie Folgendes tun:

#ai
self.player2.center_y = self.ball.y 

Wo self.player2.center_y ist die y-Koordinate für den NPC (er bewegt sich nur auf der y-Achse) und self.ball.y ist die y-Koordinate für den Ball.Ich habe das Tutorial auf der Kivy-Website befolgt, um die Grundlage für das Spiel zu erstellen.

Jetzt habe ich keine Ahnung, wie ich eine KI erstellen kann, die schlagbar ist.Ich weiß, dass ich die Geschwindigkeit der KI begrenzen muss, damit der Ball nicht greifen kann, wenn er so schnell wird.Allerdings habe ich eigentlich keine Geschwindigkeitsfunktion.

Das Problem mit dem Tutorial, dem ich gefolgt bin, ist, dass es nicht erklärt alles.Ich glaube, ich könnte eine Geschwindigkeitsfunktion erstellen, indem ich sage"Every x seconds, the paddle will move x pixels in the y axis."

So wird der Ball gemäß der Kivy-Anleitung serviert:

def serve_ball(self, vel=(10,0)):
    self.ball.center = self.center
    self.ball.velocity = vel

Okay, jetzt werde ich versuchen, das zu verstehen ... vel=(10,0)): bedeutet wahrscheinlich, 10 Pixel X und 0 Pixel Y verschieben und das zuweisen ball.velocity, und offensichtlich steuert das die Geschwindigkeit ...

class PongApp(App):
    def build(self):
        game = PongGame()
        game.serve_ball()
        Clock.schedule_interval(game.update, 1.0/300.0)
        return game

Clock.schedule_interval(game.update, 1.0/300.0) Kann man diesbezüglich mit Sicherheit davon ausgehen, dass ...Mit welcher Geschwindigkeit bewegt sich der Ball?d.h.10 Pixel x und 0 y, alle 1/300 Sekunden?Wenn ich es auf etwa 1/20 ändere, bewegt es sich viel langsamer ...also würde ich es annehmen.

Jetzt muss ich eine Funktion erstellen, um die KI zu halten ...vielleicht

def AI(self):
    self.AI_Speed = self.ball.velocity - 10

self.player1. bezieht sich auf mein Paddel.

Und ja...Jetzt stecke ich fest.Ich habe keine Ahnung, wie ich diese Geschwindigkeit nutzen kann, um die Bewegung des Paddels zu steuern.Hat jemand irgendwelche Ideen?Und da meine Frage höchstwahrscheinlich äußerst zweideutig ist, werde ich die Quelle des Spiels angeben, falls Sie ein besseres Verständnis benötigen.Danke schön.

http://pastebin.com/8wTLbH21

p.s.Mir ist klar, dass dies eine große Frage ist und es viel zu fragen gibt, aber ich hoffe, dass jemand eine Antwort geben kann.Danke.

War es hilfreich?

Lösung

Da dies eine so große Frage ist, habe ich sie noch nicht getestet oder so, aber es sieht so aus, als ob Sie eine Art Funktion haben möchten, die die KI bewegt (ich nenne sie self.player2.move()).Wenn Sie diese Funktion in game.update() aufrufen, sollten Sie in der Lage sein, das KI-Paddel schrittweise näher an die Stelle zu bewegen, an der es den Ball treffen muss.

Einige grundlegende Pseudocodes für self.player2.move():

figure out if ball is above or below paddle
move self.AI_Speed units in the direction of the ball

Möglicherweise müssen Sie die KI-Geschwindigkeit stärker anpassen, damit dies funktioniert, aber ich denke, es sollte die richtige Grundidee sein.Wenn man darüber nachdenkt, ist die unschlagbare KI im Grunde einfach unendlich schnell.

Hilft Ihnen das, sich zu lösen?

Andere Tipps

Dank seaseaotternerd ist es mir gelungen, etwas zu schreiben, das eine schlagbare KI macht.

if self.ball.y < self.player2.center_y:
    self.player2.center_y = self.player2.center_y - 3
if self.ball.y > self.player2.center_y:
    self.player2.center_y = self.player2.center_y + 3

Ich erhalte die y-Position der Bälle, und wenn sie kleiner als die Mitte des Paddels des NPCs ist, bewege ich den NPC einfach jedes Mal um 3y nach unten, bis sie entweder gleich oder größer ist.Das Gleiche gilt, wenn es mehr als die Mitte des Paddels des NPCs ist, erhöhe ich es einfach.

Dies definiert dann die Geschwindigkeit des Paddels (3 Y-Positionen pro 1/300 Sekunde) und ermöglicht es mir, den Schwierigkeitsgrad für schwierigere Modi zu erhöhen.

Danke!

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top