Foros del Web » Programación para mayores de 30 ;) » C/C++ »

[SOLUCIONADO] Unión de dos menús o programas

Estas en el tema de Unión de dos menús o programas en el foro de C/C++ en Foros del Web. Hola, pues ya para concluir con el menú que ando haciendo necesito aprender una ultima cosa; como hago para unir una interfaz controlada por mouse ...
  #1 (permalink)  
Antiguo 24/05/2015, 12:24
Avatar de Jose_A  
Fecha de Ingreso: mayo-2015
Ubicación: México, Sonora.
Mensajes: 180
Antigüedad: 8 años, 10 meses
Puntos: 0
Unión de dos menús o programas

Hola, pues ya para concluir con el menú que ando haciendo necesito aprender una ultima cosa; como hago para unir una interfaz controlada por mouse que es esta:
https://mega.co.nz/#!GJBQwBzD!9UN1jYozXJQk1tTC9OlcS8YTiXVciGO4mzLt-AHpMPg

con otro programa aparte (se hicieron por separado y ahora no se como juntarlos xD) que son las opciones del menú manejado por teclado:
https://mega.co.nz/#!aQBVHThY!6mdOZvewqk-rWZM0KlmmyQ5SK_CpKkeohnt3wYtg8Bo

intenté juntar ambos pero no fue posible, en ocasiones o un fondo se veía y el otro no o aparecía en negro o simplemente no cargaba el programa, no se si es porque en uno uso el mouse y en el otro el teclado. Como podria unirlos?, que al dar click en jugar del primer programa me mande al otro?, gracias..
  #2 (permalink)  
Antiguo 24/05/2015, 22:58
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 10 años, 6 meses
Puntos: 38
Respuesta: Unión de dos menús o programas

Código C++:
Ver original
  1. #include <stdio.h>
  2. #include <allegro.h>
  3. #include <cstdlib>
  4. #include <iostream>
  5. #include <time.h>
  6. using namespace std;
  7.  
  8. #define ROJO 0x1AA9D1
  9. #define GRIS 0x333333
  10. #define BLANCO 0xFFFFFF
  11.  
  12.  
  13. inline void iniciarSistemas(int ANCHO, int ALTO){
  14.     allegro_init(); //Inicia la librería Allegro
  15.     install_keyboard(); //Instala el controlador de interrupciones de teclado de Allegro
  16.     set_color_depth(32); //Establece el formato de píxel para ser utilizado por las llamadas posteriores.
  17.     set_gfx_mode(GFX_AUTODETECT_WINDOWED, ANCHO, ALTO, 0, 0); //Pixeles utilizados
  18.     install_mouse(); // Para usar el ratón
  19. }
  20.  
  21.  
  22. int main() {
  23.     iniciarSistemas(800, 531);
  24.    
  25.     BITMAP *buffer = create_bitmap ( 800, 531 );
  26.     BITMAP *cursor = load_bitmap ( "cursor.bmp", NULL );
  27.     //escena1
  28.     BITMAP *escena1Fondo = load_bitmap ( "escena1fondo.bmp", NULL );
  29.     BITMAP *escena1Jugar = load_bitmap ( "escena1jugar.bmp", NULL );
  30.     BITMAP *escena1Salir = load_bitmap ( "escena1salir.bmp", NULL );
  31.     //otras escenas
  32.     BITMAP *menu          = load_bitmap ( "escena2menu.bmp", NULL );
  33.     BITMAP *instrucciones = load_bitmap ( "escena3instrucciones.bmp", NULL );
  34.     BITMAP *creditos      = load_bitmap ( "escena4creditos.bmp", NULL );
  35.  
  36.     if (buffer == NULL || escena1Fondo == NULL || escena1Jugar == NULL || escena1Salir == NULL ||
  37.         menu == NULL || instrucciones == NULL || creditos == NULL || cursor == NULL ) {
  38.         cout << "ERROR al cargar alguna de las imagenes" << endl;
  39.         destroy_bitmap ( buffer );
  40.         destroy_bitmap ( cursor );
  41.         destroy_bitmap ( escena1Fondo );
  42.         destroy_bitmap ( escena1Jugar );
  43.         destroy_bitmap ( escena1Salir );
  44.         destroy_bitmap ( menu );
  45.         destroy_bitmap ( instrucciones);
  46.         destroy_bitmap ( creditos );            
  47.         return 1;
  48.     }
  49.     clear_to_color ( buffer, 0x000000 );
  50.    
  51.     int tiempo_ticks = 0;
  52.     int ticks = CLOCKS_PER_SEC / 20;
  53.     int op = 0;
  54.     int sw = 0;
  55.     int escena = 1; //escena inicial
  56.     bool salida = false;
  57.    
  58.     while ( !salida ) {
  59.         if ( clock() > tiempo_ticks + ticks ) {
  60.             tiempo_ticks = clock();
  61.  
  62.             clear_to_color ( buffer, 0x000000 );
  63.            
  64.             switch ( escena ) {
  65.                 case 1: //escena1. Es la inicial.
  66.                     if ( mouse_x > 176  && mouse_x < 326 && mouse_y > 410 && mouse_y < 485 ) {
  67.                         blit ( escena1Jugar, buffer, 0, 0, 0, 0, 800, 531 ); // Imprime fondo 2 sobre el buffer (0,0,0,0 para que se imprima toda la pantalla)
  68.                        
  69.                         if ( mouse_b & 1 ) { // Si se presiona el botón izquierdo se realiza la acción
  70.                             escena = 2; //****la accion segun entendi es pasar al menu no?****
  71.                         }
  72.                     } else if ( mouse_x > 472 & mouse_x < 619 && mouse_y > 412 & mouse_y < 483 ) {
  73.                         blit ( escena1Salir, buffer, 0, 0, 0, 0, 800, 531 ); // Imprime fondo 3 sobre el buffer (0,0,0,0 para que se imprima toda la pantalla)
  74.                         if ( mouse_b & 1 ) { // Si se presiona el botón izquierdo se realiza la acción
  75.                             salida = true;
  76.                         }
  77.                        
  78.                     } else {
  79.                         blit ( escena1Fondo, buffer, 0, 0, 0, 0, 800, 531 ); // Si no se cumple lo anterior queda el fondo 1
  80.                     }
  81.                     masked_blit ( cursor, buffer, 0, 0, mouse_x, mouse_y, 13, 22 ); //Para colocar transparencia al cursor, se imprime en el buffer con las cordenadas del mouse.
  82.  
  83.                     break;
  84.                 case 2: //escena2
  85.  
  86.                     //Controla el movimiento de arriba abajo del menu
  87.                     if ( !key[KEY_UP] && !key[KEY_DOWN] && sw == 1 ) {sw = 0;}
  88.                     if ( key[KEY_UP] && sw == 0 ) { op--; if ( op == 0 ) op = 5; sw = 1; }
  89.                     if ( key[KEY_DOWN] && sw == 0 ) { op++; if ( op == 6 ) op = 1; sw = 1; }
  90.                    
  91.                     //averigua si se pulsa enter segun en que posicion esteamos en el menu
  92.                     if ( op == 1 && key[KEY_ENTER] ) { escena = 5; }
  93.                     if ( op == 2 && key[KEY_ENTER] ) { escena = 6; }
  94.                     if ( op == 3 && key[KEY_ENTER] ) { escena = 3; }
  95.                     if ( op == 4 && key[KEY_ENTER] ) { escena = 4; }                
  96.                     if ( op == 5 && key[KEY_ENTER] ) { escena = 1; }
  97.                    
  98.                     blit ( menu, buffer, 0, 0, 0, 0, 800, 531 );
  99.                    
  100.                     //Animacion de las letras del menu
  101.                     if ( op == 1 ) { textout_centre_ex ( buffer, font, "Nueva Partida" , 390, 260, ROJO, GRIS );
  102.                     } else {         textout_centre_ex ( buffer, font, "Nueva Partida" , 390, 260, BLANCO, GRIS ); }
  103.                     if ( op == 2 ) { textout_centre_ex ( buffer, font, "Niveles" , 385, 318, ROJO, GRIS );
  104.                     } else {         textout_centre_ex ( buffer, font, "Niveles" , 385, 318, BLANCO, GRIS ); }
  105.                     if ( op == 3 ) { textout_centre_ex ( buffer, font, "Instrucciones" , 390, 368, ROJO, GRIS );
  106.                     } else {         textout_centre_ex ( buffer, font, "Instrucciones" , 390, 368, BLANCO, GRIS ); }
  107.                     if ( op == 4 ) { textout_centre_ex ( buffer, font, "Creditos" , 380, 417, ROJO, GRIS );
  108.                     } else {         textout_centre_ex ( buffer, font, "Creditos" , 380, 417, BLANCO, GRIS ); }
  109.                     if ( op == 5 ) { textout_centre_ex ( buffer, font, "Volver" , 381, 467, ROJO, GRIS );
  110.                     } else {         textout_centre_ex ( buffer, font, "Volver" , 381, 467, BLANCO, GRIS ); }              
  111.                     break;
  112.                 case 3:
  113.                     if ( key[KEY_ESC] ) {escena = 2; }
  114.                     blit ( instrucciones, buffer, 0, 0, 0, 0, 800, 531 );
  115.                     break;
  116.                 case 4:
  117.                     if ( key[KEY_ESC] ) {escena = 2; }
  118.                     blit ( creditos, buffer, 0, 0, 0, 0, 800, 531 );                    
  119.                     break;
  120.                 case 5:
  121.                     if ( key[KEY_ESC] ) {escena = 2; }
  122.                     textout_centre_ex ( buffer, font, "Aqui deberia ir el juego XD" , 390, 260, ROJO, GRIS);
  123.                     break;
  124.                 case 6:
  125.                     if ( key[KEY_ESC] ) {escena = 2; }
  126.                     textout_centre_ex ( buffer, font, "No implementado" , 390, 260, ROJO, GRIS);
  127.                     break;                
  128.                 default:
  129.                     break;
  130.             }
  131.             blit ( buffer, screen, 0, 0, 0, 0, 800, 531 );
  132.         }
  133.    
  134.     }
  135.  
  136.     destroy_bitmap ( buffer );
  137.     destroy_bitmap ( cursor );
  138.     destroy_bitmap ( escena1Fondo );
  139.     destroy_bitmap ( escena1Jugar );
  140.     destroy_bitmap ( escena1Salir );
  141.     destroy_bitmap ( menu );
  142.     destroy_bitmap ( instrucciones);
  143.     destroy_bitmap ( creditos );  
  144.    
  145.     return 0;
  146. }END_OF_MAIN();

Mi foto debería ir junto XDD

Aquí están los archivos ya que las fotos les cambie los nombres porque tenían un raleo del copón que todas se llamaban fondo.
http://dfiles.eu/files/0j5yp6bdg

toma como que cada case del switch es una escena que muestra la foto correcta. La escena 1 esta compuesta por 3 imagenes, pero las demás solo se componen de 1 cada escena.

Es como ir alternando entre escenas con el switch. apenas hice nada, solo las redireccione a que vayan al lugar correcto según el caso.

En fin.. Si no llegas a comprender el concepto de escenas te va resultar dificil. Cada escena como bien puedes ver, tiene su proprio control de teclas, actualización de lógica (no todos, porque algunos menús solo muestran una imagen y no hace falta calcular nada), y por ultimo dibuja su escena.

Quedate que una escena esta compuesta de evento(le tecla), actualiza(cálculos, o lógica), dibuja(blit). Cada caso tiene eso comprueba/actualiza/dibuja. Comprueba teclas, actualiza coordenadas y dibuja según los cambios.¿Capiche?

Todo ese código va muy fullero. deberia ir clases o funciones, acompañados de estructuras etc etc.

Bueno siga aprendiendo C++. Solo así lograrás un buen código. Suerte

Última edición por vangodp; 24/05/2015 a las 23:13
  #3 (permalink)  
Antiguo 25/05/2015, 15:07
Avatar de Jose_A  
Fecha de Ingreso: mayo-2015
Ubicación: México, Sonora.
Mensajes: 180
Antigüedad: 8 años, 10 meses
Puntos: 0
Respuesta: Unión de dos menús o programas

Woo, woo, si, tu foto debe ser la primera xDDD

deberas que me ha servido de mucho tu ayuda, creo que ahorita estaría a la mitad y se me hace mucho. Con esto ya queda, gracias por la ayuda y los consejos!! enhorabuena
  #4 (permalink)  
Antiguo 26/05/2015, 15:27
Avatar de Jose_A  
Fecha de Ingreso: mayo-2015
Ubicación: México, Sonora.
Mensajes: 180
Antigüedad: 8 años, 10 meses
Puntos: 0
Respuesta: Unión de dos menús o programas

Ahm...por cierto, para unir el programa del juego con el menú ya terminado, deberé crear un ciclo o mandar un return para el inicio?, ahora que me pongo a pensarlo se complicara en el futuro que quiera adaptarlo...ya que el código del juego no es de allegro...lo que pasa es que el menú está realizado por escenas nada más y el código del juego no...

Última edición por Jose_A; 26/05/2015 a las 16:05
  #5 (permalink)  
Antiguo 26/05/2015, 16:15
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 10 años, 6 meses
Puntos: 38
Respuesta: Unión de dos menús o programas

no tengo ni idea pero para cambiar entre menús puedes seguir usando el gestor de eventos de allegro.

Creo que bastaría poner tu juego dentro del case 5 y poner algún evento que puedas retornar a ese menú cuando quieras salir.

El problema es que en ese caso quien controla la ventana es allegro, el es el encargado de pintar esos BITMAP*, no se como hacer que pinte otra cosa que no sea BITMAP* y que pertenezca a la misma libreria. Creo que no va ser posible eso.

Es que estas haciendo un Frankstein de códigos XDDD. Estas remendando y usando todo lo que te pongo por que tienes poca experiencia pero ese juego debería estar íntegramente echo en allegro.

No se el tamaño del juego, pero tan difícil es portarlo a allegro?
  #6 (permalink)  
Antiguo 26/05/2015, 16:59
Avatar de Jose_A  
Fecha de Ingreso: mayo-2015
Ubicación: México, Sonora.
Mensajes: 180
Antigüedad: 8 años, 10 meses
Puntos: 0
Respuesta: Unión de dos menús o programas

Si, yo tampoco tengo ni la menor idea de como hacerlo. Intente pasarlo de la ventana de Allegro al cmd, y despues que me lo pasara de nuevo para Allegro con un goto game, algo asi:

Cita:
#include <stdio.h>
#include <allegro.h>
#include <cstdlib>
#include <iostream>
#include <time.h>

using namespace std;

#define AZUL 0x1AA9D1
#define GRIS 0x445051
#define BLANCO 0xFFFFFF



inline void iniciarSistemas(int ANCHO, int ALTO){
allegro_init(); //Inicia la librería Allegro
install_keyboard(); //Instala el controlador de teclado de Allegro
set_color_depth(32); //Establece el formato de píxel para ser utilizado.
set_gfx_mode(GFX_AUTODETECT_WINDOWED, ANCHO, ALTO, 0, 0); //Pixeles utilizados
install_mouse(); // Para usar el ratón
}



int main() {

iniciarSistemas(800, 531);
game:
BITMAP *buffer = create_bitmap ( 800, 531 );
BITMAP *cursor = load_bitmap ( "cursor.bmp", NULL );
//escena1
BITMAP *escena1Fondo = load_bitmap ( "escena1fondo.bmp", NULL );
BITMAP *escena1Jugar = load_bitmap ( "escena1jugar.bmp", NULL );
BITMAP *escena1Salir = load_bitmap ( "escena1salir.bmp", NULL );
//otras escenas
BITMAP *menu = load_bitmap ( "menu.bmp", NULL );
BITMAP *instrucciones = load_bitmap ( "instrucciones1.bmp", NULL );
BITMAP *creditos = load_bitmap ( "creditos1.bmp", NULL );

if (buffer == NULL || escena1Fondo == NULL || escena1Jugar == NULL || escena1Salir == NULL ||
menu == NULL || instrucciones == NULL || creditos == NULL || cursor == NULL ) {
cout << "ERROR al cargar alguna de las imagenes" << endl;
destroy_bitmap ( buffer );
destroy_bitmap ( cursor );
destroy_bitmap ( escena1Fondo );
destroy_bitmap ( escena1Jugar );
destroy_bitmap ( escena1Salir );
destroy_bitmap ( menu );
destroy_bitmap ( instrucciones);
destroy_bitmap ( creditos );
return 1;
}
clear_to_color ( buffer, 0x000000 );

int tiempo_ticks = 0;
int ticks = CLOCKS_PER_SEC / 20;
int op = 0;
int sb = 0;
int escena = 1; //escena inicial
int salida = false;

while ( !salida ) {
if ( clock() > tiempo_ticks + ticks ) {
tiempo_ticks = clock();

clear_to_color ( buffer, 0x000000 );

switch ( escena ) {
case 1: //Fondo inicial
if ( mouse_x > 176 && mouse_x < 326 && mouse_y > 410 && mouse_y < 485 ) {
blit ( escena1Jugar, buffer, 0, 0, 0, 0, 800, 531 );

if ( mouse_b & 1 ) {
escena = 2; //pasa al menú
}
} else if ( mouse_x > 472 & mouse_x < 619 && mouse_y > 412 & mouse_y < 483 ) {
blit ( escena1Salir, buffer, 0, 0, 0, 0, 800, 531 );
if ( mouse_b & 1 ) {
salida = true;
}

} else {
blit ( escena1Fondo, buffer, 0, 0, 0, 0, 800, 531 ); // Si no se cumple lo anterior queda el fondo 1
}
masked_blit ( cursor, buffer, 0, 0, mouse_x, mouse_y, 13, 22 ); //Para colocar transparencia al cursor, se imprime en el buffer con las cordenadas del mouse.

break;
case 2: //escena2

//Controla el movimiento de arriba abajo del menu
if ( !key[KEY_UP] && !key[KEY_DOWN] && sb == 1 ) {sb = 0;}
if ( key[KEY_UP] && sb == 0 ) { op--; if ( op == 0 ) op = 5; sb = 1; }
if ( key[KEY_DOWN] && sb == 0 ) { op++; if ( op == 6 ) op = 1; sb = 1; }


if ( op == 1 && key[KEY_ENTER] ) salida=true;
if ( op == 2 && key[KEY_ENTER] ) { escena = 6; }
if ( op == 3 && key[KEY_ENTER] ) { escena = 3; }


//{ escena = 3; }
if ( op == 4 && key[KEY_ENTER] ) { escena = 4; }
if ( op == 5 && key[KEY_ENTER] ) { escena = 1; }

blit ( menu, buffer, 0, 0, 0, 0, 800, 531 );

//Animacion de las letras del menu
if ( op == 1 ) { textout_centre_ex ( buffer, font, "Nueva Partida" , 390, 260, AZUL, GRIS );
} else { textout_centre_ex ( buffer, font, "Nueva Partida" , 390, 260, BLANCO, GRIS ); }
if ( op == 2 ) { textout_centre_ex ( buffer, font, "Niveles" , 385, 318, AZUL, GRIS );
} else { textout_centre_ex ( buffer, font, "Niveles" , 385, 318, BLANCO, GRIS ); }
if ( op == 3 ) { textout_centre_ex ( buffer, font, "Instrucciones" , 390, 368, AZUL, GRIS );
} else { textout_centre_ex ( buffer, font, "Instrucciones" , 390, 368, BLANCO, GRIS ); }
if ( op == 4 ) { textout_centre_ex ( buffer, font, "Creditos" , 380, 417, AZUL, GRIS );
} else { textout_centre_ex ( buffer, font, "Creditos" , 380, 417, BLANCO, GRIS ); }
if ( op == 5 ) { textout_centre_ex ( buffer, font, "Volver" , 381, 467, AZUL, GRIS );
} else { textout_centre_ex ( buffer, font, "Volver" , 381, 467, BLANCO, GRIS ); }
break;
case 3:
if ( key[KEY_ESC] ) {escena = 2; }
blit ( instrucciones, buffer, 0, 0, 0, 0, 800, 531 );
break;
case 4:
if ( key[KEY_ESC] ) {escena = 2; }
blit ( creditos, buffer, 0, 0, 0, 0, 800, 531 );
break;
case 5:
if ( key[KEY_ESC] ) {escena = 2; }
textout_centre_ex ( buffer, font, "Aqui va el juego :3" , 390, 260, AZUL, GRIS);
break;
case 6:
if ( key[KEY_ESC] ) {escena = 2; }
textout_centre_ex ( buffer, font, "Aqui van los niveles :3" , 390, 260, AZUL, GRIS);
break;
default:
break;
}

blit ( buffer, screen, 0, 0, 0, 0, 800, 531 );
}

}



cout << "Aqui pasa el codigo" << endl;
if ( key[KEY_A] ) { goto game; }

destroy_bitmap ( buffer );
destroy_bitmap ( cursor );
destroy_bitmap ( escena1Fondo );
destroy_bitmap ( escena1Jugar );
destroy_bitmap ( escena1Salir );
destroy_bitmap ( menu );
destroy_bitmap ( instrucciones);
destroy_bitmap ( creditos);

return 0;

}

END_OF_MAIN();
Que al dar la tecla A me mande de nuevo al menu, pero no funciona....queria que el codigo apareciera en el cmd y ya despues pasarlo al menu pero es tooodooo un desastre y ya no se que haceeer xDDD rayosss ;s
  #7 (permalink)  
Antiguo 26/05/2015, 18:09
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 10 años, 6 meses
Puntos: 38
Respuesta: Unión de dos menús o programas

No puedes alternar entre un menú gráfico y un menú de consola. Puedes tener ambos pero no uno llamar otro e después volver.
Existen medios para ocultar las ventanas como por ejemplo iniciar con la ventana gráfica y la de consola a la vez, pero mantener la ventana de consola oculta hasta que se elija la opción jugar que es cuando esta deja de estar oculta, pero realmente no estas alternando nada simplemente una no se ve. Si allegro fuera capaz de ocultar su ventana también, seria ocultar una y mostrar otra.

Para ocultar el CMD puedes usar esto, solo para windows ;)
Código C++:
Ver original
  1. #include<windows.h>
  2. #include<iostream>
  3. int main(void)
  4. {
  5.     //esto oculta la consola en win.
  6.     HWND hwnd_win = GetForegroundWindow();
  7.     ShowWindow(hwnd_win,SW_HIDE);
  8.     //Espera 4 segundos
  9.     Sleep(4000);
  10.     //vuelve a mostrar la consola.
  11.     ShowWindow(hwnd_win,SW_SHOW);
  12.    
  13.     std::cout<<"WWWWOOOOHHHLAAASSSS?????";
  14.     std::cin.ignore();
  15.     return 0;
  16. }

Eso oculta la consola 4 segundos.
Seria buscar una alternativa similar para la ventana de allegro y ocultarla hasta que termines el juego. Busca algo, seguro encuentras ;).
  #8 (permalink)  
Antiguo 26/05/2015, 20:44
Avatar de Jose_A  
Fecha de Ingreso: mayo-2015
Ubicación: México, Sonora.
Mensajes: 180
Antigüedad: 8 años, 10 meses
Puntos: 0
Respuesta: Unión de dos menús o programas

Pero si me di a entender lo que quería hacer?, porque no se si eso se pueda. El juego no está hecho con nada de Allegro y el menú como ya sabes se maneja sólo por escenas y nada más, sólo carga los fondos. Ahora, lo único que se puede hacer es cambiar esta parte:
Cita:
if ( op == 1 && key[KEY_ENTER] ) { escena = 5; }
Se supone que por el juego, pero como aún estaré dentro del buffer será imposible poner el juego ya que tendría que ser todo orientado a objetos, tendría que cambiar el marco, las bombas, todo, hacerse imágenes. No sabes si hay manera de, por ejemplo, cargar un archivo .exe al dar click en nueva partida?, y que ahí aparezca el juego?, lo remplazaría aquí:
Cita:
textout_centre_ex ( buffer, font, "Aqui deberia ir el juego XD" , 390, 260, BLANCO, GRIS);
break;
quitar el texto y mandar a llamar ese archivo .exe que sería el ejecutable de este juego:
https://mega.co.nz/#!iEZV1TaT!IjxP0EqQIyy8USkkOytUYFcy5z3zv2CYqttEpW_ bcPI

es algo complicado pero es la única forma que veo yo posible para unirlos, es eso posible???, disculpa las preguntas algo tontas xD pero es lo único que se me viene a la cabeza hacer...gracias :3

Última edición por Jose_A; 26/05/2015 a las 23:30
  #9 (permalink)  
Antiguo 27/05/2015, 03:30
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 10 años, 6 meses
Puntos: 38
Respuesta: Unión de dos menús o programas

Si puedes ejecutar un programa desde otro un ejemplo es system("holamundo.exe");, hasta puedes pasarle parámetros aun que no me pregunte como hacer esto XDD, pero no podrás volver al menú nuevamente al programa anterior, pero si llamar el ejecutable del menu nuevamente, igual que llamas al juego.

Hay varias funciones que tienes que investigar, no las suelo usar mucho esas funciones así que soy novato como tu en el tema. Pero te puedo decir el nombre de algunas de ellas.
WinExec(), ShellExecute(), execv(), spawnl(), spawnv().... Es cosa de investigar.

Lo que si se es que se puede usar una función llamada createprocess o algo así, que esa si creo que se puede obtener los resultados de vuelta. Pero no se usar ese tipo de programacion, y no me voy liar con eso.

use system("holamundo.exe"); y deje que el menu se cierre, luego vuelves abrir cuando termines el juego con system("menu.exe");. O pruebe la opción de ocultar que esa si comparte variables.

En todos los casos es mucho más que lo que te ha pedido tu maestra o quien sea. Es que quieres tomar atajos que en realidad no son para nada sencillos y no se el tiempo que tienes para eso.

Vaya haciendo la idea que Allegro es programación gráfica y C++ de toda la vida es consola. no puedes fusionar ambos, puedes hacer maniobras poco éticas para amenizar tu problema, es la primera vez que veo alguien currarse un menú gráfico para una aplicación de consola XDD.

Luego echaré una mirada a tu código que ahora toy liado XD ;)

Mientras tanto vaya a google y busque "Como ejecutar un programa desde otro en C++". ;)
  #10 (permalink)  
Antiguo 27/05/2015, 03:42
Avatar de Jose_A  
Fecha de Ingreso: mayo-2015
Ubicación: México, Sonora.
Mensajes: 180
Antigüedad: 8 años, 10 meses
Puntos: 0
Respuesta: Unión de dos menús o programas

Ooooookaaaaas, si, sinceramente creo que ya es más de lo que se nos pidió XD es bueno saber que eso es posible, lo investigaré y lo lograré hacer 8) muchas gracias de nuevo!!, ahora si queda como resuelto xD

Etiquetas: int, programa, programas
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:05.