Again
[hammerdown.git] / new_project / main.c
blobb7925f9c19f3659e141f64fdab1ad87d65d4c841
1 #include "main.h"
2 #include "maze.h"
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}};
24 int CurrentFrame = 0;
25 int MaxFrames = 4;
26 int FrameInc = 1;
28 int FrameRate = 100; //Milliseconds
29 int OldTime = 0;
31 int Oscillate = 1;
32 void animacion();
34 SDL_Surface *player;
36 int main (int argc, char *argv[]) {
38 /*Inicializa SDL*/
39 if (SDL_Init (SDL_INIT_VIDEO) < 0) {
40 printf ("SDL_INIT ha fallado\n");
41 exit (1);
44 atexit (SDL_Quit);
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");
51 exit (1);
54 /*Usaremos nuestro propio cursor*/
55 SDL_ShowCursor (SDL_DISABLE);
57 if (!iniciar()) {
58 printf ("Error de inicializacion\n");
59 exit (1);
62 init_arrays();
63 createMaze(0, 0);
64 drawMaze();
65 printMaze();
68 /*Bucle principal*/
70 while (1) {
73 /*Dibujamos*/
74 dibujar ();
77 /*Control de eventos SDL*/
79 SDL_Event ev;
81 while (SDL_PollEvent (&ev)) {
83 switch (ev.type) {
84 /*Pulsacion del teclado*/
85 case SDL_KEYDOWN:
86 if (ev.key.keysym.sym == SDLK_ESCAPE) {
87 limpiar();
88 return 0;
90 break;
92 /*Fin del programa*/
93 case SDL_QUIT:
94 limpiar();
95 return 0;
96 break;
104 return 0;
108 /*Inicializa lo que haga falta y carga las superficies*/
109 int iniciar () {
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" );
119 if (tiles == NULL)
120 return 0;
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;
129 return 1;
133 /*Limpia la memoria*/
134 void limpiar () {
136 printf ("Limpiando...\n");
138 if (tiles != NULL) {
139 SDL_FreeSurface (tiles);
140 tiles = NULL;
146 /*Dibuja el mapa y el cursor*/
147 void dibujar () {
149 /*Limpia la pantalla*/
150 SDL_FillRect (pantalla, NULL, 0);
152 hardcodelvl();
153 /*dibujarMapa();*/
154 drawPlayer();
155 /*Intercambia los buffers*/
156 SDL_Flip (pantalla);
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)*/
174 px = x*TILE_ANCHO;
175 py = y*TILE_ALTO;
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);
202 void hardcodelvl() {
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)*/
213 px = x*TILE_ANCHO;
214 py = y*TILE_ALTO;
216 /*Dibuja el tile en la pantalla*/
217 blitTile (pantalla, py, px, hlvl[x][y]);
224 void drawPlayer(){
226 animacion();
228 SDL_Rect srcRect, destRect;
229 destRect.x = 50; destRect.y = 50;
231 srcRect.x = CurrentFrame * 64;
232 srcRect.y = 0;
233 srcRect.w = 64; srcRect.h = 64;
235 SDL_BlitSurface (player, &srcRect, pantalla, &destRect);
239 void animacion(){
240 if(OldTime + FrameRate > SDL_GetTicks()) {
241 return;
244 OldTime = SDL_GetTicks();
246 CurrentFrame += FrameInc;
248 if(CurrentFrame > MaxFrames-1) {
249 CurrentFrame = 0;