Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Dudas sobre SDL en MS Visual C++

Iniciado por zaga666, 14 de Mayo de 2012, 10:43:05 PM

« anterior - próximo »

zaga666

Hola que tal me soy novato en esto de la programacion de videojuegos, estoy leyendo este libro http://www.agserrano.com/libros/sdl/[ebook]Programacion%20de%20videojuegos%20con%20SDL.pdf
se me hace un libro muy directo para los que apenas empiezan en la programacion con sdl, y mi duda es que no encuentro un editor de mapas con tiles y como ingresarlo en mi codigo, en este libro hay ejemplos pero no me funcionan si me recomiendaran mas libros o paginas para poder aprender mas sobre la programacion de videojuegos con c++ muchas gracias.

zaga666

sere un poco mas especifico este es mi codigo y no se como meter el mapa no me sale el mapa

#include <stdio.h>
#include <stdlib.h>
#include <SDL.h>
#include "csprite.h"




#define MAXMAP 400
SDL_Surface *screen;
CFrame fnave;
CFrame fmalo;
CFrame tile1;
CFrame tile2;
CFrame tile3;
CSprite nave(1);
CSprite malo(1);
CSprite suelo[3];
SDL_Rect rectangulo;
SDL_Joystick *joystick;
char mapa[401];
int joyx, joyy;
int done=0;
int indice, indice_in;
FILE *f;
// estructura que contiene la información
// de nuestro avión
struct minave {
int x,y;
} jugador;
// Estructura que contiene información
// del avión enemigo
struct naveenemiga {
int x,y;   
} enemigo;
// Dibuja el escenario
void DrawScene(SDL_Surface *screen) {
int i,j,x,y,t;
// movimiento del scenario (scroll)
indice_in+=2;
if (indice_in>=64) {
  indice_in=0;
  indice-=10;
}
 
if (indice <= 0) {
  indice=MAXMAP-100; // si llegamos al final, empezamos de nuevo.
  indice_in=0;
}
//dibujar escenario
for (i=0 ; i<10 ; i++) {
  for (j=0 ; j<10 ; j++) {
   t=mapa[indice+(i*10+j)]; 
   // calculo de la posición del tile
   x=j*64;
   y=(i-1)*64+indice_in;
   
   // dibujamos el tile
   suelo[t].setx(x);
   suelo[t].sety(y);
   suelo[t].draw(screen);
  } 
}
// dibuja avión
nave.setx(jugador.x);
nave.sety(jugador.y);
nave.draw(screen);
// Dibuja enemigo
malo.setx(enemigo.x);
malo.sety(enemigo.y);
malo.draw(screen);
     
// ¿ha colisionado con la nave?
if (malo.colision(nave) == TRUE) {
  done=1;
}
// Mostramos todo el frame
SDL_Flip(screen);
}
// Inicializamos estados
void inicializa() {
int c;
jugador.x=300;
jugador.y=300;
enemigo.x=100;
enemigo.y=100;
indice=MAXMAP-100;
indice_in=0;
// Carga del mapa
if((f=fopen("C:/mapa.map","r")) != NULL) {
  c=fread(mapa,MAXMAP,1,f); 
  fclose(f);
}
}
void finaliza() {
// finalizamos los sprites
nave.finalize();
malo.finalize();
suelo[0].finalize();
suelo[1].finalize();
suelo[2].finalize();
// cerramos el joystick
if (SDL_JoystickOpened(0)) {
  SDL_JoystickClose(joystick);
}
}
// Preparamos los esprites
int InitSprites() {
fnave.load("C:/minave.bmp");
nave.addframe(fnave);
fmalo.load("C:/malo1.bmp");
malo.addframe(fmalo);
tile1.load("C:/tile_0.bmp");
suelo[0].addframe(tile1);
tile2.load("C:/planeta.bmp");
suelo[1].addframe(tile2);
tile3.load("C:/wood.bmp");
suelo[2].addframe(tile3);

return 0;
}
int main(int argc, char *argv[]) {
SDL_Event event;
Uint8 *keys;
if (SDL_Init(SDL_INIT_VIDEO|SDL_INIT_JOYSTICK) < 0) {
  printf("No se pudo iniciar SDL: %s\n",SDL_GetError());
  return 1;
}
screen = SDL_SetVideoMode(640,480,24,SDL_HWSURFACE);
if (screen == NULL) {
  printf("No se puede inicializar el modo gráfico: \n",SDL_GetError());
  return 1;
}
atexit(SDL_Quit);
inicializa(); 
InitSprites();
 
while (done == 0) {
   
  // dibujamos el frame
  DrawScene(screen);
  // consultamos el estado del teclado
  keys=SDL_GetKeyState(NULL);
  // consultamos el estado del joystick
  SDL_JoystickUpdate();
   
  joyx = SDL_JoystickGetAxis(joystick, 0);
  joyy = SDL_JoystickGetAxis(joystick, 1);
  if ((keys[SDLK_UP] || joyy < -10) && (jugador.y > 0)) {jugador.y=jugador.y-(5);}
  if ((keys[SDLK_DOWN] || joyy > 10) && (jugador.y < 460)) {jugador.y=jugador.y+(5);}
  if ((keys[SDLK_LEFT] || joyx < -10) && (jugador.x > 0)) {jugador.x=jugador.x-(5);}
  if ((keys[SDLK_RIGHT] || joyx > 10) && (jugador.x < 620)) {jugador.x=jugador.x+(5);}
  while (SDL_PollEvent(&event)) {
     
   if (event.type == SDL_QUIT) {done=1;}
   if (event.type == SDL_KEYDOWN || event.type == SDL_JOYBUTTONDOWN) {
       
    if (event.key.keysym.sym == SDLK_ESCAPE) {
     done=1;
   }   
   }   
         
  } 
}
   
finaliza();
return 0;
}






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.