#include #include #include #include #include // sentidos de movimiento de la serpiente typedef enum {DERECHA, ARRIBA, IZQUIERDA, ABAJO} sentido_mov_t; // tamaño de la pantalla #define MAX_X 79 #define MAX_Y 23 // procedimiento principal int main() { int tecla; // tecla pulsada sentido_mov_t sentido_mov = DERECHA; // sentido del movimiento int x_serpiente = 20, y_serpiente = 10; // pos. de la cabeza de la serpiente // limpia la pantalla clrscr(); // configura el teclado para que los caracteres estén disponibles // sin necesidad de pulsar la tecla (raw_mode) y no se muestren // en pantalla (disable_echo) set_raw_mode(); disable_echo(); // en un lazo infinito observa si hay una tecla pulsada y mueve // la serpiente en la dirección correcta while(1) { // espera hasta que el usuario pulse una tecla tecla = getchar(); // cambia sentido del movimiento. En MaRTE OS las flechas del teclado // corresponden a los números 4(izq), 8(arr), 6(der) y 2(aba) switch(tecla) { case '4': sentido_mov = IZQUIERDA; break; case '8': sentido_mov = ARRIBA; break; case '6': sentido_mov = DERECHA; break; case '2': sentido_mov = ABAJO; break; } // dibuja la serpiente en rojo set_text_color(RED); // lo que era cabeza se convierte en parte de la cola set_cursorxy(x_serpiente, y_serpiente); printf("+"); // calcula la nueva posición de la cabeza, si se sale por el borde de // la pantalla, continúa por el otro extremo switch(sentido_mov) { case DERECHA: if (x_serpiente == MAX_X) x_serpiente = 0; else x_serpiente++; break; case IZQUIERDA: if (x_serpiente == 0) x_serpiente = MAX_X; else x_serpiente--; break; case ARRIBA: if (y_serpiente == 0) y_serpiente = MAX_Y; else y_serpiente--; break; case ABAJO: if (y_serpiente == MAX_Y) y_serpiente = 0; else y_serpiente++; break; } // dibuja la cabeza en su nueva posición set_cursorxy(x_serpiente, y_serpiente); printf("*"); } }