Autor
|
Tema: el programa dejó de funconar correctamente por un problema. (Leído 10,309 veces)
|
ivancea96
Desconectado
Mensajes: 3.412
ASMático
|
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: 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. ¿Puedes poner aquí el código con los couts?
#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);
|
|
|
En línea
|
|
|
|
sanxez1
Desconectado
Mensajes: 36
|
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
|
|
« Última modificación: 18 Septiembre 2016, 14:40 pm por sanxez1 »
|
En línea
|
|
|
|
ivancea96
Desconectado
Mensajes: 3.412
ASMático
|
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
|
|
|
En línea
|
|
|
|
sanxez1
Desconectado
Mensajes: 36
|
esta es la linea que me fastidia: buffer=create_bitmap(nave->w,nave->h); pero no se como soluconarlo
|
|
|
En línea
|
|
|
|
ivancea96
Desconectado
Mensajes: 3.412
ASMático
|
No estoy seguro, pero si en vez de clear pones "clear_bitmap(...)", sigue igual?
|
|
|
En línea
|
|
|
|
sanxez1
Desconectado
Mensajes: 36
|
si dices así clear_bitmap(buffer); si, sigue igual
|
|
« Última modificación: 18 Septiembre 2016, 20:38 pm por sanxez1 »
|
En línea
|
|
|
|
ivancea96
Desconectado
Mensajes: 3.412
ASMático
|
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; }
|
|
« Última modificación: 18 Septiembre 2016, 21:16 pm por ivancea96 »
|
En línea
|
|
|
|
sanxez1
Desconectado
Mensajes: 36
|
va por ahí, he puesto que me dijese error c al ir a terminar y me ha salido que hago???
|
|
|
En línea
|
|
|
|
ivancea96
Desconectado
Mensajes: 3.412
ASMático
|
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
|
|
|
En línea
|
|
|
|
sanxez1
Desconectado
Mensajes: 36
|
existe, pero no se que le pasa, llevo dias dandole vueltas y no lo consigo ayudadme, xfa
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Aqui les dejo un buen programa!!!!!!!!!!
Diseño Gráfico
|
Zeden
|
0
|
1,896
|
4 Junio 2004, 18:42 pm
por Zeden
|
|
|
¿Por qué no funciona correctamente este programa? Ficheros inside
Programación C/C++
|
NathanD
|
5
|
2,927
|
25 Febrero 2013, 22:58 pm
por NathanD
|
|
|
¿Programa en c++ compila correctamente, pero se cuelga al correr?
Programación C/C++
|
erikat
|
3
|
3,796
|
4 Diciembre 2013, 12:22 pm
por Eternal Idol
|
|
|
El programa dejó de funcionar al dar una respuesta? (RESUELTO)
Programación C/C++
|
mcamara46
|
5
|
2,459
|
27 Diciembre 2013, 23:50 pm
por leosansan
|
|
|
El controlador de pantalla dejo de funcionar y se recupero correctamente
Hardware
|
riurannew
|
3
|
2,525
|
5 Mayo 2015, 09:29 am
por riurannew
|
|