connect
 

Description:
Thématiques:

dingoo
dev
c
A320
pong
A3é0
AI
autre

Abonnement aux flux
Flux rss
blog de captainsid

11 sep
2009

IA - Essai #1

Voila, j'ai commencer a bosser sur l'implémentation d'une IA, j'ai jamais fait ca avant, donc j'ai pris mon bloc note, et je me suis mis a réfléchir sur comment devrait agir un ordi (fort) a Pong, voila ce que ca donne :

1. Si la balle vien vers nous, on calcule sa position finale
    Pour balleX <= largeurEcran - largeurPad
        balleX += balleVecteurX
        balleY += balleVecteurY
       
        Si la balle touche un des bords haut ou bas
            balleVecteurY = -balleVecteurY
    finPour
2.Si la position finale est devant le pad
    On ne fait rien
3.Si la position finale est au dessus du pad
    On bouge vers le haut
4.Si la position finale est en dessous du pad
    On bouge vers le bas
   
Puis on fait les divers tests de collision.

J'ai implémenté ca de cette facon:
(cpp):
void computerMove(player* p, ball* b)
{
if(p == NULL || b == NULL) return;
 
int32_t bx = b->x;    //Ball X
int32_t by = b->y;  //Ball Y
int32_t bvx = b->vx; //Ball vector X
int32_t bvy = b->vy;  //Ball vector Y
 
if(bvx > 0) //Ball is coming.
{
for(;bx <= gameDisplay->width - 21;) // Calculate ball trajectory
{
bx += bvx;
by += bvy;
 
if(by >= gameDisplay->height || by <= 0) //if ball 'hits' top / bottom, assume it goes other way.
bvy = -bvy;
}

if(by >= p->y || by + b->s <= p->y + p->h) //if ball is in front of pad dont move
{
}
 
if(by <= p->y)
{
p->y -= p->vy;
}
 
if(by + b->s >= p->y + p->h)
{
p->y += p->vy;
}
}

if(p->y < 0) p->y = 0;
 
if((p->y + p->h) > gameDisplay->height) p->y = (gameDisplay->height - p->h);
       //AABB Box
p->box.point[0][0] = p->x;
p->box.point[0][1] = p->y;
p->box.point[1][0] = p->x + p->w;
p->box.point[1][1] = p->y + p->h;
}
Bon après l'ordi est imbattable :)  Si vous avez des commentaires sur ma facon de faire ou sur comment optimiser le code, ca m'interesse, j'ai jamais optimiser mon code donc.. :D

Commentaires

Minishlink site:
Si tu veux tu peux regarder et prendre du code de mon homebrew PongClassicDS, j'avais fait plusieurs IA : Facile, Normale, Difficile, Invincible.

C'est disponible ici :
http://louislagrange.free.fr/downloads/PongClassicDS.rar

(et tu peux supprimer le commentaire pourri d'au-dessus stu veux)

En espérant t'avoir aidé ! :)

Bonne chance pour la suite.
CaptainSid :
Ok merci, je vais jeter un oeil ^^

Retour à l'index
lache tes com dev fr scrutator irc bot
created by Jerome Wax based on LT version 0.3.2 - dev-fr.org 0.4 install