Ver Mensaje Individual
  #4 (permalink)  
Antiguo 05/07/2014, 11:34
Avatar de leosansan
leosansan
 
Fecha de Ingreso: mayo-2012
Ubicación: GRAN CANARIA
Mensajes: 194
Antigüedad: 12 años
Puntos: 49
Respuesta: Problema Snake

Cita:
Iniciado por L3m0n Ver Mensaje
.................................................. ...
Cada vez que se mueve el "snake" tengo que volver a imprimir toda la cuadricula en la cual esta y queda bastante feo, hay alguna manera de imprimir simplemente aquellos lugares donde esta el snake y no tener que borrar la pantalla entera y volverla a imprimir?
Si estas en Windows puedes usar la API con las funciones gotoxy y color.

Te paso un código de muestra donde incluso cambio el tamaño de la consola:

Código C++:
Ver original
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4. #include <windows.h>
  5. #define FIL 7
  6. #define COL 8
  7.  
  8. void color (int n);
  9. int gotoxy(int x, int y);
  10.  
  11. int main (){
  12.  
  13.   int i=0,j=0,fil=1,col=1;
  14.   system("MODE 60,35");
  15.   char a[7][8];
  16.   system ("pause");
  17.   system ("cls");
  18.   for (i=0;i<15;i++){
  19.     gotoxy (10+2*i,10);
  20.     printf ("*" );
  21.   }
  22.   Sleep (2000);
  23.   for (i=0;i<15;i++){
  24.     Sleep (250);
  25.     gotoxy (10+2*i,10);
  26.     printf ("X" );
  27.   }
  28.  
  29.  
  30.  
  31.   puts("\n\n");
  32.   system ("pause");
  33.   system ("cls");
  34.   for (i=0;i<27;i++)
  35.     printf ( "* ");
  36.   putchar ('\n');
  37.   for (i=0;i<27;i++){
  38.     Sleep(150);
  39.     gotoxy (2*i,0);
  40.     printf ( "X ");
  41.   }
  42.   for (i=0;i<27;i++){
  43.     Sleep(100);
  44.     gotoxy (2*i,4);
  45.     printf ( "X");
  46.   }
  47.   for (i=0;i<6;i++){
  48.     for (j=0;j<6;j++){
  49.       gotoxy (2*j+6,i+6);
  50.       printf ( "* ");
  51.     }
  52.   }
  53.   for (i=0;i<6;i++){
  54.     for (j=0;j<6;j++){
  55.       Sleep(250);
  56.       gotoxy (2*j+6,i+6);
  57.       printf ( "X");
  58.     }
  59.   }
  60.   putchar ('\n');
  61.   system ("pause");
  62.   system ("cls");
  63.   for (i=0;i<7;i++){
  64.     a[i][7]='\0';
  65.     for (j=0;j<7;j++){
  66.       if(j>=i-1 && j<i+1 && j>0 && j<6 && i<6)
  67.         a[i][j]='X';
  68.       else if(i==0 || j==0 || i==6 || j==6 )
  69.         a[i][j]='*';
  70.       else
  71.         a[i][j]='0';
  72.     }
  73.   }
  74.   putchar ('\n');
  75.   for (i=0;i<7;i++){
  76.     a[i][7]='\0';
  77.     for (j=0;j<7;j++){
  78.       if((i==j || j==i-1) && i>0 && j<6 && j>0 && i<6)
  79.         a[i][j]='X';
  80.       else if(i==0 || j==0 || i==6 || j==6 )
  81.         a[i][j]='*';
  82.       else
  83.         a[i][j]='0';
  84.     }
  85.   }
  86.   gotoxy (0,10);
  87.   for (i=0;i<7;i++){
  88.     for (j=0;j<7;j++){
  89.       printf ("%c ",a[i][j]);
  90.     }
  91.     putchar ('\n');
  92.   }
  93.   system ("pause");
  94.  
  95.   for (i=0;i<7;i++)
  96.     printf ("%s\n",a[i]);
  97.   system ("pause");
  98.   gotoxy (0,0);
  99.  
  100.   for (i=0;i<7;i++){
  101.     for (j=0;j<7;j++){
  102.       printf ("%c ",a[i][j]);
  103.     }
  104.     putchar ('\n');
  105.   }
  106.   fil=1,col=1;
  107.   while  (1){
  108.     Sleep(1000);
  109.     if (fil==FIL-2 && col==COL-3){
  110.       gotoxy (2*col,fil);
  111.       printf("%c ",'F');
  112.       break;
  113.     }
  114.     else if (a[fil+1][col]=='X' && fil<FIL){
  115.       color(215);
  116.       gotoxy (2*col,fil);
  117.       printf("%c ",'F');fil++;
  118.     }
  119.     else if (a[fil][col+1]=='X' && col<COL){
  120.       color(215);
  121.       gotoxy (2*(col),fil);
  122.       printf("%c ",'F');col++;
  123.     }
  124.     else if (a[fil-1][col]=='X' && fil>0){
  125.       color(215);
  126.       gotoxy (2*(col),fil);
  127.       printf("%c ",'F');fil--;
  128.     }
  129.     else if (a[fil][col-1]=='X' && col>0){
  130.       color(215);
  131.       gotoxy (2*col,fil);
  132.       printf(" %c ",'F');col--;
  133.     }
  134.   }
  135.   gotoxy (0,30);
  136.   printf ( "*** Final! ***\n\n");
  137.   color(7);
  138.   system("pause");
  139.   return 0;
  140. }
  141.  
  142. void color (int n)
  143. {
  144.         SetConsoleTextAttribute(GetStdHandle (STD_OUTPUT_HANDLE), n );
  145. }
  146.  
  147.  
  148. int gotoxy(int x, int y)
  149. {
  150.    COORD coord;
  151.    HANDLE h_stdout;
  152.  
  153.    coord.X = x;
  154.    coord.Y = y;
  155.  
  156.    if ((h_stdout = GetStdHandle(STD_OUTPUT_HANDLE)) == INVALID_HANDLE_VALUE)
  157.       return 0;
  158.  
  159.    if (SetConsoleCursorPosition(h_stdout, coord) == 0)
  160.       return 0;
  161.  
  162.    return 1;
  163. }

Otra opción es usar la librería conio2.h, hace lo mismo de manera más simple y "creo" que también va en Linux.

Las dos opciones es para no entrar en librerías de mayor "peso", aunque sean más "poderosas".

¡¡¡Saluditos!!!