¿Qué sería de un videojuego de este tipo sin enemigos? La verdad es que es difícil de imaginar por lo que aunque de una manera no demasiado cuidada vamos a incluirlos. Sabiendo ya incluir imágenes y moverlas, la operación es sencilla:
for(i=0;i<numeroEnemigos;i++)
{
enemigos[i]=SDL_LoadBMP(“enemigo.bmp”);
SDL_SetColorKey (enemigos[i], SDL_SRCCOLORKEY, SDL_MapRGB (enemigos[i]->format, MASK));
posicionesEnemigos[i].x=rand()%590+1;
posicionesEnemigos[i].y=60-rand()%40+1;
}
Veamos en una imagen cómo queda:
Y el código completo serían el siguiente:
#include <stdio.h>
#include <stdlib.h>
#include <SDL/SDL.h>
#include <time.h>
#define MASK 255, 255, 255
struct posicion{
int x;
int y;
};
int main()
{
SDL_Surface *screen;
SDL_Surface *fondo;
SDL_Surface *jugador;
SDL_Surface **enemigos;
struct posicion *posicionesEnemigos;
SDL_Event event;
SDL_Rect posicion;
int terminar=0;
int numeroEnemigos=10;
int i, j;
int posicionJugadorX=290, posicionJugadorY=430;
Uint8* teclas;
srand(time(NULL));
if (SDL_Init(SDL_INIT_VIDEO) < 0)
{
printf("No se pudo inicializar SDL: %s\n", SDL_GetError());
exit(1);
}
/*creando vector para contener enemigos*/ enemigos=(SDL_Surface**)malloc(sizeof(SDL_Surface*)*numeroEnemigos);
/*y vector para posiciones de los mismos*/ posicionesEnemigos=(struct posicion*)malloc(sizeof(struct posicion)
*numeroEnemigos);
fondo = SDL_LoadBMP("fondo.bmp");
jugador = SDL_LoadBMP("avion.bmp");
SDL_SetColorKey (jugador, SDL_SRCCOLORKEY, SDL_MapRGB (jugador->format,
MASK));
/*cargando graficos para enemigos y generando
posiciones iniciales para los enemigos*/ for(i=0;i<numeroEnemigos;i++)
{
enemigos[i]=SDL_LoadBMP("enemigo.bmp");
SDL_SetColorKey (enemigos[i], SDL_SRCCOLORKEY, SDL_MapRGB
(enemigos[i]->format, MASK));
posicionesEnemigos[i].x=rand()%590+1;
posicionesEnemigos[i].y=60-rand()%40+1;
}
screen = SDL_SetVideoMode( 640, 480, 16, SDL_HWSURFACE );
if( screen == NULL )
{
printf( "Error al entrar a modo grafico: %s\n", SDL_GetError() );
SDL_Quit();
return -1;
}
SDL_WM_SetCaption( "Incluyendo enemigos", "Incluyendo enemigos" );
while(!terminar)
{
for (i=0; i<10; i++)
for (j=0; j<10; j++)
{
posicion.x=64*i;
posicion.y=48*j;
SDL_BlitSurface(fondo, NULL, screen, &posicion);
}
posicion.x=posicionJugadorX;
posicion.y=posicionJugadorY;
SDL_BlitSurface(jugador, NULL, screen, &posicion);
for(i=0;i<numeroEnemigos;i++)
{
posicion.x=posicionesEnemigos[i].x;
posicion.y=posicionesEnemigos[i].y;
SDL_BlitSurface(enemigos[i], NULL, screen, &posicion);
}
SDL_Flip(screen);
while ( SDL_PollEvent(&event) )
{
if (event.type == SDL_QUIT || event.key.keysym.sym ==
SDLK_ESCAPE)
terminar = 1;
}
teclas = SDL_GetKeyState(NULL);
if (teclas[SDLK_UP]) { posicionJugadorY -= 2; }
if (teclas[SDLK_DOWN]) { posicionJugadorY += 2;}
if (teclas[SDLK_LEFT]) { posicionJugadorX -= 2; }
if (teclas[SDLK_RIGHT]) { posicionJugadorX += 2; }
for(i=0;i<numeroEnemigos;i++)
{
posicionesEnemigos[i].y+=2;
}
}
SDL_Quit();
return 0;
}
Ver comentarios
creo que falta esto : #include
:P
muy bueno tu curso espero el siguiente post!
perdon: era- la biblioteca time.h
@ubuntero: Los problemas de tener que usar los el ampersand gt en lugar de el símbolo > directamente (y el menor que).
Ya la he includo, aunque no es necesaria siempre (depende la configuración de tu compilador y los includes que haga por defecto).
Muchas gracias Carazo por esta nueva entrega
salu2
muy bueno!
gracias!
No funciona...
¿Qué problema tienes?