Étape 28 : Paddle AI Demo - mise en oeuvre de AI
Maintenant pour la partie intéressante : l’algorithme de l’AI. L’approche évidente d’avoir le point médian de la pagaie à toujours suivre le ballon offre un adversaire extrêmement brutal et peu de chance pour le joueur à marquer. Un algorithme plus indulgent suit la balle si c’est dans l’état correct et passé une certaine partie de l’écran. La pagaie contrôlés par l’IA étant sur le côté droit de l’écran, la balle doit être dans un état de droit se déplaçant pour une collision se produise. En choisissant un emplacement x pour démarrer le contrôle de l’IA, le plus proche le choix est à 0, le plus difficile de l’IA, comme l’IA aura plus de temps pour rattraper son retard à la coordonnée y actuelles de la balle. À l’aide d’un tiers de l’écran comme une zone morte fournit un adversaire difficile.Ainsi, si la balle est dans un état de droit se déplaçant et passé le milieu de l’écran, l’IA doit tenter de correspondre le point médian de la raquette par rapport au milieu de la boule afin de maximiser la possibilité d’une collision. Par conséquent, si le ballon est actuellement supérieur au point médian de la raquette, la pagaie devrait se déplacer vers le haut, ou décrémenter la coordonnée y de l’emplacement. De même, si le ballon est actuellement en dessous du point médian de la raquette, la pagaie devrait déplacer vers le bas, ou incrémenter la coordonnée y de l’emplacement.
Une dernière considération : paddle l’AI ne doit pas rouler hors de l’écran. Cela peut se produire si la palette est lié de tangente à la partie supérieure de l’écran et la balle se déplace encore vers le haut. Un autre cas existe symétriquement si la balle se déplace vers le bas. La solution la plus simple consiste à vérifier l’emplacement de la raquette avant de passer la pagaie dans la direction respective. Une préoccupation similaire se pose pour l’entrée de joueur dans la phase suivante. L’algorithme complet d’Ia ressemblera à :
if (state_x == BALL_RIGHT && ball_x >= SCREEN_WIDTH/3) if (ball_y+BALL/2 > p2_y+PADDLE_HEIGHT/2) { if (p2_y < SCREEN_HEIGHT-PADDLE_HEIGHT) p2_y++; } else if (p2_y > 0) p2_y--;