Dibujar con putchxy

Iniciado por julianbesso1, 23 Agosto 2014, 23:26 PM

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

julianbesso1

Hola gente. Vengo con 2 dudas que surgieron en un ejercicio.
Tenía que hacer algo parecido al insaniquarium (solo las animaciones de los pescaditos)

Ya tengo el código correspondiente al movimiento, pero a la hora de mostrarlo en pantalla, obtengo un resultado extraño.

Este es el cuerpo del pescado mirando hacia la izquierda: (por mostar un caso)


Código (cpp) [Seleccionar]

array_b[0][0]=32;array_b[0][1]=32;array_b[0][2]=32;array_b[0][3]=32;array_b[0][4]=32;array_b[0][5]=32;array_b[0][6]=95;array_b[0][7]=44;array_b[0][8]=13;array_b[0][9]=10;array_b[0][10]=32;array_b[0][11]=32;
array_b[1][0]=32;array_b[1][1]=32;array_b[1][2]=95;array_b[1][3]=47;array_b[1][4]=123;array_b[1][5]=95;array_b[1][6]=32;array_b[1][7]=32;array_b[1][8]=13;array_b[1][9]=10;array_b[1][10]=32;array_b[1][11]=46;
array_b[2][0]=96;array_b[2][1]=32;array_b[2][2]=32;array_b[2][3]=32;array_b[2][4]=32;array_b[2][5]=96;array_b[2][6]=46;array_b[2][7]=47;array_b[2][8]=39;array_b[2][9]=62;array_b[2][10]=32;array_b[2][11]=32;
array_b[3][0]=32;array_b[3][1]=13;array_b[3][2]=10;array_b[3][3]=47;array_b[3][4]=32;array_b[3][5]=101;array_b[3][6]=32;array_b[3][7]=40;array_b[3][8]=40;array_b[3][9]=32;array_b[3][10]=32;array_b[3][11]=32;
array_b[4][0]=61;array_b[4][1]=60;array_b[4][2]=32;array_b[4][3]=13;array_b[4][4]=10;array_b[4][5]=32;array_b[4][6]=96;array_b[4][7]=46;array_b[4][8]=44;array_b[4][9]=95;array_b[4][10]=95;array_b[4][11]=44;
array_b[5][0]=46;array_b[5][1]=39;array_b[5][2]=92;array_b[5][3]=95;array_b[5][4]=62;array_b[5][5]=32;array_b[5][6]=32;array_b[5][7]=13;array_b[5][8]=10;array_b[5][9]=32;array_b[5][10]=32;array_b[5][11]=32;
array_b[6][0]=32;array_b[6][1]=32;array_b[6][2]=32;array_b[6][3]=92;array_b[6][4]=41;array_b[6][5]=32;array_b[6][6]=32;array_b[6][7]=32;array_b[6][8]=32;array_b[6][9]=32;array_b[6][10]=32;array_b[6][11]=32;
array_b[7][0]=32;array_b[7][1]=32;array_b[7][2]=32;array_b[7][3]=32;array_b[7][4]=32;array_b[7][5]=32;array_b[7][6]=32;array_b[7][7]=32;array_b[7][8]=32;array_b[7][9]=32;array_b[7][10]=32;array_b[7][11]=32;


Y lo dibujo de esta manera:

Código (cpp) [Seleccionar]
void Pescado1::Dibujar_Pescado1(){

Pescado1::Borrar_Pescado1();
Pescado1::Cuerpo_Pescado1();

for(int i=0; i<8; i++){
for(int j=0; j<12; j++){
putchxy(pos_x+j,pos_y+i,array_b[i][j]);
}
}

}


Creo que el código está bien, pero el pescado sale desfigurado. Pareciera como que se corren algunos elementos o no se imprime la cantidad correcta de espacios.

La otra pregunta que tenía era si existía alguna manera de evitar tanto parpadeo al borrar y dibujar el pescado en la nueva posición.

Este es el método que utilizo para borrar:

Código (cpp) [Seleccionar]
void Pescado1::Borrar_Pescado1(){

for(int k=0;k<8;k++){
for(int p=0;p<12;p++){
putchxy(prev_x+p,prev_y+k,' ');
}
}

}


Se agradece de antemano. Saludos!

Xandrete

#1
¿Mh?

¿Seguro que está bien hecha la matriz de caracteres que representa el pescado?

Esto es lo que me sale a mi al dibujarlo:


     _,
 
 _/{_  
.
`    `./'>  

/ e ((  
=<
`.,__,
.'\_>  
 
  \)    


No creo que haya ningún problema con el código, aunque no he usado nunca el putchxy (¿alguna de estas funciones de la famosa biblioteca conio, verdad?).

Respecto al parpadeo al borrar y volver a dibujar, no estoy seguro de qué podrías hacer al respecto. Es el inconveniente de usar la consola para hacer hacer un juego/animación. ¿Sobre que tipo de consola estás trabajando? ¿Un terminal de Linux? ¿cmd.exe de Windows? Tiene más pinta de ser una limitación de la biblioteca (en este caso conio) o del terminal que estés usando que algo de tu código.

Saludos.

[EDITADO]

Acabo de fijarme en que en la matriz de caracteres hay saltos de líneas (código 10, en ASCII) que, según creo, no deberían estar (deberían ser espacios, porque el salto de línea ya viene implícito con el cambio de fila). Échale un ojo.

Por cierto, deberías buscar alguna forma menos... engorrosa de guardar la(s) representación del pescado, porque ponerlo así, tal cual en el código, es un poco feo. Podrías guardarlo en un fichero aparte y cargarlo al principio del programa.

julianbesso1

#2
Muchas gracias por tu respuesta. Decidí representarlo de esa manera porque es lo que estamos utilizando en las primeras clases de un curso que estoy haciendo acerca de videojuegos. Es muy básico.

La idea es que resulte algo como esto:


     
             _,
   _/{_  
        .'    './´>  
       / e ((   =<
        '.,__,.'\_>  
             \)  



No creo que esté mal la matriz, porque probé lo mismo con cout y sale perfecto.
Respecto a los elementos '10' los reemplazé por '32' pero ocurre lo mismo. Es raro..
Estoy utilizando windows por si sirve de algo.

Gracias de nuevo!!!





Ya lo solucioné. Tenías toda la razón acerca de los saltos de línea. Pasa que para obtener los equivalentes en ASCII, pasé el dibujo completo a un conversor online. Seguramente me devolvió algunos valores que no correspondían (como los saltos), pero que cout interpretaba.

Gracias por la buena predisposición! Saludos