3 int hlvl
[20][20] = {{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
4 {0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0},
5 {0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0},
6 {0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0},
7 {0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0},
8 {0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0},
9 {0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0},
10 {0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0},
11 {0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0},
12 {0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0},
13 {0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0},
14 {0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0},
15 {0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0},
16 {0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0},
17 {0,1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1,0},
18 {0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0},
19 {0,1,1,1,1,0,0,1,1,1,1,1,1,0,0,0,1,1,1,0},
20 {0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0},
21 {0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0},
22 {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}};
28 int FrameRate
= 100; //Milliseconds
36 int main (int argc
, char *argv
[]) {
39 if (SDL_Init (SDL_INIT_VIDEO
) < 0) {
40 printf ("SDL_INIT ha fallado\n");
46 /*Usamos HW si disponible, double buffering, y pantalla completa*/
47 pantalla
= SDL_SetVideoMode ( 1200, 800, 16, SDL_SWSURFACE
| SDL_DOUBLEBUF
);
49 if (pantalla
== NULL
) {
50 printf ("Modo de video erroneo\n");
54 /*Usaremos nuestro propio cursor*/
55 SDL_ShowCursor (SDL_DISABLE
);
58 printf ("Error de inicializacion\n");
77 /*Control de eventos SDL*/
81 while (SDL_PollEvent (&ev
)) {
84 /*Pulsacion del teclado*/
86 if (ev
.key
.keysym
.sym
== SDLK_ESCAPE
) {
108 /*Inicializa lo que haga falta y carga las superficies*/
111 /*Definimos el clipper*/
113 SDL_SetClipRect (pantalla
, NULL
);
115 /*Cargamos los tiles*/
116 tiles
= IMG_Load( "tiles.png" );
117 player
= IMG_Load( "thespider.png" );
122 SDL_SetColorKey (tiles
, SDL_SRCCOLORKEY
, 0);
125 /*Calculamos el total de tiles*/
126 nTilesX
= tiles
->w
/ TILE_ANCHO
;
127 nTilesY
= tiles
->h
/ TILE_ALTO
;
133 /*Limpia la memoria*/
136 printf ("Limpiando...\n");
139 SDL_FreeSurface (tiles
);
146 /*Dibuja el mapa y el cursor*/
149 /*Limpia la pantalla*/
150 SDL_FillRect (pantalla
, NULL
, 0);
155 /*Intercambia los buffers*/
161 /*Dibuja los tiles del mapa*/
162 void dibujarMapa () {
164 int x
, y
; /*Casilla del mapa*/
165 int px
, py
; /*Coordenadas en pantalla*/
168 /*Por cada casilla del mapa*/
169 for (x
= 0; x
< mazeRow
; x
++) {
170 for (y
= 0; y
< mazeCol
; y
++) {
172 /*Calculamos las coordenadas de pantalla a partir de las de la casilla*/
173 /*y el desplazamiento de la camara (scrollX, scrollY)*/
177 /*Dibuja el tile en la pantalla*/
178 blitTile (pantalla
, px
, py
, mazeDraw
[x
][y
]);
185 /*Dibuja un tile en la posicion (x, y)*/
186 void blitTile (SDL_Surface
*dest
, int x
, int y
, int nTile
) {
188 if (nTile
>= nTilesX
* nTilesY
) return;
191 SDL_Rect srcRect
, destRect
;
192 destRect
.x
= x
; destRect
.y
= y
;
194 srcRect
.x
= (nTile
% nTilesX
) * TILE_ANCHO
;
195 srcRect
.y
= (nTile
/ nTilesX
) * TILE_ALTO
;
196 srcRect
.w
= TILE_ANCHO
; srcRect
.h
= TILE_ALTO
;
198 SDL_BlitSurface (tiles
, &srcRect
, dest
, &destRect
);
203 int x
, y
; /*Casilla del mapa*/
204 int px
, py
; /*Coordenadas en pantalla*/
207 /*Por cada casilla del mapa*/
208 for (x
= 0; x
< 20; x
++) {
209 for (y
= 0; y
< 20; y
++) {
211 /*Calculamos las coordenadas de pantalla a partir de las de la casilla*/
212 /*y el desplazamiento de la camara (scrollX, scrollY)*/
216 /*Dibuja el tile en la pantalla*/
217 blitTile (pantalla
, py
, px
, hlvl
[x
][y
]);
228 SDL_Rect srcRect
, destRect
;
229 destRect
.x
= 50; destRect
.y
= 50;
231 srcRect
.x
= CurrentFrame
* 64;
233 srcRect
.w
= 64; srcRect
.h
= 64;
235 SDL_BlitSurface (player
, &srcRect
, pantalla
, &destRect
);
240 if(OldTime
+ FrameRate
> SDL_GetTicks()) {
244 OldTime
= SDL_GetTicks();
246 CurrentFrame
+= FrameInc
;
248 if(CurrentFrame
> MaxFrames
-1) {