Question

Je crée un jeu de pong pour mon cours de développement logiciel, et je devrais probablement dire que ce sont des devoirs, d'où ma compréhension limitée.et j'ai quelques problèmes pour créer l'IA de ma pagaie PNJ.J'utilise Kivy et Python.

Actuellement, je peux créer impossible à battre IA en faisant ceci :

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

self.player2.center_y est la coordonnée y du PNJ (il se déplace uniquement sur l'axe y) et self.ball.y est la coordonnée y de la balle.J'ai suivi le tutoriel du site Kivy pour créer les bases du jeu.

Maintenant, je n’ai aucune idée de la façon dont je peux créer une IA qui sera battable.Je sais que je devrai limiter la vitesse de l'IA, ainsi, lorsque le ballon deviendra si rapide, il ne pourra pas l'attraper.Le problème, c'est que je n'ai pas réellement de fonction de vitesse.

Le problème avec le tuto que j'ai suivi c'est qu'il n'explique pas tout.Je crois que je pourrais créer une fonction de vitesse en disant"Every x seconds, the paddle will move x pixels in the y axis."

Voici comment la balle est servie selon le tutoriel Kivy :

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

Très bien, maintenant je vais essayer de comprendre ça... vel=(10,0)): signifie probablement, déplacez 10 pixels X et 0 pixel Y, attribuez-le à ball.velocity, et évidemment cela contrôle la vitesse...

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) à ce sujet, est-il prudent de supposer que...quelle est la vitesse à laquelle la balle se déplace ?c'est à dire.10 pixels x et 0 y, tous les 1/300 secondes ?Si je le change en quelque chose comme 1/20, ça bouge beaucoup plus lentement...donc je suppose que oui.

Maintenant, je dois créer une fonction pour contenir l'IA...peut-être

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

self.player1. fait référence à ma pagaie.

Et ouais..Maintenant, je suis coincé.Je n'ai aucune idée de comment utiliser cette vitesse pour contrôler le déplacement de la pagaie.Quelqu'un a des idées ?Et comme ma question est probablement extrêmement ambiguë, je vous fournirai la source du jeu au cas où vous auriez besoin d'une meilleure compréhension.Merci.

http://pastebin.com/8wTLbH21

p.s.je me rends compte que c'est une grande question et beaucoup à poser, mais j'espère que quelqu'un pourra répondre.Merci.

Était-ce utile?

La solution

Comme c'est une très grande question, je n'ai pas testé cela ou quoi que ce soit, mais il semble que vous souhaitiez avoir une sorte de fonction qui déplace l'IA (je l'appellerai self.player2.move()).Si vous appelez cette fonction dans game.update(), vous devriez alors pouvoir rapprocher progressivement la palette AI de l'endroit où elle doit être pour frapper la balle.

Quelques pseudocodes de base pour self.player2.move() :

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

Vous devrez peut-être ajuster davantage la vitesse de l'IA pour que cela fonctionne, mais je pense que cela devrait être la bonne idée générale.Si vous y réfléchissez bien, l’IA imbattable est fondamentalement infiniment rapide.

Est-ce que cela vous aide à vous décoller ?

Autres conseils

Grâce à seaseaotnerrd, j'ai réussi à écrire quelque chose qui rend une IA battable.

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

J'obtiens la position y des balles, et si elle est inférieure au centre de la pagaie du PNJ, je déplacerai simplement le PNJ vers le bas de 3 ans à chaque fois jusqu'à ce qu'elle soit identique ou supérieure.Même chose si c'est plus que le centre de la pagaie du PNJ, je l'augmente simplement.

Cela définit alors la vitesse de la pagaie (3 y positions par 1/300 de seconde) et me permettra d'augmenter la difficulté pour les modes plus difficiles.

Merci!

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top