elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


  Mostrar Mensajes
Páginas: 1 ... 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 [101] 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 ... 401
1001  Programación / Programación C/C++ / Re: el programa dejó de funconar correctamente por un problema. en: 19 Septiembre 2016, 19:42 pm
Pues nuevamente, encontrar dónde falla.

Intuyo que falla en:
Código
  1. 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
1002  Programación / Programación C/C++ / Re: el programa dejó de funconar correctamente por un problema. en: 18 Septiembre 2016, 21:13 pm
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:

Código
  1. nave=load_bitmap("C:/Users/DANIEL/Desktop/Programación/C++/Allegro/Naves/recursos/nave.pcx", paleta);
  2. set_palette(paleta);
  3. if (nave==NULL) terminar();
  4. buffer=create_bitmap(nave->w,nave->h);
  5. clear (buffer);
  6. 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:
Código
  1. nave=load_bitmap("C:/Users/DANIEL/Desktop/Programación/C++/Allegro/Naves/recursos/nave.pcx", paleta);
  2. set_palette(paleta);
  3. if (nave==NULL){
  4.    terminar();
  5.    return;
  6. }
  7. buffer=create_bitmap(nave->w,nave->h);
  8. clear (buffer);
  9. if (buffer==NULL){
  10.    terminar();
  11.    return;
  12. }

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.

Código
  1. nave=load_bitmap("C:/Users/DANIEL/Desktop/Programación/C++/Allegro/Naves/recursos/nave.pcx", paleta);
  2. set_palette(paleta);
  3. if (nave==NULL){
  4.    return;
  5. }
  6. buffer=create_bitmap(nave->w,nave->h);
  7. clear (buffer);
  8. if (buffer==NULL){
  9.    return;
  10. }
1003  Programación / Programación C/C++ / Re: ¿Cuando hay que usar c-like, constructor y uniform? en: 18 Septiembre 2016, 20:38 pm
Normalmente, usa la primera.
La segunda, se utiliza para inicializar clases. Realmente un tipo nativo no tiene constructor. Una clase sí, y es la única forma de inicializarla.
Sobre la tercera, no la utilices salvo que realmente la necesites. Más que nada, porque no es necesario. La normal y la más visual, es la primera.
Sobre cuándo usar la tercera: http://en.cppreference.com/w/cpp/language/aggregate_initialization
1004  Programación / Programación C/C++ / Re: char16_t, char32_t y wchar_t. ¿Para que estan? en: 18 Septiembre 2016, 20:33 pm
Igual que uint8_t, int16_t, int32_t...
Te aseguran el tamaño de la variable, en bits.

El caso de esos tipos essimplementa para ser usados con toras codificaciones. Cada caracter de UTF-16, por ejemplo, utiliza hasta 2 bytes,16 bits. Para ello, podrías usar char16_t.

Si no necesitas los tipos, o los uses. Rara vez los utilizarás explícitamente. Pero están ahí para cuando se necesiten.


No se muestran como caracter, sino como número. Eso es porque realmente lo que son es eso, números. La única excepción es el entero de 8 bits (char8_t, char, int8_t), que se muestra como caracter.
1005  Programación / Programación C/C++ / Re: el programa dejó de funconar correctamente por un problema. en: 18 Septiembre 2016, 20:15 pm
No estoy seguro, pero si en vez de clear pones "clear_bitmap(...)", sigue igual?
1006  Programación / Programación C/C++ / Re: el programa dejó de funconar correctamente por un problema. en: 18 Septiembre 2016, 16:09 pm
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
1007  Programación / Programación C/C++ / Re: el programa dejó de funconar correctamente por un problema. en: 18 Septiembre 2016, 13:14 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
  1. int main(){
  2.    cout << 'a' << endl;
  3.    iniciar();
  4.    cout << 'b' << endl;
  5.    realizar_juego();
  6.    cout << 'c' << endl;
  7.    terminar();
  8.    cout << 'd' << endl;
  9. }

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?
Código:
#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);
1008  Programación / Programación C/C++ / Re: [C++] Sobrecarga de Operadores en: 17 Septiembre 2016, 23:04 pm
Cuidado con eso. El problema era:
Código
  1. Array& operator +(const Array &a1,const Array &a2)
  2. {
  3.    Array b;
  4.  
  5.    for ( int i = 0; i < b.tamanio; i++ )
  6.    {
  7.    b.ptr[i] = a1.ptr[i] + a2.ptr[i];
  8.    }
  9.  
  10.    return b;
  11. }

El retorno es Array&. Es decir, una referencia a un objeto. Estás retornando un objeto del ámbito de la función, es decir, va a desaparecer terminada la función. Estás retornando una referencia a un objeto que será destruido.
La solución, es poner que retorne un Array, sin el operador &.
1009  Programación / Programación C/C++ / Re: [C++] Sobrecarga de Operadores en: 17 Septiembre 2016, 16:19 pm
Cuando sea así, dí qué error tienes. El error que te da el compilador.

El operador + está como privado. Prueba poniendolo como public.
1010  Programación / Programación C/C++ / Re: Mejor forma de procesar una cadena de formato [Cantidad de memoria] en: 16 Septiembre 2016, 22:31 pm
Utiliza los datos que te da la propia función. La función retorna la cantidad de caracteres que necesita.

Código
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #include <stdarg.h>
  4.  
  5.  
  6. void temp(char* format, ...){
  7. va_list list;
  8.  
  9. va_start(list, format);
  10. int n = vsnprintf(0, 0, format, list);
  11. va_end(list);
  12.  
  13. char* t = malloc(n+1);
  14.  
  15. va_start(list, format);
  16. vsnprintf(t, n+1, format, list);
  17. va_end(list);
  18.  
  19. printf("%s", t);
  20. fflush(stdout);
  21. }
  22.  
  23. int main(){
  24. temp("%i%i%i", 123,456,789);
  25. }
Páginas: 1 ... 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 [101] 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 ... 401
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines