Overblog
Editer l'article Suivre ce blog Administration + Créer mon blog
Le journal du sport

Toutes les news du sport en directe!!!

lien

#include <stdlib.h>
#include <stdio.h>
#include <SDL/SDL.h>


//library
//liste des fonctions prédéfinies
//main
int main(int argc, char *argv[])
{
//initialisation des surfaces: ecran,mur,chemmin
SDL_Surface *ecran = NULL, *Path = NULL, *Mur = NULL, *Perso=NULL, *TP = NULL;
SDL_Rect position;
SDL_Rect positionPerso;
SDL_Rect realpositionPerso;
SDL_Rect lastpositionPerso;


SDL_Init(SDL_INIT_VIDEO);
//initialisation ecran x,y
ecran = SDL_SetVideoMode(750, 500, 32, SDL_HWSURFACE);
// titre image
SDL_WM_SetCaption("Escape", NULL);
//Chargement de l'image
TP = SDL_LoadBMP("tp.bmp");
Path = SDL_LoadBMP("Path.bmp");
Mur = SDL_LoadBMP("Mur.bmp");
Perso = SDL_LoadBMP("logo.bmp");
//initialisation du tableau du lvl1 de 5x5 cases


int lvl1[10] [15];
//On remplit le tableau!
lvl1 [0][0] = 1;lvl1 [0][1] = 1;lvl1 [0][2] = 1;lvl1 [0][3] = 1;lvl1 [0][4] = 1;lvl1 [0][5] = 1;lvl1 [0][6] = 1;lvl1 [0][7] = 1;lvl1 [0][8] = 1;lvl1 [0][9] = 1;lvl1 [0][10] = 1;lvl1 [0][11] = 1;lvl1 [0][12] = 1;lvl1 [0][13] = 1;lvl1 [0][14] = 1;
lvl1 [1][0] = 2;lvl1 [1][1] = 1;lvl1 [1][2] = 1;lvl1 [1][3] = 1;lvl1 [1][4] = 1;lvl1 [1][5] = 2;lvl1 [1][6] = 2;lvl1 [1][7] = 2;lvl1 [1][8] = 2;lvl1 [1][9] = 1;lvl1 [1][10] = 1;lvl1 [1][11] = 1;lvl1 [1][12] = 1;lvl1 [1][13] = 1;lvl1 [1][14] = 1;
lvl1 [2][0] = 2;lvl1 [2][1] = 2;lvl1 [2][2] = 2;lvl1 [2][3] = 1;lvl1 [2][4] = 1;lvl1 [2][5] = 2;lvl1 [2][6] = 1;lvl1 [2][7] = 1;lvl1 [2][8] = 2;lvl1 [2][9] = 1;lvl1 [2][10] = 1;lvl1 [2][11] = 1;lvl1 [2][12] = 1;lvl1 [2][13] = 1;lvl1 [2][14] = 1;
lvl1 [3][0] = 1;lvl1 [3][1] = 1;lvl1 [3][2] = 2;lvl1 [3][3] = 1;lvl1 [3][4] = 1;lvl1 [3][5] = 2;lvl1 [3][6] = 1;lvl1 [3][7] = 1;lvl1 [3][8] = 2;lvl1 [3][9] = 1;lvl1 [3][10] = 1;lvl1 [3][11] = 1;lvl1 [3][12] = 2;lvl1 [3][13] = 2;lvl1 [3][14] = 1;
lvl1 [4][0] = 1;lvl1 [4][1] = 1;lvl1 [4][2] = 2;lvl1 [4][3] = 1;lvl1 [4][4] = 1;lvl1 [4][5] = 2;lvl1 [4][6] = 1;lvl1 [4][7] = 1;lvl1 [4][8] = 2;lvl1 [4][9] = 1;lvl1 [4][10] = 1;lvl1 [4][11] = 1;lvl1 [4][12] = 2;lvl1 [4][13] = 2;lvl1 [4][14] = 1;
lvl1 [5][0] = 1;lvl1 [5][1] = 1;lvl1 [5][2] = 2;lvl1 [5][3] = 2;lvl1 [5][4] = 2;lvl1 [5][5] = 2;lvl1 [5][6] = 1;lvl1 [5][7] = 1;lvl1 [5][8] = 2;lvl1 [5][9] = 1;lvl1 [5][10] = 1;lvl1 [5][11] = 1;lvl1 [5][12] = 2;lvl1 [5][13] = 2;lvl1 [5][14] = 1;
lvl1 [6][0] = 1;lvl1 [6][1] = 1;lvl1 [6][2] = 1;lvl1 [6][3] = 1;lvl1 [6][4] = 1;lvl1 [6][5] = 1;lvl1 [6][6] = 1;lvl1 [6][7] = 1;lvl1 [6][8] = 2;lvl1 [6][9] = 1;lvl1 [6][10] = 1;lvl1 [6][11] = 1;lvl1 [6][12] = 2;lvl1 [6][13] = 2;lvl1 [6][14] = 1;
lvl1 [7][0] = 1;lvl1 [7][1] = 1;lvl1 [7][2] = 1;lvl1 [7][3] = 1;lvl1 [7][4] = 1;lvl1 [7][5] = 2;lvl1 [7][6] = 2;lvl1 [7][7] = 2;lvl1 [7][8] = 2;lvl1 [7][9] = 1;lvl1 [7][10] = 1;lvl1 [7][11] = 1;lvl1 [7][12] = 1;lvl1 [7][13] = 2;lvl1 [7][14] = 1;
lvl1 [8][0] = 1;lvl1 [8][1] = 1;lvl1 [8][2] = 1;lvl1 [8][3] = 2;lvl1 [8][4] = 2;lvl1 [8][5] = 2;lvl1 [8][6] = 1;lvl1 [8][7] = 1;lvl1 [8][8] = 1;lvl1 [8][9] = 1;lvl1 [8][10] = 1;lvl1 [8][11] = 1;lvl1 [8][12] = 1;lvl1 [8][13] = 3;lvl1 [8][14] = 1;
lvl1 [9][0] = 1;lvl1 [9][1] = 3;lvl1 [9][2] = 2;lvl1 [9][3] = 2;lvl1 [9][4] = 1;lvl1 [9][5] = 1;lvl1 [9][6] = 1;lvl1 [9][7] = 1;lvl1 [9][8] = 1;lvl1 [9][9] = 1;lvl1 [9][10] = 1;lvl1 [9][11] = 1;lvl1 [9][12] = 1;lvl1 [9][13] = 1;lvl1 [9][14] = 1;


//Construction de la map d'après le tableau
for (int i = 0 ; i < 15 ; i++)
{
for (int j = 0 ; j < 10 ; j++)
{
//conversion coordonées tableau en coordonnées case
position.x = i * 50;
position.y = j * 50;
switch(lvl1[j][i])
{
//si case vaut 2
case 2:
//on ajoute path (chemin) a ecran aux coordonnées precedent
SDL_BlitSurface(Path, NULL, ecran, &position);
break;




//si case vaut 1
case 1:
//on ajoute mur a ecran aux coordonnées precedent
SDL_BlitSurface(Mur, NULL, ecran, &position);
break;


case 3:
//on ajoute mur a ecran aux coordonnées precedent
SDL_BlitSurface(TP, NULL, ecran, &position);
break;




}
}
}
positionPerso.x = 0;
positionPerso.y = 1;
realpositionPerso.x = positionPerso.x * 50;
realpositionPerso.y = positionPerso.y * 50;
SDL_BlitSurface(Perso, NULL, ecran, &realpositionPerso);


//on actualise
SDL_Flip(ecran);
//pause avant de fermer: sera remplacée par la boucle du jeu!
int continuer = 1;
SDL_Event event;
bool havemoved;
while (continuer)
{
SDL_WaitEvent(&event);
switch(event.type)
{
case SDL_QUIT:
continuer = 0;
break;
case SDL_KEYDOWN:
switch(event.key.keysym.sym)
{
case SDLK_UP:
//detection collision
switch(lvl1 [positionPerso.y-1] [positionPerso.x])
{




case 2:
lastpositionPerso.y = positionPerso.y;
lastpositionPerso.x = positionPerso.x;
//mise a jour de la position virtuelle (dans le tableau)
positionPerso.y=positionPerso.y - 1;
//mise a jour valeur réelle
realpositionPerso.y = positionPerso.y * 50;
//on paint
SDL_BlitSurface(Perso, NULL, ecran, &realpositionPerso);
// on dit qu'il y a eu mouvement
havemoved = true;


break;


case 3:
// sauvegarde de la position précedente pour le repaint
lastpositionPerso.y = positionPerso.y;
lastpositionPerso.x = positionPerso.x;
//mise a jour de la position virtuelle (dans le tableau)
positionPerso.y=positionPerso.y - 1;
//mise a jour valeur réelle
realpositionPerso.y = positionPerso.y * 50;
//on paint
SDL_BlitSurface(Perso, NULL, ecran, &realpositionPerso);
// on dit qu'il y a eu mouvement
havemoved = true;
break;
}


break;
case SDLK_DOWN:
//detection collision
switch(lvl1 [positionPerso.y+1] [positionPerso.x])
{




case 2:
lastpositionPerso.y = positionPerso.y;
lastpositionPerso.x = positionPerso.x;
//mise a jour de la position virtuelle (dans le tableau)
positionPerso.y=positionPerso.y + 1;
//mise a jour valeur réelle
realpositionPerso.y = positionPerso.y * 50;
//on paint
SDL_BlitSurface(Perso, NULL, ecran, &realpositionPerso);
// on dit qu'il y a eu mouvement
havemoved = true;


break;


case 3:
// sauvegarde de la position précedente pour le repaint
lastpositionPerso.y = positionPerso.y;
lastpositionPerso.x = positionPerso.x;
positionPerso.y=positionPerso.y+1;
//mise a jour de la position virtuelle (dans le tableau)
if(positionPerso.x==13 && positionPerso.y==8){
positionPerso.y=9;
positionPerso.x=1;
realpositionPerso.x = positionPerso.x*50;
realpositionPerso.y = positionPerso.y*50;
SDL_BlitSurface(Perso, NULL, ecran, &realpositionPerso);
// on dit qu'il y a eu mouvement
havemoved = true;
}




break;
}


break;
case SDLK_RIGHT:
//detection collision
switch(lvl1 [positionPerso.y] [positionPerso.x+1])
{




case 2:
lastpositionPerso.y = positionPerso.y;
lastpositionPerso.x = positionPerso.x;
//mise a jour de la position virtuelle (dans le tableau)
positionPerso.x=positionPerso.x + 1;
//mise a jour valeur réelle
realpositionPerso.x = positionPerso.x * 50;
//on paint
SDL_BlitSurface(Perso, NULL, ecran, &realpositionPerso);
// on dit qu'il y a eu mouvement
havemoved = true;


break;


case 3:
// sauvegarde de la position précedente pour le repaint
lastpositionPerso.y = positionPerso.y;
lastpositionPerso.x = positionPerso.x;
//mise a jour de la position virtuelle (dans le tableau)
positionPerso.x=positionPerso.x + 1;
//mise a jour valeur réelle
realpositionPerso.x = positionPerso.x * 50;
//on paint
SDL_BlitSurface(Perso, NULL, ecran, &realpositionPerso);
// on dit qu'il y a eu mouvement
havemoved = true;
break;
}


break;


case SDLK_LEFT:
//detection collision
switch(lvl1 [positionPerso.y] [positionPerso.x-1])
{




case 2:
lastpositionPerso.y = positionPerso.y;
lastpositionPerso.x = positionPerso.x;
//mise a jour de la position virtuelle (dans le tableau)
positionPerso.x=positionPerso.x - 1;
//mise a jour valeur réelle
realpositionPerso.x = positionPerso.x * 50;
//on paint
SDL_BlitSurface(Perso, NULL, ecran, &realpositionPerso);
// on dit qu'il y a eu mouvement
havemoved = true;


break;


case 3:
// sauvegarde de la position précedente pour le repaint
lastpositionPerso.y = positionPerso.y;
lastpositionPerso.x = positionPerso.x;
positionPerso.x=positionPerso.x-1;
//mise a jour de la position virtuelle (dans le tableau)
if(positionPerso.x==1 && positionPerso.y==9){
positionPerso.y=8;
positionPerso.x=13;
realpositionPerso.x = positionPerso.x*50;
realpositionPerso.y = positionPerso.y*50;
SDL_BlitSurface(Perso, NULL, ecran, &realpositionPerso);
// on dit qu'il y a eu mouvement
havemoved = true;
}




break;
}


break;


break;
}
// on repaint la case precedente si il y a eu mouvement
if (havemoved == true){
// on reset la variable qui dit s'il y a eu mouvement
havemoved = false;
// on crée 2 variables destinées a se repérer dans le tableau
int x = lastpositionPerso.x;
int y = lastpositionPerso.y;
// on transforme lastpositionPerso en position réelle
lastpositionPerso.x=lastpositionPerso.x*50;
lastpositionPerso.y=lastpositionPerso.y*50;
// on regarde quel type de case on doit repeindre
switch(lvl1[y][x])
{




//si case vaut 2
case 2:
//si chemin on ajoute path (chemin) a ecran aux coordonnées precedent
SDL_BlitSurface(Path, NULL, ecran, &lastpositionPerso);
break;


case 3:
//si chemin on ajoute path (chemin) a ecran aux coordonnées precedent
SDL_BlitSurface(TP, NULL, ecran, &lastpositionPerso);
break;


}












}


SDL_Flip(ecran);
}}
return 0;
//on met en pause pour pas que l'ecran se referme automatiquement
}

Partager cet article
Repost0
Pour être informé des derniers articles, inscrivez vous :
Commenter cet article