Un pong avec GameCode ?

  • Pong avec GameCode

 

Et oui, Arquem_l l'a fait ! C'est l'occasion de partager ses astuces pour coder des comportements en Javascript.
 

 

Pour y jouer, c'est par ici !

 

Au bout d’un certain temps passé à aligner des blocs sur GameCode je me suis demandé si il était possible de créer autre chose qu’un jeu de plateforme horizontal.
En bidouillant un peu je me suis rendu compte qu’on pouvait rapidement obtenir toutes sortes de comportements farfelus avec la téléportation de personnage.

J’ai commencé par lui donner le comportement d’une balle en le téléportant case par case.

var coefX = 1; // 1 ou -1 selon le sens de la balle

var coefY = 1; // 1 ou -1 selon le sens de la balle


toujours(fonction()

{

    var x = personnage.x;

    var y = personnage.y;


        if (personnage.x >= 9 || personnage.x <= 0)

           coefX = -coefX;

    if (personnage.y >= 8 || personnage.x <= 1)

          coefY = -coefY;

        //Ce code permet de tester si le personnage atteint les bords du terrain pour pouvoir le faire rebondir. On peut changer les limites à volonté.


        personnage.teleporte(x+CoefX, y+coefY);

        // Ici on téléporte le personnage aux nouvelles coordonnées, donc sa propre position PLUS les différents coefficients qui ont pour valeur 1 ou -1

})



Puis j’ai affiné les trajectoires en appliquant une vitesse, dont la valeur est inférieure à 1. Cela me permet aussi d’avoir une variable à manipuler pour augmenter ou réduire la vitesse de la balle et donc la difficulté.


var vit = 0.05; // au début, avant la boucle toujours


personnage.teleporte(x+(coefX*vit), y+(coefY*vit));


Et pour obtenir encore plus d’angles de trajectoire, on peut même créer une vitesse X et une vitesse Y qui seront différentes.
Notre balle est prête, il ne reste plus qu’à tester la condition entre elle et le joueur.
Mais encore une fois il faut bidouiller un peu car l’évènement “est touché” ne s’applique pas entre le joueur et le personnage.

On teste donc la distance.

var dist = distanceEntre(joueur, personnage);


if (dist <= 1 && rebond == faux)

{

    coefY = -coefY;

       vit = vit + 0.01;  // augmente la vitesse si le joueur touche la balle

       rebond = vrai; // maintenant que cette variable est VRAIE, le programme ne repassera plus par ce chemin même si le joueur continue de toucher la balle

}

else if (dist > 1)

{

       rebond = faux;

}



Astuce : j’ai déclaré une variable booléenne, qui a deux états, VRAI ou FAUX, au dessus de la boucle toujours. Cette variable me permet de bien tester que j’applique mes changements une seule fois lors du contact avec la balle et non tout au long de ce contact.
Donc, il est initialement à FAUX, passe à VRAI lors de la première détection du contact, je le repasse ensuite à FAUX lorsque mon joueur est suffisamment éloigné de la balle.

Ensuite, le concept se décline. On peut imaginer un chat et si le personnage (la balle) nous touche on a perdu. Ou bien encore, mettre un robot en haut de l’écran qui jouerait contre nous.