[C++] ¿Programación modular?

Primero, pongo el título entre interrograciones porque no sé si ese es el nombre que se le dá a lo que busco.
He acabado desesperado con un programa (Jueguecillo estilo Mario), justo después de intentar una cosa y cargarme diez que había hecho antes, todo por culpa de la mala organización.
He visto unos cuantos sources, y todo el mundo separa el código en archivos, uno con código y otro de extensión .h que enlaza de alguna manera todo. Pero por mucho que busco (E intento copiar lo que hace otra gente con sus códigos) soy incapaz de separar cualquier cosa en archivos diferentes, y que compile.
¿Cómo tengo que hacerlo? Estoy desesperado ya...

Muchas gracias adelantadas.

¡Un saludo!
Supongo que te refieres a separar por un lado el programa principal, en otro por ejemplo las funciones... es crearte tus propias bibliotecas y cabeceras y llamarlas como cualquier función, por ejemplo para llamar al printf has tenido que declarar antes el stdio.h que es donde esta la función..., nose si sera a eso a lo que te refieres.
luciferfran escribió:Supongo que te refieres a separar por un lado el programa principal, en otro por ejemplo las funciones... es crearte tus propias bibliotecas y cabeceras y llamarlas como cualquier función, por ejemplo para llamar al printf has tenido que declarar antes el stdio.h que es donde esta la función..., nose si sera a eso a lo que te refieres.

Exactamente eso es lo que quiero, pero no sé por dónde empezar siquiera...

En este caso es un código tan simple que no merece la pena separarlo, pero lo único que intento es que me funcione con algo pequeño, para evitar complicaciones. El código mueve una @ por la pantalla según presiones las teclas de dirección. Usa una librería, allegro, pero creo que se entiende bastante bien sin conocerla.

main.cpp
#include <allegro.h> //librería citada
#include "mover.h" //archivo header

int main(){
   
   
    allegro_init();
    install_keyboard();                                               //necesario para que funcione allegro
    set_gfx_mode(GFX_AUTODETECT, 1024, 600, 0, 0);
   
   
    while(!key[KEY_ESC])  //bucle del programa
    {
        clear_keybuf();      //borra el buffer de teclas pulsadas
        acquire_screen(); //toma el control de la pantalla
       
        mover(); //la función
       
        release_screen();  //deja la pantalla
       
        rest(1); //espera
    }
       
    return 0;

   
}
END_OF_MAIN();


mover.cpp
//se explica por si mismo
#include <allegro.h>
#include "mover.h"

void mover()
{
    if(key[KEY_UP]) y--;
    else if(key[KEY_DOWN]) y++;
    else if(key[KEY_RIGHT]) x++;
    else if(key[KEY_LEFT]) x--;   
    textout_ex(screen, font, "@", x, y, makecol(255, 255, 255), makecol(0, 0, 0)); //imprime texto
}


mover.h
#ifndef gf_included_ball_h
#define gf_included_ball_h   //no tengo ni idea de qué hace esto, intentaba copiar un código

void mover();

#endif


Están los tres archivos en la misma carpeta y en el mismo proyecto (Uso Dev-C++). Pero no me quiere compilar, me da siempre errores de las variables x e y que, como se ve, ahora mismo no están inicializadas (Porque me dá error). Si las declaro en el .h "multiple definition of 'x'"; en el mover.cpp, lo mismo; y en el main.cpp, me sale error cuando las uso, porque dice que no están declaradas.
Aclarar que el programa funciona bien sin intentar separarlo...
A ver, #ifndef etc, lo que hace es no volver a meter las cabeceras si ya se han incluido anteriormente, de forma que si declaras x e y en el .h no debería darte esos problemas de definiciones múltiples.

Puesto que dices que no te funciona y como solución alternativa, te diré que puedes hacer lo siguiente:
declara e inicializa x e y como variables en el main.cpp y pásaselas por referencia a la función mover.

Un saludo!
Buscate algún manual de C++, todos deberían tocar programación orientada a objetos que es lo que buscas.
4 respuestas