Carnet de dev 3 : Le sous-marin c'est bon, mangez en.


Chose promise, chose due. J'ai implémenté le mouvement du joueur "sous-marin" ainsi que le tir de celui-ci. Pour ce faire, j'ai utiliser les structures de données suivantes :

     typedef struct
    {
    byte sprno;
    unsigned score;
     } s_player;

     s_player player[2];

Le joueur est pour le moment représenté par un Sprite, et possède un score. Le sprite lui mème est composé de coordonnées x,y, d'une couleur et d'une image (pattern).

J'alloue un sprite au joueur avec une routine de mon cru qui récupère dans une liste, le premier sprite non utilisé.

       player[0].sprno = getFreeSprite(); 


Puis j'initialise mon joueur 1 ainsi :

sprites[player[0].sprno].colour = 4;
sprites[player[0].sprno].x = 100;
sprites[player[0].sprno].y = 100;
sprites[player[0].sprno].pattern = 0;


Pour les tirs, la structure ressemble à ça :


     typedef struct
    {
     byte actif;
     byte sprno;
     } s_shoot;

L'attribut actif est initialisé à FALSE, ce qui veut dire qu'on peut tirer. On ne peut tirer qu'un seul missile à la fois. Ce qui nous donne ceci dans la routine principale :

while (1)
{

if ( (joypad_1 & FIRE1) || (joypad_1 & FIRE2) )
{
if (shoot.actif==S_FALSE)
{
sprites[shoot.sprno].x = sprites[player[0].sprno].x;
sprites[shoot.sprno].y = sprites[player[0].sprno].y;
shoot.actif = S_TRUE;
}
}

if (shoot.actif==S_TRUE)
{
sprites[shoot.sprno].y -= 3;
if (sprites[shoot.sprno].y<10) 
{
sprites[shoot.sprno].y = 203;
shoot.actif = S_FALSE;
}
}

delay(1);

}

Les commentaires du code (que je dois ajouter :) :) ) se trouvent dans cette vidéo :

Commentaires

  1. Bonjour,
    serait-il possible d'avoir accès au code de cette partie ou bien un complément d'information car j'ai pas mal de difficultés concernant la gestion des sprites.
    mon email :ophidia@gmx.fr
    Merci ^^

    RépondreSupprimer

Enregistrer un commentaire

Posts les plus consultés de ce blog

Expérimentation : Alim PC sur ColecoVision

PC to VGA

Tutorial : Xpadder 5.3 - Comment l'utiliser ?