Cita:
Iniciado por L3m0n .................................................. ...
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#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <windows.h>
#define FIL 7
#define COL 8
void color (int n);
int gotoxy(int x, int y);
int main (){
int i=0,j=0,fil=1,col=1;
char a[7][8];
for (i=0;i<15;i++){
gotoxy (10+2*i,10);
}
Sleep (2000);
for (i=0;i<15;i++){
Sleep (250);
gotoxy (10+2*i,10);
}
for (i=0;i<27;i++)
for (i=0;i<27;i++){
Sleep(150);
gotoxy (2*i,0);
}
for (i=0;i<27;i++){
Sleep(100);
gotoxy (2*i,4);
}
for (i=0;i<6;i++){
for (j=0;j<6;j++){
gotoxy (2*j+6,i+6);
}
}
for (i=0;i<6;i++){
for (j=0;j<6;j++){
Sleep(250);
gotoxy (2*j+6,i+6);
}
}
for (i=0;i<7;i++){
a[i][7]='\0';
for (j=0;j<7;j++){
if(j>=i-1 && j<i+1 && j>0 && j<6 && i<6)
a[i][j]='X';
else if(i==0 || j==0 || i==6 || j==6 )
a[i][j]='*';
else
a[i][j]='0';
}
}
for (i=0;i<7;i++){
a[i][7]='\0';
for (j=0;j<7;j++){
if((i==j || j==i-1) && i>0 && j<6 && j>0 && i<6)
a[i][j]='X';
else if(i==0 || j==0 || i==6 || j==6 )
a[i][j]='*';
else
a[i][j]='0';
}
}
gotoxy (0,10);
for (i=0;i<7;i++){
for (j=0;j<7;j++){
}
}
for (i=0;i<7;i++)
gotoxy (0,0);
for (i=0;i<7;i++){
for (j=0;j<7;j++){
}
}
fil=1,col=1;
while (1){
Sleep(1000);
if (fil==FIL-2 && col==COL-3){
gotoxy (2*col,fil);
break;
}
else if (a[fil+1][col]=='X' && fil<FIL){
color(215);
gotoxy (2*col,fil);
}
else if (a[fil][col+1]=='X' && col<COL){
color(215);
gotoxy (2*(col),fil);
}
else if (a[fil-1][col]=='X' && fil>0){
color(215);
gotoxy (2*(col),fil);
}
else if (a[fil][col-1]=='X' && col>0){
color(215);
gotoxy (2*col,fil);
}
}
gotoxy (0,30);
printf ( "*** Final! ***\n\n"); color(7);
return 0;
}
void color (int n)
{
SetConsoleTextAttribute(GetStdHandle (STD_OUTPUT_HANDLE), n );
}
int gotoxy(int x, int y)
{
COORD coord;
HANDLE h_stdout;
coord.X = x;
coord.Y = y;
if ((h_stdout = GetStdHandle(STD_OUTPUT_HANDLE)) == INVALID_HANDLE_VALUE)
return 0;
if (SetConsoleCursorPosition(h_stdout, coord) == 0)
return 0;
return 1;
}
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!!!