el programa dejó de funconar correctamente por un problema.

Iniciado por sanxez1, 11 Septiembre 2016, 20:48 PM

0 Miembros y 1 Visitante están viendo este tema.

sanxez1

Cuando trato de ejecutar el siguiente programa en c++ me sale el error:

el programa dejó de funcionar correctamente por un problema. Windows cerrará el programa y le notificará si existe una solución.

el compilador no me da ningún problema el código es el siguiente:
#include <stdio.h>
#include <stdlib.h>
#include <allegro.h>
#include <iostream>

int iniciar();
void realizar_juego();
void terminar();

int iniciar(){
allegro_init();
install_keyboard();
set_color_depth(16);
if (set_gfx_mode(GFX_AUTODETECT,640,480,0,0)<0){
printf("error al iniciar el modo grafico\n");
allegro_exit();
exit(-1);
}
}

void terminar(){
allegro_exit();
}
int main(){
iniciar();
realizar_juego();
terminar();
}
END_OF_MAIN()
void realizar_juego(){

BITMAP *nave;
PALETTE paleta;
int x,y, x_anterior, y_anterior;
BITMAP * buffer;


nave=load_bitmap("C:/Users/DANIEL/Desktop/Programación/C++/Allegro/Naves/recursos/nave.pcx", paleta);
set_palette(paleta);
if (nave==NULL) terminar();
buffer=create_bitmap(nave->w,nave->h);
clear (buffer);
if (buffer==NULL) terminar();
x=SCREEN_W/2;
y=SCREEN_H/2;

while (!key[KEY_ESC]){

if (key[KEY_UP,KEY_W])
y--;
if (key[KEY_DOWN,KEY_S])
y++;
if (key[KEY_LEFT,KEY_A])
x--;
if (key[KEY_RIGHT,KEY_D])
x++;

if (x<0) x=x_anterior;
if (x>SCREEN_W-nave->w) x=x_anterior;
if (y<0) y=y_anterior;
if (y>SCREEN_H-nave->h) y=y_anterior;
if ((x_anterior!=x) || (y_anterior!=y)){
blit (buffer,screen, 0, 0, x_anterior, y_anterior,buffer->w,buffer->h);
blit (screen,buffer,x,y,0,0,buffer->w,buffer->h);
draw_sprite(screen,nave, x, y);
}
x_anterior=x;
y_anterior=y;


}
}

ivancea96

En primer lugar, localiza la línea que da el error. Para ello, coloca pausas o salidas por consola (con "cout", por ejemplo) en distintas zonas hasta ver dónde falla.
Código (cpp) [Seleccionar]
cout << 'a' << flush;
linea_A;
cout << 'b' << flush;
linea_B;
cout << 'c' << flush;
linea_C;


Consola:
ab

En ese caso, sabríamos que probablemente el error esté en la línea B.


Poyoncio

#3
Para empezar, cuando cierras los { } de la funcion iniciar, al final hay un } de mas   (justo encima de terminar() te falta poner en END_OF_MAIN( ) el caracter ";"
Luego cuando indicas el valor de nave si estas en windows tendrias que tener \\ y no /  (si se trata de trabajar con directorios en windows)
Y en la ultima linea te sobra un }  

Para la proxima, pon las etiquetas Geshi(C++) y te podre indicar la linea exacta
PD: Ademas las librerias que tienes stdio y stdlib tendrian que ser cstdio y cstdlib (de esto no estoy muy seguro, pero creo que es asi)

Saludos
Curso de ensamblador desde cero

ivancea96

Cita de: Poyoncio en 11 Septiembre 2016, 21:13 PM
Luego cuando indicas el valor de nave si estas en windows tendrias que tener \\ y no /  (si se trata de trabajar con directorios en windows)
Y en la ultima linea te sobra un }  
Ambos sirven, tanto \ como /.
No sobra. Hay 2, uno para el while y otro para la función.

Y sí, cstdlib y cstdio.


Si dices que el programa te ha compilado bien: Por si acaso, borra el ejecutable y compila de nuevo.
Hecho eso, prueba de nuevo lo de los cout, poniéndo uno al principio, para asegurarte de que al menos comienza el programa.

Poyoncio

#5
Cita de: ivancea96 en 11 Septiembre 2016, 21:18 PM
Ambos sirven, tanto \ como /.
No sobra. Hay 2, uno para el while y otro para la función.

Y sí, cstdlib y cstdio.


Si dices que el programa te ha compilado bien: Por si acaso, borra el ejecutable y compila de nuevo.
Hecho eso, prueba de nuevo lo de los cout, poniéndo uno al principio, para asegurarte de que al menos comienza el programa.

Lo he vuelto a mirar y hay 3 fijate:
Código (cpp) [Seleccionar]
 }
 x_anterior=x;
 y_anterior=y;
 
 
}
}






Me estoy mirando el code de nuevo, tienes un lio tremendo con C y C++ usas stdlib y stdio, ademas de iostream, y luego pones printf.
Podrias especificar en que lenguaje estas programando? Porque alomejor lo que tienes que hacer es quitar el iostream y arreglar los errores de syntaxis y ya estas
Curso de ensamblador desde cero

ivancea96

Cita de: Poyoncio en 11 Septiembre 2016, 21:20 PM
Lo he vuelto a mirar y hay 3 fijate:
Código (cpp) [Seleccionar]
 }
 x_anterior=x;
 y_anterior=y;
 
 
}
}


El primero cierra el if, el segundo cierra el while y el tercero cierra la función.

Poyoncio

Cita de: ivancea96 en 11 Septiembre 2016, 21:27 PM
El primero cierra el if, el segundo cierra el while y el tercero cierra la función.
Es verdad, no havia visto el if disculpa ;)
Curso de ensamblador desde cero

sanxez1


ivancea96

¿Probaste lo de los cout? De ser así, pon aquí el código que probaste.