Domanda

Sto facendo un gioco pong per la mia classe di sviluppo del software, e probabilmente dovrei affermare che questo è il compito, da qui la mia comprensione limitata. E sto avendo dei problemi a creare l'AI per la mia pagaia NPC. Sto usando Kivy e Python.

Attualmente posso creare impossibile da battere AI facendo questo:

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

Dove self.player2.center_y è la coordinata Y per NPC (si muove solo sull'asse Y) e self.ball.y è la coordinata Y per la palla. Ho seguito il tutorial sul sito di Kivy per creare la base del gioco.

Ora non ho idea di come posso creare AI che verrà battuto. So che avrò bisogno di limitare la velocità dell'AI, quindi quando la palla diventa così veloce, non sarà in grado di afferrarlo. La cosa è, però, che non ho effettivamente una funzione di velocità.

Il problema con il tutorial che ho seguito è che non spiega Tutto . Credo di poter fare una funzione di velocità dicendo "Every x seconds, the paddle will move x pixels in the y axis."

Ecco come viene servita la palla secondo il tutorial Kivy:

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

Va bene, ora proverò a capire questo ... vel=(10,0)): Mezzi probabile, sposta 10 pixel x e 0 pixel y, assegnarlo a ball.velocity, ed evidentemente che controlla la velocità ...

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) Per quanto riguarda questo, è sicuro presumere che ... questa è la velocità con cui la palla si muove? I.e 10 pixel x e 0 y, ogni 1/300 secondi? Se lo cambio in qualcosa come 1/20, si muove molto più lentamente ... quindi suppongo così.

Ora ho bisogno di creare una funzione per contenere l'Ai ... forse

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

self.player1. si riferisce alla mia paletta.

E sì .. Ora sono bloccato. Non ho idea di come posso usare questa velocità per controllare la paletta. Qualcuno ha qualche idea? E dal momento che la mia domanda è molto probabilmente estremamente ambigua, fornirò la fonte del gioco in caso di avere bisogno di una migliore comprensione. Grazie.

http://pastebin.com/8wtlbh21

P.S. Mi rendo conto che questa è una grande domanda e molto da chiedere, ma spero che qualcuno possa rispondere. Grazie.

È stato utile?

Soluzione

Poiché questa è una domanda così grande, non ho testato questo o altro, ma sembra che tu voglia avere una sorta di funzione che muove l'AI (lo chiamerò self.player2.move ()).Se chiami questa funzione in Game.Update (), allora dovresti essere in grado di spostare la pagaia AI più vicina a dove deve essere di colpire la palla.

Alcune pseudocodi di base per self.player2.move ():

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

Potrebbe essere necessario regolare più la velocità AI per rendere questo lavoro, ma penso che dovrebbe essere la giusta idea generale.Se ci pensi, l'AI imbattibile è fondamentalmente infinitamente veloce.

Questo aiuta a farti scollare?

Altri suggerimenti

Grazie a Seareatternerd sono riuscito a scrivere qualcosa che fa un Ai Beatable.

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
.

Ottengo la posizione delle palle Y, e se è inferiore al centro della pagaia della NPC, spostarò semplicemente il NPC down di 3Y ogni volta fino a quando non è lo stesso o superiore. La stessa cosa con se è più del centro della pagaia della NPC, lo aumendo solo.

Questo quindi definisce la velocità della pagaia (3 y posizioni per 1/300 di secondo) e mi consentirà di aumentare la difficoltà per le modalità più difficili.

Grazie!

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top