(Proyecto)Libreria para Videojuegos basada en SDL

(Proyecto)Libreria para Videojuegos basada en SDL

Notapor LhaN » Sab Ene 12, 2008 11:31 pm

Hola gente, soy nuevo por acá. Y le agradezco a la comunidad en particular a rcaf que fue el que primer referente de SDL que tuve. Les cuento en lo que ando. No se si alguno conoce Game Maker? Para los que no lo conozcan (lo dudo mucho, que los que aquí están no lo conozcan) es un IDE con interprete que facilita la creación de juegos en 2D. Los juegos como dije, no son compilados, son interpretados, pero el interprete se inserta en el ejecutable del juego. Además usa directx para funcionar. Lo bueno es que en algunos casos, no es necesario ni una sola línea de código (bueno relativamente dependiendo del punto de vista no?). Pero tiene algunos problemillas, el mío en particular es que jamás pude hacer un DLL en C++ que extendiera las posibilidades del mismo, y de todas formas, usar una DLL externa es un tanto complejo y no esta muy bien implementado en lo que a uso se refiere. El tema es que como yo vengo de entornos C++, eso significa el maravilloso mundo de los punteros (cosa que antes odiaba y ahora me doy cuenta de que son lo mejor), y dicho interprete no usa, es mas... como la mayoría de los interpretes no es necesario declarar variables, o usar variables con tipos predefinidos, así que hoy uso la variable X como un string y mañana la uso como un entero y nada me puede detener (a excepción de la lógica del juego jeje). Y buscando buscando buscando, llego a conocer SDL, todavía no he hecho gran cosa (no me gusta ponerme a hacer si no se que estoy haciendo, antes prefiero aprender un poco). así que dije, bueno a ver, por donde empiezo, la lista de prioridades que la mayoría propone en esto de empezar videojuegos es... pong -> space invaders -> tetris -> arkanoid -> pac-man -> ... etc. Y esto en algún punto en mi cerebro se mezcla con los conceptos de "orientado a objetos" y "reusabilidad". así que me propuse algo, antes de empezar a hacer algún juego, quiero hacer una base, algo así como game maker... al menos básicamente hablando, no el IDE y el interprete, sino lo demás, clases, clases sprite, clases background, clase esto clase aquello, cosa de que quede algo así:
Código: Seleccionar todo
class clssPlayer
{
   protected:
      int
         posicionX, posicionY,/* su posicion en el mapa*/
         visible,/*si es o no dibujado*/
         solido,/*si se tiene en cuenta al comprobar colisiones*/
         profundidad,/*orden en que sera dibujado*/
         enmascarado,/*si usa o no una mascara al detectar una colision*/
         animacion;/*-1 sentido izquierdo, 0 sin animacion, 1 sentido derecho*/
      clssSprite
         sprite,/*lista de las imagenes que representa visualmente al objeto*/
         mascara;/*imagen/es usada/s para la deteccion de colision presisa*/
   
   public:
      clssPlayer(char * archivoDatosTxt)
      {
         fstream *archivo = new fstream(archivoDatosTxt, ios::in | ios::out | ios::app);
         char línea[128];
         while(!pf_cfg->eof())
         {
            archivo->getline(temporal,128);
            if(línea[0]!='#')
               
            
         }
      }
      
      inline void posicion(int x, int y){ posicionX=x; posicionY=y; }
      inline void _posicion(int &x,int &y){ x=posicionX; y=posicionY; }
      
      inline void visible(){ visible = 1; }
      inline void invisible(){ visible = 0; }
      inline int _visible(){ return visible; }
      
      inline void solido(){ solido = 1; }
      inline void etereo(){ solido = 0; }
      inline int _solido(){ return solido; }
      
      inline void profundidad(int x){ profundidad=x; }
      inline int profundidad(){ return profundidad; }
      
      inline void enmascarado(int x){ enmascarado=x; }
      inline int enmascarado(){ return enmascarado; }
      
      void accion();
      void dibujar();
      void animarSprite();
};

void clssPlayer::accion()
{
   //Determinar eventos de entrada y aplicar cambios
   Uint8 *teclas;
   teclas = SDL_GetKeyState(NULL);
   if(teclas[SDLK_UP]) posicionY--;
   if(teclas[SDLK_DOWN]) posicionY++;
   if(teclas[SDLK_LEFT]) posicionX--;
   if(teclas[SDLK_RIGHT]) posicionX++;
}

void clssPlayer::dibujar()
{
   if(visible)
   {
      //dibuja el sprite actual
   }
}

void clssPlayer::animarSprite()
{
   //Anima el sprite o lo cambia segun los eventos ocurridos
}

Como podrán observar, no he avanzado mucho, recién estoy empezando, pero no me he puesto de lleno, ya que estoy buscando info (y la verdad no he encontrado nada). Me estoy basando en el Game Maker para hacer las clases. Así que llegamos al ahora y les pregunto... alguno tiene alguna información que pueda aportarme? y si alguno esta interesado en el proyecto bienvenido es a participar. Eso es todo por ahora, un saludo.
LhaN
 
Mensajes: 8
Registrado: Sab Ene 12, 2008 10:58 pm

Re: (Proyecto)Libreria para Videojuegos basada en SDL

Notapor hugoruscitti » Dom Ene 13, 2008 12:28 am

LhaN escribió:[...] alguno tiene alguna información que pueda aportarme? y si alguno esta interesado en el proyecto bienvenido es a participar. Eso es todo por ahora, un saludo.


Saludos, ante-todo quiero agradecer tu mensaje, y darte la
bienvenida al foro de mensajes.

Con respecto al mensaje, muchos desarrolladores se refieren a la
"base" de un juego como "engine" o "motor"; conocer esta denominación
te puede servir para buscar mas información en un buscador, yo encontré
los siguientes artículos:

http://gpwiki.org/index.php/SDL:Tutoria ... e_Overview
"Explica como crear un motor para juegos en dos dimensiones con SDL"

http://www.losersjuegos.com.ar/referenc ... macion.pdf
"Muestra como crear un motor para juegos explicando conceptos clave de
la programación orintada a objetos."




Aún así, si aceptas una recomendación: considero que hacer un motor
de juego es una tarea muy compleja, sobretodo cuando uno comienza. Se
necesita de mucha experiencia haciendo juegos para advertir que es
"reutilizable" y que "no lo es".

Lamentablemente ahora no encuentro un artículo que me pareció
muy interesante al respecto. Este artículo indicaba que uno de los
factores principales por el cual muchos desarrolladores de juegos no
terminan de hacer si quiera su primer juego, es que muchos al comenzar
pensamos en hacer la parte del juego que requiere mas
experiencia. Por ejemplo, queremos empezar a hacer un juego
y decimos "ok, primero tengo que hacer un engine en 3D con
texturas animadas, una abstracción de AI y controles. Luego hacer
el juego será trivial".

El asunto es que esto no es una buena idea, la mayor cantidad de
personas que elije empezar por lo más difícil termina "re-escribiendo"
su motor una y otra vez, para luego abandonar lo que habían
comenzado.

Reconozco que todo esto es "hipotético", depende de ti en última
instancia, tal vez puedas comenzar por lo más difícil y tener éxito.

Pero igualmente quería hacer la siguiente recomendación: Comienza
por algo mas sencillo, tiene mas sentido hacer juegos cuando puedes
avanzar de lo simple a lo complejo, de lo fácil a lo difícil, paso a
paso, observando el resultado de tu esfuerzo en una pantalla que
invita a "jugar". Eso no te desanimará, aprenderás con mas energía,
será divertido y muy productivo.

PD: ¿GameMaker?, yo había comenzado a hacer juegos con DIV, luego
quise empezar a hacer juegos y pensé en escribir un lenguaje como
DIV, lo que fracasó. Luego quise hacer un motor de juegos, me la
pasé diseñando objetos abstractos y perdí el interés. Luego, antes
de dejar de intentar hacer juegos comprendí que uno aprende ganando
experiencia, y es mas divertido cuando observas resultados que se
pueden jugar.
Avatar de Usuario
hugoruscitti
Site Admin
 
Mensajes: 1242
Registrado: Dom Jul 30, 2006 3:57 am
Ubicación: Buenos Aires, Argentina

Notapor LhaN » Dom Ene 13, 2008 1:07 am

Gracias por el aporte y por la recomendación, la mayoría opina eso, hay que empezar haciendo algo chiquito y simple. Pero el motor o la librería que estoy haciendo es básica y elemental como podrás haber visto. Evidentemente para un juego como tetris o arkanoid o el pong o cualquiera de los que nombre, las clases no son muy complejas. He ahí la cuestión, en su momento dije que yo que no pretendía hacer un IDE o interprete ni nada que se le pareciera, no es esa mi idea, sino un simple librería que facilite algunas cosillas. En el ejemplo que he puesto si bien la clase se llama clssPlayer bien podría cambiarle el nombre, ya que no es propiamente el jugador, solo que cuando la hice la hice pensando en pac-man y pong donde el pac-man y la barra seria de objetos clssPlayer. Además los resultados son casi inmediatos, en vez de hacer todo el código en "un solo cpp" y todo "desordenado" (lo entre comillas no lo digo literalmente), puedo hacer primero el pong y con algunos agregados hacer el pac-man. De todas formas a medida que avance con lo que haga lo voy a ir compartiendo, para que se entienda mejor mi idea. Por ahí haber puesto de ejemplo y hacer referencia a que me baso en Game Maker este dando lugar a creer que quiero mover una montaña empezando por la base (eso ni mahoma... "si la montaña no va a mahoma... mahoma va a la montaña"). Saludos.

PD: me voy a leer lo que me recomendaste Hugo.
LhaN
 
Mensajes: 8
Registrado: Sab Ene 12, 2008 10:58 pm

Notapor Geo » Dom Ene 13, 2008 1:48 am

Alguna vez me pasó por la mente algo similar a lo que planteas: un motor para juegos en lenguaje C++ con estructura similar a la de Game Maker, pero, me falta experiencia, lamentablemente no he podido avanzar por asuntos escolares y del trabajo (si, trabajo y estudio :p).

Me uno a la recomendación de Hugo: adquirir más experiencia, aunque con ganas todo se puede conseguir (claro, puede costar algo más si no se ha hecho nada antes). Por otro lado, me parece buena idea ir publicando lo que hagas, en lo que pueda por aquí ayudaremos :).
La imaginación es el límite.
Visita mi blog en inglés o en español.
Geo
 
Mensajes: 244
Registrado: Jue Ago 10, 2006 3:51 am
Ubicación: México

Notapor LhaN » Dom Ene 13, 2008 2:33 am

Hugo escribió:http://www.losersjuegos.com.ar/referencia/libros/descargas/curso_programacion.pdf
"Muestra como crear un motor para juegos explicando conceptos clave de
la programación orientada a objetos."

Muy bueno, era justo lo que yo necesitaba, se agradece! El otro lamentablemente esta en ingles, todavía soy muy malo para el ingles y leo a duras penas :lol: , si si si... ya se... es un requerimiento saber ingles, en cuanto pueda me hago un curso :P. Suerte.
LhaN
 
Mensajes: 8
Registrado: Sab Ene 12, 2008 10:58 pm

Me gusto tu idea PERO...

Notapor Carlos Guevara Moscol » Vie Feb 29, 2008 11:51 pm

Creo que no deberias dedicarte a crear un motor de juegos, por mas sencillo q desees hacerlo sin antes no haber hecho un juego, xq hay conceptos q son tan practicos q uno lo los entiende claramente luego de leer toneladas de teoria, es recien cuando compilas y el debbug te hace la vida imposible hasta q hayas el error y de paso la satisfaccion de conocer cara a cara el motivo d este, q por lo general es esa parte de la teoria q nunka te kedo clara...

En mi opinio, debes ponerte a escribir tu primer programa, tal vez un pong, tal vez un tetrix, no se! es lo de menos, y conforme vez q algo es basico (como los sprites x ejemplo, durante años lei hablar de ellos y nunka entendi apropiadamente su concepto hasta q hice mi primer juego :S) y lo apuntas para tu "motor" o en ese momento lo incorporas a el, cosa q al terminar tu primer juego tendras tambien las bases de tu engine o motor, con esas bases sera mas facil hacer tu segundo juego o posteriores versiones del primero.
Asi como se te hara mas facil hacer el segundo juego, iras descubriendo nuevas necesidades q tu motor de juegos debe cubrir... y asi y asi conforme avanzas en tus juegos vas desarrollando un motor de tal calidad como tu mejor juego o tal vez superior xD.

Imagina si planeas ahora tu motor de juegos, al escribir tu primer juego empezaras a notar las fallas en tu motor y conforme hagas mas juegos iras alterando y alterando tu motor por errores q se cometieron solo por el hecho de construir el motor basado solo en lo que "crees q necesita un juego", osea basado en la teoria de alguien que nunka la sufrio para hacer un juego "jugable".

Has como te dige, ve primero x el juego, adkiere experiencia, guardala en tu diseño de motor y reutilizala para facilitar la construccion de tus futuros juegos.
Espero q te haya servido mi humilde consejo :D

Y si tienen algun proyecto, pasenme la voz!!! jeje Vamos a sacarle bits a ese codigo!!!
Carlos Guevara Moscol
 
Mensajes: 26
Registrado: Vie Feb 29, 2008 10:32 pm
Ubicación: Perú

Notapor lucesita » Mié Mar 12, 2008 2:52 pm

lucesita
 
Mensajes: 57
Registrado: Mié Mar 12, 2008 2:49 pm

El de García Serrano xD

Notapor Carlos Guevara Moscol » Mié Mar 12, 2008 3:15 pm

Claro, ese libro es un muy buen comienzo para kien se inicia en el mundo de la programacion de videojuegos, si no me equivoco del sitio web de García (autor del libro) se podia descargar tambien los codigos fuente de cada uno de los ejemplos q el implementa a lo largo del libro, es realmente bueno y facil de entender, pero solo para empezar... puesto q no es muy tecnico y todo el libro se orienta a hacer un tipo de juego en especifico, no lo estoy maleteando, es perfecto para iniciarse e incluso presenta la ventaja de ser de los pocos libros "entendibles" de SDL q existen en español :D:D

A todo esto, hace poco vi un nuevo post donde se presenta un libro mas amplio de SDL, mas completo y consiso, q abarca incluso a la dichosa libreria SDL_net (usada para conectar dentro de una red PC´s ya sea en protocolo TCP o UDP xD)
Aparte q esta respaldada no solo x un profesor universitario especialista en el tema sino tmb x sus alumnos y el prestigio de la universidad misma..

No pretendo con esto kitar merito a García, sino como dijo Lucesita, es realmente el mejor "puntapie inicial" (aunq volviendo al tema de este post, no esta orientado a hacer un engine en si.. sino un juego basico).

Lo q yo recomiendo es empezar con el libro de García y continuar profundizando con el libro este q les menciono xD

Aka les dejo el link : http://www.losersjuegos.com.ar/foro/viewtopic.php?t=253
si no dan con el pueden buscarlo en " Índice de LosersJuegos -> Artículos, traducciones y documentación" el post es "Nuevo (y muy muy completo) tutorial de videojuegos con SDL"

PD: este libro tampoco fue echo con el fin d enseñar a hacer engines, :D pero si vas a leer el de García, como ya he dicho y no me aburro de repetir, no hay nada mejor q profundizar con este :D

Espero te ayude, Nos vemos..

y gente, apuntense para el proyecto del amigo martin, yo lo veo muy interesante xD
http://www.losersjuegos.com.ar/foro/viewtopic.php?t=123
Carlos Guevara Moscol
 
Mensajes: 26
Registrado: Vie Feb 29, 2008 10:32 pm
Ubicación: Perú

Yo estoy en eso...

Notapor kittie4man » Jue Mar 13, 2008 3:28 pm

Hola a todos!!

Yo estoy haciendo algo parecido desde hace poco.
Estoy diseñando clases que faciliten el uso en otro juego que se me ocurra desarrollar.
Mi idea era, no tener que reescribir por ejemplo, el método que inicia el sdl, o algún método para escribir texto (todavía no uso la librería ttf_sdl o algo así para manejo de texto), etc.
Por eso, hice una clase (llamada cEngine) que hace este tipo de cosas.


Código: Seleccionar todo
static cEngine* GetInstance ();

int init();

void setQuitState(bool state);
bool getQuitState();
void setUpdateRect(int x, int y, int h, int w);
void setCaption(const char* title);
bool getMinimized();

void drawText(int x, int y, const char* texto);
void drawText(int x, int y, const char* texto, int r, int g, int b);
void drawText(int x, int y, const char* texto, TTF_Font *pfuente);
void drawText(int x, int y, const char* texto, TTF_Font *pfuente, int r, int g, int b);

void render();
void clear();
void flip();

static SDL_Surface* load_image(std::string filename);
void apply_surface( int x, int y, SDL_Surface *source);
void apply_surface( int x, int y, SDL_Surface *source, int px, int py, int ph, int pw);
void apply_surface( int x, int y, SDL_Surface *source, SDL_Rect srcRect);
void apply_surface( SDL_Surface *source, SDL_Rect srcRect, SDL_Rect dstRect);


Tengo pensado implementarle nuevos métodos como lo utilizados para el input (mouse, teclado, etc), básicamente encapsular todo lo mas posible.

Mi idea no era crear un engine para vender si no, un engine que me sirviera para que, en un proximo proyecto utilizar solo 2 archivos (engine.cpp y engine.h) y un para de lineas para comenzar el modo grafico:
Código: Seleccionar todo
engine->init();
engine->setCaption("..:: bloquestravaganza ::..");


El resto de las clases (personaje, etc) podrian hacerse genericas o no, seria lo de menos (en mi idea original).

En fin, no me parece una idea descabellada sino pretenden hacer algo super complejo.

Salu2
Juan Pablo
kittie4man
 
Mensajes: 10
Registrado: Vie Dic 28, 2007 7:23 pm
Ubicación: Uuuuuuuuuuuuuuuuunoooooo!!

Notapor carlostex » Mar Jul 14, 2009 4:37 am

Hola, bueno pues este es mi primer post en este foro, no soy de estar inscrito en cientos de foros pero este me parecio interesante.
Bueno, a lo que voy...
Aveses es bueno basarse de programas o juegos ya echos, pero cuando se dan los primeros pasos ay que andar lento, y comenzar con lo mas cencillo, incluso te recomendaria que escribas un juego tipo pac-man o snake para consola, eso te va a dar una idea de las cosas que se requieren para hacer un videojuego, luego ya entrale a una api como sdl, y haz pequeños programas para que veas como se implementan, es decir, leete un libro arriba te diero un link de un libro muy bueno(programacion con sdl), de echo yo lo tengo impreso, y has los ejemplos, el mismo libro trae una clase muy cencilla, pero es una muy buena base para un motor.
ya que tengas experiencia y que allas creado marios juegos, te vas a dar cuenta del comun denominador de los videojuegos y vas a tener una idea mas clara de lo que requiere un motor para videojuego.
actualmente estoy escribiendo un juego de tanques, donde aplico los conocimientos del libro antes mencionado, si alguien esta interesado mandeme un mail, y le mando el codigo fuente, para que lo mejore o aga lo que quiera
Avatar de Usuario
carlostex
 
Mensajes: 249
Registrado: Mar Jul 14, 2009 4:13 am
Ubicación: mexico


Volver a Videojuegos

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado

cron