La creación de AI para el juego de Pong + conocimiento básico de la velocidad del algoritmo

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

  •  13-12-2019
  •  | 
  •  

Pregunta

Estoy haciendo un juego de pong para mi de desarrollo de software de clase, y probablemente debería indicar que esta es la tarea, de ahí mi limitada comprensión.y estoy teniendo algunos problemas para crear la AI para mi NPC de pádel.Estoy usando Kivy y Python.

Actualmente puedo crear imposible de vencer AI haciendo esto:

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

donde self.player2.center_y es la coordenada de la APN (sólo se mueve en el eje y) y self.ball.y es la coordenada de la pelota.He seguido el tutorial en el Kivy sitio para crear la base del juego.

Ahora no tengo ninguna idea acerca de cómo puedo crear AI que será derrotar.Sé que voy a necesitar para limitar la velocidad de la IA, así que cuando la pelota se pone tan rápido que no será capaz de apoderarse de ella.La cosa es, sin embargo, que yo en realidad no tienen una función de la velocidad.

El problema con el tutorial que he seguido es que no se explicar todo.Creo que yo podría hacer una función de la velocidad diciendo "Every x seconds, the paddle will move x pixels in the y axis."

Esta es la forma en que la pelota se sirve por la kivy tutorial:

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

Bien, ahora voy a tratar de entender esto... vel=(10,0)): probablemente significa, mover 10 píxeles X y 0 píxeles Y, asignar que a ball.velocity, y evidentemente que controla la velocidad...

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) con respecto a esto, Es seguro asumir que...que es la velocidad a la que la pelota se mueve?es decir,10 píxeles x y 0 y, cada 1/300 segundos?Si puedo cambiarlo a algo como 1/20, se mueve mucho más lento...así que yo así lo asumimos.

Ahora necesito crear una función para mantener el AI...tal vez

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

self.player1. se refiere a mi paleta.

Y sí..Ahora estoy atascado.No tengo idea de cómo puedo usar esta velocidad para controlar el movimiento de la paleta.Alguien tiene alguna idea?Y Desde entonces mi pregunta es, más probable es extremadamente ambiguo, voy a proporcionar el código fuente del juego en caso que usted necesite un mejor entendimiento.Gracias.

http://pastebin.com/8wTLbH21

p.s.me doy cuenta de que esta es una gran pregunta y pedir demasiado, pero espero que alguien pueda responder.Gracias.

¿Fue útil?

Solución

Ya que esta es una gran pregunta, yo no he probado esto o nada, pero parece que usted quiere tener algún tipo de función que se mueve la AI (la llamaré yo.player2.move()).Si se llama a esta función en el juego.update(), entonces usted debería ser capaz de mover la IA de pádel incrementalmente más cercano a donde se necesita para golpear la bola.

Básicos de pseudocódigo para el auto.player2.move():

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

Puede que necesite ajustar la IA velocidad más para hacer este trabajo, pero creo que debería ser el derecho de la idea general.Si usted piensa acerca de ello, la inmejorable AI es básicamente infinitamente rápido.

¿Que ayudarle a llegar a despegar?

Otros consejos

Gracias a seaseaotternerd he conseguido escribir algo que la hace comparable a la IA.

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

Puedo conseguir las bolas y posición, y si es menos que el centro de la NPC de paddle, voy simplemente mover el NPC por 3y cada vez hasta que sea la misma o mayor.Lo mismo con si es más que el centro de la NPC en la paleta, me acaba de aumentar.

Este, a continuación, define la velocidad de la pala (3 y posiciones por 1/300 de segundo) y me va a permitir aumentar la dificultad más difícil para los modos.

Gracias!

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top