Ma première map 2D

map

Les évènements sont gérés, mais il y a des bugs

Vous voyez surement de quoi nous voulons parler, il doit être possible de dépasser les bordures de l'écran avec votre petit carré blanc. Alors nous allons voir maintenance comment faire pour éviter cela, et surtout pour gérer des murs présents sur uen map et la rencontre entre votre petite surface et ces murs.

Une map 2D, ça ressemble à quoi ?

Maintenant que vous savez gérer les évènements grâce à la SDL, nous allons passer le cran suivant, qui est la création de la carte utilisée par le moteur 3D, afin de déplacer le joueur dans l'écran.
Nous allons créer la Map2D grâce à un tableau 2D. Le tableau suivant sera pris comme référence pour notre code : Taille max du tableau :

const int MAXTAB=20;

Déclaration du tableau :

int Map2D[MAXTAB][MAXTAB]= {
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,1},
{1,1,1,1,0,1,1,1,1,1,1,1,0,1,1,0,1,0,0,1},
{1,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,1},
{1,1,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,0,0,1},
{1,1,1,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1},
{1,1,1,0,1,1,1,1,1,1,1,1,0,1,1,1,1,1,0,1},
{1,0,0,0,0,0,0,1,1,0,0,1,0,1,0,0,0,0,0,1},
{1,0,1,0,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,1},
{1,0,1,0,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,1},
{1,0,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1},
{1,0,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1},
{1,0,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1},
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
};

Le plus important est de comprendre que dans le tableau, le "0" sera l'espace où le joueur pourra se déplacer, et le "1" sera un mur. Donc Map2D n'est (pour le moment) qu'un tableau d'entiers de 0 et de 1

Variables et constantes utiles

Pour plus de simplicité, et pour un affichage assez simple de la carte à l'écran, il faut définir la taille d'une case du tableau en pixels. Nous découperons donc la surface en carrés de 25 pixels de longueur et de largeur. Si vous comprenez cette partie de ce chapitre, vous n'aurez pas de mal à comprendre la suite.

const int COTECARRE=25;

Puis vous créez une surface de la taille de case choisie qu'on appellera "mur", et qu'on affichera lorsque la case du tableau d'entiers vaudra 1 :

SDL_Surface *mur=SDL_CreateRGBSurface(SDL_HWSURFACE, COTECARRE, COTECARRE, 32, 0, 0, 0, 0);

Il va aussi falloir créer une nouvelle variable SDL_Rect, nécessaire du fait que l'on affiche le mur ou pas. Par la suite, cette variable prendra des valeurs qui permettrons de traverser l'écran et d'afficher ou non un mur (vous comprendrez un peu plus tard).

SDL_Rect map;
map.x=0;
map.y=0;

Pour une question d'esthétique, nous avons aussi changé les couleurs de l'écran et du joueur. N'oubliez pas d'initialiser la couleur du mur, différente de celle de l'écran si vous souhaitez que celui-ci soit visible à l'écran (enfin si vous voulez faire un labyrinthe à l'aveugle vous avez le droit).

SDL_FillRect(mur, NULL, SDL_MapRGB(ecran->format, 0x10, 0x5D, 0xE3));

Du tableau 2D d'entiers à l'affichage

Pour l'affichage, nous utiliserons une double boucle for comme pour un tableau 2D normal

Comment ne pas traverser les murs ?

Créer un site gratuit avec e-monsite - Signaler un contenu illicite sur ce site

×