1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173
| #include <ptk.h>
#include <stdlib.h>
#include <stdio.h>
class cLevel
{
public :
/* Med:
On va utiliser des constantes pour 20 et 15, parce qu'on va en avoir besoin ailleurs.
*/
static const int LARGEUR = 20;
static const int HAUTEUR = 15;
char levelGrid[LARGEUR][HAUTEUR];
void init();//initialisation de levelGrid à partir d'un fichier
void drawLevel(void) ; //fabrication du niveau à partir de levelGrid
bool isThereABrickAt( long x ,long y); //vérification s'il y a une brique pour déplacement
};
/* Med:
Quand une fonction est dans une classe, il faut annoncer la classe dans la déclaration.
void init(); //Pas encore commencé
*/
/* Med: Pas d'espace entre la fonction et la parenthèse ouvrante, c'est illisible à souhait. */
void cLevel::init()
{
//selon selectniveau de menu : 1 pour lvl1 et 2 pour lvl2
//ouverture du fichier
//lecture de fichier
//enregistrement dans tableau 1 à 1
}
void DrawBrickBlack (long x, long y)//construction d'une brique noir avec black.tga
{
KGraphic *BlackBrick = NULL ;
//BlackBrick = KPTK::createKGraphic(); et BlackBrick->loadPicture(KMiscTools::makeFilePath("black.tga"),true,true); à mettre dans le main, la procédure elle sera dans la boucle
BlackBrick -> blitAlphaRect(0,0,32,32,x,y);
delete BlackBrick;
}/* Med: Le ';' est inutile après une fonction : c'est juste après les structures et les classes. */
void DrawBrickRed (long x,long y)//construction d'une brique rouge avec red.tga
{
KGraphic *RedBrick = NULL;
//Voir DrawBrickBlack pour ce qui est à mettre en début de main
RedBrick -> blitAlphaRect(0,0,32,32,x,y);
delete RedBrick;
}
/* Med:
Nom de la classe oublié là aussi.
*/
void cLevel::drawLevel() //construction du niveau en ajoutant ou non une brique selon le tableau levelgrid.
{
int x, y ;
/* Med :
Le for, dans les langages c-style, doit spécifier les conditions explicitement.
Pas d'espace non plus entre le for et la parenthèse, pour raison de lisibilité:
Si tu veux mettre des espaces, mets-les à l'intérieur des parenthèses.
for (x=0 ; 640 ; x+=32)
De plus, ici tu accèdes à ta matrice de 20*15 : Tu ne dois pas utiliser les "grandes" valeurs ici.
*/
for(x=0 ; x<LARGEUR ; x++)
{
for(y=0 ; y<HAUTEUR ; y++)
{
if(levelGrid[x][y]== 1)
{
DrawBrickBlack(x*32,y*32); // brique normal
}
if(levelGrid[x][y]==2)
{
DrawBrickRed(x*32,y*32); //brique de départ et d'arrivé
}
}
}
}
/* Med:
Nom de la classe oublié là aussi.
*/
bool cLevel::isThereABrickAt(long x , long y) //oui il y a une brique, non il n'y en a pas, cela servira pour le déplacement du perso dans le laby
{
if (levelGrid[x][y]!= 0)
{
return 1;
}
else
{
return 0;
}
}
//éditeur de niveau
void EditLvl()
{
bool LeftBMouse;
int Tab [cLevel::LARGEUR][cLevel::HAUTEUR];
LeftBMouse = KInput::getLeftButtonState();
KWindow *editorWindow = NULL;
KGraphic *editorPicture = NULL;
FILE* sav = NULL;
int i,j,x,y;
short mx, my ;
editorWindow = KPTK::createKWindow(K_OPENGL);
editorWindow -> createGameWindow(640,480,-1,true,"editor");
editorPicture = KPTK::createKGraphic();
editorPicture -> loadPicture(KMiscTools::makeFilePath("editorfont.tga"),true,true);
do
{
editorWindow->setDefaultWorldView();
editorPicture->blitAlphaRect(0,0,640,480,0,0);
/* Med: Correction des boucles for */
for(x=0 ; x<640 ; x+=32)
{
editorPicture->drawLine(x,0,x,480,1,1,1,1);
}
for(y=0 ; y<480 ; x+=32)
{
editorPicture->drawLine(0,y,640,y,1,1,1,1);
}
mx = KInput::getMouseX() / 32;
my = KInput::getMouseY()/ 32;
if( mx >= 0 && my >= 0 && mx < cLevel::LARGEUR && my < cLevel::HAUTEUR )
{
if(LeftBMouse)
{
if( Tab[mx][my] == 0 )
{
Tab[mx][my] = 1 ;
}
else
{
Tab[mx][my] = 0 ;
}
}
if( KInput::isPressed( K_VK_S ) == ISDOWN ) //Pour la sauvegarde, à modifier pour une intégration dans le jeu si j'ai le temps, mais comme c'est juste pour créer 2 niveaux.
{
/* Med : Guillemet manquant, et il faut vérifier le résultat: fclose(NULL) peut faire planter. */
sav = fopen("level.txt","w");
if(sav!=NULL)
{
/* Med:
Pourquoi cette boucle for commence à 1 ?
for(i=1 ; 20; i++)
*/
for(i=0 ; i<cLevel::LARGEUR ; i++)
{
for(j=0 ; j<cLevel::HAUTEUR ; j++)
{
fputc(Tab[i][j],sav);
}
}
fclose(sav);
}
}
}
}while(editorWindow->isQuit() == false );
/* Med: On ne fait pas de delete sur un FILE*
delete sav;
*/
delete editorWindow;
//delete editorFont;
delete editorPicture;
} |
Partager