User Tag List

Página 1 de 2 12 ÚltimoÚltimo
Resultados 1 al 15 de 24

Tema: Programación de un juego en C++ (2/11)

  1. #1

    Fecha de ingreso
    Jun 2004
    Ubicación
    Pinto (MADRID)
    Mensajes
    959
    Mencionado
    5 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    3
    Agradecer Thanks Received 
    76
    Thanked in
    Agradecido 55 veces en [ARG:2 UNDEFINED] posts

    Programación de un juego en C++ (2/11)

    2. ESTRUCTURA

    Tenéis el proyecto en: Tutorial de programación c++ (2/11)

    Lo que definirá la dificultad de programar un videojuego es la primera estructura que le das al código. Si está bien planteado, programarlo será cosa de niños, pero si has ido escribiendo las cosas según se te ocurrían, te verás en el mismísimo infierno.

    No te preocupes porque nos ha pasado a todos. A nuestro juego del Batiscafo le vamos a dar una estructura que de un primer vistazo te explica claramente dónde están todas las cosas, y en qué sitios puedes meter mano.

    Antes de pasar al código vamos a pensarlo en esquema. Nuestro programa tendrá 3 modos de funcionamiento: modo MENU, modo JUEGO y modo PAUSA. En cada uno de esos modos nuestro programa reacciona de forma diferente y muestra en pantalla cosas diferentes.

    Cada uno de esos modos utilizará 3 funciones: una para comprobar los botones, otra para actualizar lo que se muestra en pantalla y otra para dibujar en pantalla.

    Podemos resumirlo así:

    Código:
    BUCLE PRINCIPAL
    {
      SI MODO==MENU
        Leer_botones_menu();
        Actualizar_menu();
        Dibujar_menu();
    
      SI MODO==JUEGO
        Leer_botones_juego();
        Actualizar_juego();
        Dibujar_juego();
    
      SI MODO==PAUSA
        Leer_botones_pausa();
        Actualizar_pausa();
        Dibujar_pausa();
    }
    ¿Para qué nos sirve esto? Para dejar cada cosa en su sitio. En la función Leer_botones_juego() sólo tendremos el chequeo de los botones y las acciones que produce cada pulsación. En Actualizar_juego() sólo estarán los procesos que hacen que el juego funcione: colisiones con paredes, toques con bichos, gravedad, etc... Y en Dibujar_juego() única y exclusivamente se dibuja todo lo que aparece en el desarrollo normal del juego.

    A veces, cuando estás dibujando los bichos es muy fácil pensar en hacer las comprobaciones de colisiones. ¡Eso sería un error! Al final tendrías código desperdigado haciendo cosas en lugares diferentes. Si hay que comprobar un evento de juego, hay que meter sólo en Actualizar_juego(). Esto es esencial a la hora de buscar un error, y hay que acostumbrarse a no mezclar cosas (repito: todos lo hemos hecho alguna vez).

    Veamos qué cambios hay en main.cpp.

    Código:
    ///////////////////////////////////
    /*  Modo de programa             */
    ///////////////////////////////////
    #define PROGRAM_MODE_MENU   1
    #define PROGRAM_MODE_GAME   2
    #define PROGRAM_MODE_PAUSE  3
    Lo primero que hemos metidos son las 3 constantes que definirán en qué modo se encuentra nuestro juego.

    Código:
    ///////////////////////////////////
    /*  Variables globales           */
    ///////////////////////////////////
    int program_mode=PROGRAM_MODE_MENU;
    En la parte de las variables globales hemos añadido una nueva: program_mode. Esta nos indicará el modo actual del juego para que podamos llamar a las funciones de cada modo. La iniciamos a PROGRAM_MODE_MENU, porque lo primero que veremos será el menú.

    Código:
    void read_menu_keys()
    {
      SDL_Event event;
      // Comprueba los eventos de botones
      while (SDL_PollEvent(&event))
      {
        switch (event.jbutton.button)
        {
        case GP2X_BUTTON_START:
          done=1;
          break;
        }
      }
    }
    
    void draw_menu()
    {
    }
    
    void update_menu()
    {
      read_menu_keys();
      draw_menu();
    }
    Estas son las tres funciones del modo menú. En read_menu_keys() meteremos un bucle para leer todos los eventos del joystick. Si pulsamos el botón MENU saldremos del juego poniendo la variable done=1. Es exactamente lo mismo que el bucle principal del tutorial 1, sólo que esta vez lo hemos metido en una función propia.

    draw_menu(); dibujará las opciones del menú y por ahora lo dejamos en blanco.

    update_menu(); es la función principal del modo MENU. Desde ahí leeremos las pulsaciones de botones, cambiaremos la selección del menú y lo dibujaremos en pantalla. Por ahora sólo llamaremos a las funciones read_menu_keys() y draw_menu().

    Código:
    void read_game_keys()
    {
      SDL_Event event;
      // Comprueba los eventos de botones
      while (SDL_PollEvent(&event))
      {
        switch (event.jbutton.button)
        {
        case GP2X_BUTTON_START:
          done=1;
          break;
        }
      }
    }
    
    void draw_game()
    {
    }
    
    void update_game()
    {
      read_game_keys();
      draw_game();
    }
    Las funciones del modo juego son exactamente iguales. La diferencia es que el menú dibujará en pantalla varias opciones de texto, como Jugar, Salir, etc... y el juego dibujará nuestra nave, los bichos...

    Código:
    void read_pause_keys()
    {
      SDL_Event event;
      // Comprueba los eventos de botones
      while (SDL_PollEvent(&event))
      {
        switch (event.jbutton.button)
        {
        case GP2X_BUTTON_START:
          done=1;
          break;
        }
      }
    }
    
    void draw_pause()
    {
    }
    
    void update_pause()
    {
      read_pause_keys();
      draw_pause();
    }
    Y las 3 funciones del modo pausa, totalmente clavadas a las anteriores. Con estas funciones el bucle principal del programa va a sufrir un cambio que lo dejará un poco más claro de entender. El resto de la funcion main() permanece igual.

    Código:
      while (!done)
      {
        switch (program_mode)
        {
        case PROGRAM_MODE_MENU:
          update_menu();
          break;
        case PROGRAM_MODE_GAME:
          update_game();
          break;
        case PROGRAM_MODE_PAUSE:
          update_pause();
          break;
        }
    
        SDL_FillRect(screen, NULL, 0x000000);
        SDL_Flip(screen);
      }
    Como veis, lo que hacemos en el bucle principal es comprobar en qué modo estamos. Si estamos en modo menu llamamos a la función update_menu(), si estamos en modo juego llamamos a la función update_game() y si estamos en modo pausa llamamos a update_pausa(). La función apropiada dibujará en pantalla lo que toque y con SDL_Flip() se mostrará en pantalla.

    Ahora mismo seguirá dibujándose en negro, pero eso lo cambiaremos en el tutorial número 3.

  2. #2

    Fecha de ingreso
    Feb 2004
    Ubicación
    Madrid
    Mensajes
    22,561
    Mencionado
    202 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    2,100
    Agradecer Thanks Received 
    1,671
    Thanked in
    Agradecido 1,073 veces en [ARG:2 UNDEFINED] posts
    Sólo un apunte/curiosidad por mi parte. Por qué no usas objetos? Si estás usando C++ aprovechate de las ventajas de POO xD

    Yo por ejemplo lo que hago es a parte de dividir como has hecho tú, además tengo una clase Scene, que es abstracta, de la que heredan MenuScene, OptionsScene, GamePlayScene, etc (las que sean).

    Además suelo tener un GameManager que es una instancia singleton del juego en sí y que se encarga de tener la escena en la que estamos y manejar el resto de handlers (para el update, los eventos y demás, como lo tienes tú).

    Con esto no digo que tu código esté mal, al contrario tu tutorial es muy bueno ^^ Mucho mejor que el resto de los que leí en su día XD Sólo era un apunte por mi parte, por debatir un poco el "esqueleto" de los juegos.

  3. #3

    Fecha de ingreso
    Jun 2004
    Ubicación
    Vivo en el pito foro...
    Mensajes
    20,601
    Mencionado
    63 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    166
    Agradecer Thanks Received 
    649
    Thanked in
    Agradecido 406 veces en [ARG:2 UNDEFINED] posts
    Entradas de blog
    28
    Este tema me interesa, seguid contando.

  4. #4

    Fecha de ingreso
    Feb 2005
    Ubicación
    Malaga
    Mensajes
    4,472
    Mencionado
    53 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    1,294
    Agradecer Thanks Received 
    551
    Thanked in
    Agradecido 316 veces en [ARG:2 UNDEFINED] posts
    Entradas de blog
    5
    Cita Iniciado por ^MiSaTo^ Ver mensaje
    Sólo un apunte/curiosidad por mi parte. Por qué no usas objetos? Si estás usando C++ aprovechate de las ventajas de POO xD

    Yo por ejemplo lo que hago es a parte de dividir como has hecho tú, además tengo una clase Scene, que es abstracta, de la que heredan MenuScene, OptionsScene, GamePlayScene, etc (las que sean).

    Además suelo tener un GameManager que es una instancia singleton del juego en sí y que se encarga de tener la escena en la que estamos y manejar el resto de handlers (para el update, los eventos y demás, como lo tienes tú).

    Con esto no digo que tu código esté mal, al contrario tu tutorial es muy bueno ^^ Mucho mejor que el resto de los que leí en su día XD Sólo era un apunte por mi parte, por debatir un poco el "esqueleto" de los juegos.
    Supongo que es porque la programacion tradicional "entra" mejor en la mente de gente "profana" que la POO (porque estos tutos van dirigidos a gente con conocimientos nulos o casi nulos de algoritmia, no??)
    Para entender la POO hay que tener un grado de abstracción que mucha gente no tiene desarrollado.

    Por su puesto lo que acabo de comentar es siempre desde mi experiencia personal.

    Un saludo

  5. #5

    Fecha de ingreso
    Jun 2004
    Ubicación
    Vivo en el pito foro...
    Mensajes
    20,601
    Mencionado
    63 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    166
    Agradecer Thanks Received 
    649
    Thanked in
    Agradecido 406 veces en [ARG:2 UNDEFINED] posts
    Entradas de blog
    28
    Cita Iniciado por Karkayu Ver mensaje
    Supongo que es porque la programacion tradicional "entra" mejor en la mente de gente "profana" que la POO (porque estos tutos van dirigidos a gente con conocimientos nulos o casi nulos de algoritmia, no??)
    Para entender la POO hay que tener un grado de abstracción que mucha gente no tiene desarrollado.

    Por su puesto lo que acabo de comentar es siempre desde mi experiencia personal.

    Un saludo
    No tiene por que, yo soy pro POO 200% pero lo leo para ver cómo se hace el juego en si, la división en "escenas" que hace misato, etc...porque los míos no acaban de salir del todo fluídos. Ahora mismo estoy con otros dos n00bs en uno en Allegro y no somos capaces ni de pintar un sprite sin errores, estamos haciéndolo todo con primitivas.

  6. #6

    Fecha de ingreso
    Feb 2004
    Ubicación
    Madrid
    Mensajes
    22,561
    Mencionado
    202 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    2,100
    Agradecer Thanks Received 
    1,671
    Thanked in
    Agradecido 1,073 veces en [ARG:2 UNDEFINED] posts
    Cita Iniciado por Karkayu Ver mensaje
    Supongo que es porque la programacion tradicional "entra" mejor en la mente de gente "profana" que la POO (porque estos tutos van dirigidos a gente con conocimientos nulos o casi nulos de algoritmia, no??)
    Para entender la POO hay que tener un grado de abstracción que mucha gente no tiene desarrollado.

    Por su puesto lo que acabo de comentar es siempre desde mi experiencia personal.

    Un saludo
    Yo lo preguntaba porque si uso C++ uso objetos, sino uso C. No me gusta "guarrear", no se.

    Aparte, adoro la POO XD Reconozco que en su día me costó un huevo entenderlo pero jue, menudo avance una vez que lo entiendes
    < - >
    Cita Iniciado por pakoito Ver mensaje
    No tiene por que, yo soy pro POO 200% pero lo leo para ver cómo se hace el juego en si, la división en "escenas" que hace misato, etc...
    Hombre mi división se puede hacer en estructurada, en POO o en lo que te de la gana
    Y por supuesto no es la panacea, por eso quería debatirlo ^^
    Última edición por ^MiSaTo^; 09/10/2010 a las 14:55 Razón: Edición automática anti doble-post.

  7. #7

    Fecha de ingreso
    Feb 2005
    Ubicación
    Malaga
    Mensajes
    4,472
    Mencionado
    53 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    1,294
    Agradecer Thanks Received 
    551
    Thanked in
    Agradecido 316 veces en [ARG:2 UNDEFINED] posts
    Entradas de blog
    5
    Cita Iniciado por ^MiSaTo^ Ver mensaje

    Aparte, adoro la POO XD Reconozco que en su día me costó un huevo entenderlo pero jue, menudo avance una vez que lo entiendes
    < - >


    Hombre mi división se puede hacer en estructurada, en POO o en lo que te de la gana
    Y por supuesto no es la panacea, por eso quería debatirlo ^^
    Si yo tambien lo haria usando clases y POO. Queda todo mas "ordenadito"
    Tan solo estoy intentando adivinar por qué el compañero saboteur lo esta haciendo asi. Nada mas.
    < - >
    Cita Iniciado por pakoito Ver mensaje
    No tiene por que, yo soy pro POO 200% pero lo leo para ver cómo se hace el juego en si, la división en "escenas" que hace misato, etc...porque los míos no acaban de salir del todo fluídos. Ahora mismo estoy con otros dos n00bs en uno en Allegro y no somos capaces ni de pintar un sprite sin errores, estamos haciéndolo todo con primitivas.
    Yo hablo desde mi experiencia como profesor de programación en general. A MI me ha costado siempre mas que la gente entienda la POO que la programación secuencial.
    Sera que soy malo explicando
    Última edición por Karkayu; 09/10/2010 a las 15:09 Razón: Edición automática anti doble-post.

  8. #8

    Fecha de ingreso
    Feb 2004
    Ubicación
    Madrid
    Mensajes
    22,561
    Mencionado
    202 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    2,100
    Agradecer Thanks Received 
    1,671
    Thanked in
    Agradecido 1,073 veces en [ARG:2 UNDEFINED] posts
    Cita Iniciado por Karkayu Ver mensaje
    Yo hablo desde mi experiencia como profesor de programación en general. A MI me ha costado siempre mas que la gente entienda la programación secuencial que la POO.
    Sera que soy malo explicando
    En serio? a mi personalemente me costó entender POO. Aunque claro, supongo que es porque mi cabeza la tenía ya "cuadrada" a la programación estructurada (o secuencial) y cambiar la manera de pensar cuesta

  9. #9

    Fecha de ingreso
    Feb 2005
    Ubicación
    Malaga
    Mensajes
    4,472
    Mencionado
    53 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    1,294
    Agradecer Thanks Received 
    551
    Thanked in
    Agradecido 316 veces en [ARG:2 UNDEFINED] posts
    Entradas de blog
    5
    Cita Iniciado por ^MiSaTo^ Ver mensaje
    En serio? a mi personalemente me costó entender POO. Aunque claro, supongo que es porque mi cabeza la tenía ya "cuadrada" a la programación estructurada (o secuencial) y cambiar la manera de pensar cuesta
    Espera espera!!! Que lo he puesto mal!!

    Cita Iniciado por Karkayu Ver mensaje

    Yo hablo desde mi experiencia como profesor de programación en general. A MI me ha costado siempre mas que la gente entienda la POO que la programación secuencial.
    Fixed!!
    Última edición por Karkayu; 09/10/2010 a las 15:09

  10. #10

    Fecha de ingreso
    Feb 2004
    Ubicación
    Madrid
    Mensajes
    22,561
    Mencionado
    202 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    2,100
    Agradecer Thanks Received 
    1,671
    Thanked in
    Agradecido 1,073 veces en [ARG:2 UNDEFINED] posts
    Cita Iniciado por Karkayu Ver mensaje
    Espera espera!!! Que lo he puesto mal!!



    Fixed!!
    JAJAJA xDDD

  11. #11

    Fecha de ingreso
    Jun 2004
    Ubicación
    Valencia
    Mensajes
    2,133
    Mencionado
    33 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    11
    Agradecer Thanks Received 
    102
    Thanked in
    Agradecido 57 veces en [ARG:2 UNDEFINED] posts
    Interesante debate, lastima que no tenga conocimientos para compartir porque siempre es bueno ver como lo hacen los demas para aprender cosas nuevas

  12. #12

    Fecha de ingreso
    Feb 2004
    Ubicación
    Madrid
    Mensajes
    22,561
    Mencionado
    202 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    2,100
    Agradecer Thanks Received 
    1,671
    Thanked in
    Agradecido 1,073 veces en [ARG:2 UNDEFINED] posts
    Cita Iniciado por Eskema Ver mensaje
    Interesante debate, lastima que no tenga conocimientos para compartir porque siempre es bueno ver como lo hacen los demas para aprender cosas nuevas
    Tú también haces juegos asíque por supuesto que tienes conocimientos para compartir

    Yo tampoco me considero experta y fijo que aquí hay gente que sabe mucho más. Pero todos podemos aportar

  13. #13

    Fecha de ingreso
    Jun 2004
    Ubicación
    Valencia
    Mensajes
    2,133
    Mencionado
    33 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    11
    Agradecer Thanks Received 
    102
    Thanked in
    Agradecido 57 veces en [ARG:2 UNDEFINED] posts
    Lo dudo mucho, si mis conocimientos fueran aceptables, alguien habria usado mis fuentes y los habria modificado para hacer algo, cosa que no ha ocurrido nunca. Asi que deben ser muy malos mis fuentes lo cual afirma mi teoria de que no tengo conocimientos que valgan la pena para compartir.
    Yo he usado mucho codigo de otras personas que luego he modificado y he aprendido mucho al respecto, pero las comparaciones son siempre odiosas y salgo perdiendo

  14. #14

    Fecha de ingreso
    Jun 2004
    Ubicación
    Pinto (MADRID)
    Mensajes
    959
    Mencionado
    5 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    3
    Agradecer Thanks Received 
    76
    Thanked in
    Agradecido 55 veces en [ARG:2 UNDEFINED] posts
    Cita Iniciado por ^MiSaTo^ Ver mensaje
    Sólo un apunte/curiosidad por mi parte. Por qué no usas objetos? Si estás usando C++ aprovechate de las ventajas de POO xD

    Yo por ejemplo lo que hago es a parte de dividir como has hecho tú, además tengo una clase Scene, que es abstracta, de la que heredan MenuScene, OptionsScene, GamePlayScene, etc (las que sean).

    Además suelo tener un GameManager que es una instancia singleton del juego en sí y que se encarga de tener la escena en la que estamos y manejar el resto de handlers (para el update, los eventos y demás, como lo tienes tú).

    Con esto no digo que tu código esté mal, al contrario tu tutorial es muy bueno ^^ Mucho mejor que el resto de los que leí en su día XD Sólo era un apunte por mi parte, por debatir un poco el "esqueleto" de los juegos.
    Más o menos pretendía esto mismo. Lo que quería era explicar la forma de estructurar de una forma sencilla sabiendo que a la gente le suele costar la POO. Y de paso dar pie a la gente a debatir formas de hacerlo mejor. Vamos, que deberías haber puesto el esqueleto del código.

    Lo que quiero es que la gente piense PRIMERO en: ¿Qué pasos debo seguir?, porque si lo hace así y los desarrolla uno a uno, las cosas salen muy rápido. Me parece que es lo esencial... más que programar.

    En las siguientes lecciones también he metido cosas muy básicas pero que dan pie a la gente a pensar como mejorarlas... de hecho, pretendo que la gente lo toquetee y mejore mucho. Ten en cuenta que el juego es muy pequeño, y poner una clase base para los personajes, heredar otra para los bichos, otra para el protagonista, una especial para los efectos, etc... lo mismo empieza a desesperar a la gente. Creo que eso lo podemos dejar para un nivel más avanzado, ¿no?

    Pero vamos, que he visto cosas como esta y aún es pronto para los novatos de Wiz:

    Código:
    int main()
    {
      SoccerGame mygame;
    
      mygame.run();
      return 1;
    }
    Y sobre todo... ¡que a nadie le de miedo programar! Programar es divertido tanto si se hace bien como si se hace mal, y hacerlo bien es sólo cuestión de tiempo.
    < - >
    Cita Iniciado por Eskema Ver mensaje
    Lo dudo mucho, si mis conocimientos fueran aceptables, alguien habria usado mis fuentes y los habria modificado para hacer algo, cosa que no ha ocurrido nunca. Asi que deben ser muy malos mis fuentes lo cual afirma mi teoria de que no tengo conocimientos que valgan la pena para compartir.
    Yo he usado mucho codigo de otras personas que luego he modificado y he aprendido mucho al respecto, pero las comparaciones son siempre odiosas y salgo perdiendo
    Estoy con Misato, si haces juegos puedes aportar cosas. No tienes que ser John Carmack...
    Última edición por saboteur; 09/10/2010 a las 16:59 Razón: Edición automática anti doble-post.

  15. #15

    Fecha de ingreso
    Feb 2004
    Ubicación
    Madrid
    Mensajes
    22,561
    Mencionado
    202 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    2,100
    Agradecer Thanks Received 
    1,671
    Thanked in
    Agradecido 1,073 veces en [ARG:2 UNDEFINED] posts
    Cita Iniciado por Eskema Ver mensaje
    Lo dudo mucho, si mis conocimientos fueran aceptables, alguien habria usado mis fuentes y los habria modificado para hacer algo, cosa que no ha ocurrido nunca. Asi que deben ser muy malos mis fuentes lo cual afirma mi teoria de que no tengo conocimientos que valgan la pena para compartir.
    Yo he usado mucho codigo de otras personas que luego he modificado y he aprendido mucho al respecto, pero las comparaciones son siempre odiosas y salgo perdiendo
    No te menosprecies Yo tb hay mucho código que no reutilizo, porque lo miro al tiempo y digo: ESTO ES UNA MIERDA.

    En esta "profesión" o "hobby" no se puede parar de aprender cosas, asíque es imposible que ninguno tengamos la sabiduría universal xD

    Lo que sí es interesante y bonito es compartir lo que cada uno sepa para aprender entre todos. Por ejemplo yo de OpenGL ES se muy poco, fijo que de eso sabes tú mucho más. Y ya de motores 3D pues ni idea xD

    Cita Iniciado por saboteur Ver mensaje
    Más o menos pretendía esto mismo. Lo que quería era explicar la forma de estructurar de una forma sencilla sabiendo que a la gente le suele costar la POO. Y de paso dar pie a la gente a debatir formas de hacerlo mejor. Vamos, que deberías haber puesto el esqueleto del código.

    Lo que quiero es que la gente piense PRIMERO en: ¿Qué pasos debo seguir?, porque si lo hace así y los desarrolla uno a uno, las cosas salen muy rápido. Me parece que es lo esencial... más que programar.

    En las siguientes lecciones también he metido cosas muy básicas pero que dan pie a la gente a pensar como mejorarlas... de hecho, pretendo que la gente lo toquetee y mejore mucho. Ten en cuenta que el juego es muy pequeño, y poner una clase base para los personajes, heredar otra para los bichos, otra para el protagonista, una especial para los efectos, etc... lo mismo empieza a desesperar a la gente. Creo que eso lo podemos dejar para un nivel más avanzado, ¿no?

    Pero vamos, que he visto cosas como esta y aún es pronto para los novatos de Wiz:

    Código:
    int main()
    {
      SoccerGame mygame;
    
      mygame.run();
      return 1;
    }
    Y sobre todo... ¡que a nadie le de miedo programar! Programar es divertido tanto si se hace bien como si se hace mal, y hacerlo bien es sólo cuestión de tiempo.
    No quería criticar tu tutorial en absoluto, perdón si se me ha malinterpretado. Sólo era por abrir un debate que puede ser interesante
    Mi código se parece bastante a lo último que has pegado xD

Página 1 de 2 12 ÚltimoÚltimo

Permisos de publicación

  • No puedes crear nuevos temas
  • No puedes responder temas
  • No puedes subir archivos adjuntos
  • No puedes editar tus mensajes
  •