el programa dejó de funconar correctamente por un problema.

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

0 Miembros y 6 Visitantes están viendo este tema.

ivancea96

Cita de: ivancea96 en 11 Septiembre 2016, 21:47 PM
Tienes que localizar qué línea da el error. Para ello hay muchos métodos, y uno es tan simple como ver hasta donde funciona bien. Por ejemplo, con el main, pondrías:
Código (cpp) [Seleccionar]
int main(){
    cout << 'a' << endl;
    iniciar();
    cout << 'b' << endl;
    realizar_juego();
    cout << 'c' << endl;
    terminar();
    cout << 'd' << endl;
}


Al ejecutarlo, deberías ver por la consola, letras. Si sale una 'a', el error está en la función "iniciar()". Si sale "ab", el error está en "realizar_juego()", y etc.
Cita de: ivancea96 en 12 Septiembre 2016, 21:56 PM
¿Puedes poner aquí el código con los couts?
Cita de: sanxez1 en 18 Septiembre 2016, 12:47 PM
#include <stdio.h>
#include <stdlib.h>
#include <allegro.h>


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;


}
}



No tiene los couts ._.
Si lo haces, pon la librería iostream. También puedes hacerlo con printf (poniendo justo después de cada printf un fflush(stdout);

sanxez1

#21
ostias que tonto pensé que poyoncio lo había puesto,
#include <stdio.h>
#include <stdlib.h>
#include <allegro.h>


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(){
printf("error a");
iniciar();
printf("error b");
realizar_juego();
printf("error c");
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;


}
}

me salen los errores a y b

ivancea96

Vale. Ahora, sigue con ese método hasta encontrar la línea exacta que da el error. Ve colocando un par de printf, hasta que veas que uno no se muestra.

Ahora sabes que el error está dentro de realizar_juego. pon printf ahí.

Por cierto, por seguridad, pon printf("a"); fflush(stdout);.
fflush hace que se muestre por pantalla al momento (ya que printf, stdout, utiliza un buffer). Es posible que falle y no se llegue a mostrar por pantalla. Con el fflush, haces que se muestre al momento, cosa importante por aquí xd

sanxez1

esta es la linea que me fastidia:
buffer=create_bitmap(nave->w,nave->h);

pero no se como soluconarlo

ivancea96

No estoy seguro, pero si en vez de clear pones "clear_bitmap(...)", sigue igual?

sanxez1

#25
si dices así
clear_bitmap(buffer);
si, sigue igual

ivancea96

#26
Que extraño. Muestra en consola los valores de nave->w y nave->h antes del create_bitmap, a ver si son valores correctos.

EDITO: Wop, cuidado aqui:

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();


if(nave == NULL) terminar();
El código va a proseguir, y va a empezar a tirar errores (tal vez). Después del terminar, haz un return:
nave=load_bitmap("C:/Users/DANIEL/Desktop/Programación/C++/Allegro/Naves/recursos/nave.pcx", paleta);
set_palette(paleta);
if (nave==NULL){
    terminar();
    return;
}
buffer=create_bitmap(nave->w,nave->h);
clear (buffer);
if (buffer==NULL){
    terminar();
    return;
}


O mejor aun: terminar() lo llamas al final del main, asi que no lo llames ahí, o será llamado 2 veces. Simplemente, pon el return.

nave=load_bitmap("C:/Users/DANIEL/Desktop/Programación/C++/Allegro/Naves/recursos/nave.pcx", paleta);
set_palette(paleta);
if (nave==NULL){
    return;
}
buffer=create_bitmap(nave->w,nave->h);
clear (buffer);
if (buffer==NULL){
    return;
}

sanxez1

va por ahí, he puesto que me dijese error c al ir a terminar y me ha salido que hago???

ivancea96

Pues nuevamente, encontrar dónde falla.

Intuyo que falla en:
nave=load_bitmap("C:/Users/DANIEL/Desktop/Programación/C++/Allegro/Naves/recursos/nave.pcx", paleta);
Verifícalo.

Si es eso, fíjate que el pcx exista y que la ruta sea correcta.

http://liballeg.org/stabledocs/en/alleg010.html#load_bitmap

sanxez1

existe, pero no se que le pasa, llevo dias dandole vueltas y no lo consigo ayudadme, xfa