Ver Mensaje Individual
  #2 (permalink)  
Antiguo 26/07/2015, 15:25
Avatar de vangodp
vangodp
 
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 11 años, 1 mes
Puntos: 38
Respuesta: Como evitar el parpadeo

Eso pasa por que estas borrando toda la tela constantemente.
Lo que puedes hacer es usar gotoxy para borrar solo lo que es la letra que estas moviendo. Seria como imprimir un espacio en blanco donde estabas y pintar la C en la nueva posicion, todo lo demás estaria igual. Miere un ejemplo:
Código C++:
Ver original
  1. #include <iostream>
  2. #include <windows.h>
  3. #include <conio.h>
  4. using namespace std;
  5.  
  6. void gotoxy ( int x, int y ) {
  7.     HANDLE hcon;
  8.     hcon = GetStdHandle ( STD_OUTPUT_HANDLE );
  9.     COORD dwPos;
  10.     dwPos.X = x;
  11.     dwPos.Y = y;
  12.     SetConsoleCursorPosition ( hcon, dwPos );
  13. }
  14.  
  15. int main () {
  16.     char mapa[17][27] = {
  17.         {"+-----+-----+-----+-----+"},
  18.         {"| \\   |   / | \\   |   / |"},
  19.         {"|  \\  |  /  |  \\  |  /  |"},
  20.         {"|   \\ | /   |   \\ | /   |"},
  21.         {"+-----+-----+-----+-----+"},
  22.         {"|   / | \\   |   / | \\   |"},
  23.         {"|  /  |  \\  |  /  |  \\  |"},
  24.         {"| /   |   \\ | /   |   \\ |"},
  25.         {"+-----+-----+-----+-----+"},
  26.         {"| \\   |   / | \\   |   / |"},
  27.         {"|  \\  |  /  |  \\  |  /  |"},
  28.         {"|   \\ | /   |   \\ | /   |"},
  29.         {"+-----+-----+-----+-----+"},
  30.         {"|   / | \\   |   / | \\   |"},
  31.         {"|  /  |  \\  |  /  |  \\  |"},
  32.         {"| /   |   \\ | /   |   \\ |"},
  33.         {"+-----+-----+-----+-----+"}
  34.     };
  35.    
  36.    
  37.     for ( int y = 0; y < 17; y++ ) {
  38.         for ( int x = 0; x < 27; x++ ) {
  39.             cout << mapa[y][x];
  40.         }
  41.         cout << endl;
  42.     }
  43.    
  44.     int x = 0;
  45.     int y = 16;
  46.     int cx = 0;
  47.     int cy = 0;
  48.    
  49.     //inicia em:
  50.     gotoxy ( 0, 16 );
  51.     printf ( "T" );
  52.    
  53.     int ch;
  54.     while ( ( ch = _getch() ) ) {
  55.         if ( ch == 27 ) {
  56.             return 0;
  57.         }
  58.         if ( ch == 72 ) {
  59.             //cout << "up" << endl;
  60.             if ( y > 0 ) {
  61.                 gotoxy ( x, y );
  62.                 printf ( "+" );
  63.                 y = y - 4;
  64.                 gotoxy ( x, y );
  65.                 printf ( "T" );
  66.             }
  67.            
  68.         } else if ( ch == 75 ) {
  69.             //cout << "left" << endl;
  70.             if ( x > 0 ) {
  71.                 gotoxy ( x, y );
  72.                 printf ( "+" );
  73.                 x = x - 6;
  74.                 gotoxy ( x, y );
  75.                 printf ( "T" );
  76.             }
  77.            
  78.         } else if ( ch == 77 ) {
  79.             //cout << "right" << endl;
  80.             if ( x <= 20 ) {
  81.                 gotoxy ( x, y );
  82.                 printf ( "+" );
  83.                 x = x + 6;
  84.                 gotoxy ( x, y );
  85.                 printf ( "T" );
  86.             }
  87.            
  88.            
  89.         } else if ( ch == 80 ) {
  90.             //cout << "down" << endl;
  91.             if ( y <= 12 ) {
  92.                 gotoxy ( x, y );
  93.                 printf ( "+" );
  94.                 y = y + 4;
  95.                 gotoxy ( x, y );
  96.                 printf ( "T" );
  97.             }
  98.            
  99.         } else {
  100.             gotoxy ( x, y );
  101.             printf ( "+" );
  102.             cx = x;
  103.             cy = y;
  104.             gotoxy ( x, y );
  105.             printf ( "T" );
  106.             x = cx;
  107.             y = cy;
  108.         }
  109.        
  110.     }
  111.    
  112.     cin.ignore();
  113.     return 0;
  114. }

Esto era para un juego llamado bagachal que obviamente no lo termine ya que era solo por tema de otro usuario que pedía una idea, observe como no imprimo todo el mapa si no que solo la 'T' que puedes mover con las fleshas, esa es la idea.

Puedes implementar un gotoxy tuyo, además la función system ("cls") es muy lenta, es obvio, la consola no esta para hacer jueguitos, en internet hay funciones proprias que son más efectivas(rápidas) a la hora de borrar la pantalla, pero repito, borrar toda la pantalla no es la solución.

Lo que sí puede que te convenga echar un ojo, es a una librería muy muy buena para eso que se llama miniwin, o incluso podrías hacerla con SFML o SDL.

Echa una mirada aquí y si te gusta pues seria muy fácil usar miniwin: http://www.forosdelweb.com/f96/dibujar-c-1105137/