He modificado un poco tu programa y en Mint con el MATE Terminal solo me da un problema: cuándo maximizo la ventana no muestra todo el tablero y el menú hasta que se pulsa una tecla, pero eso ya es del funcionamiento del propio terminal.
Ahí va el código:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define alto 25
#define ancho 25
void escribir(int pasos);
void imprimir_tablero();
void imprimir_datos_lapiz();
void pintar_casilla();
typedef enum {
NORTE,
ESTE,
SUR,
OESTE
} direccion_t;
typedef enum {
LEVANTADO,
BAJADO
} estado_t;
struct {
unsigned x;
unsigned y;
direccion_t direccion;
estado_t estado;
} lapiz;
int plano[alto][ancho];
int main(void) {
int op = 0;
int pasos;
while (op != 9) {
imprimir_datos_lapiz();
imprimir_tablero();
puts("Introduzca una opcion"); puts("1) Levantar lapiz"); puts("3) Girar a la derecha"); puts("4) Girar a la izquierda"); puts("5) Desplazar lapiz");
switch (op) {
case 1:
lapiz.estado = LEVANTADO;
pintar_casilla();
break;
case 2:
lapiz.estado = BAJADO;
pintar_casilla();
break;
case 3:
if(lapiz.direccion == OESTE)
lapiz.direccion = NORTE;
else
lapiz.direccion++;
break;
case 4:
if(lapiz.direccion == NORTE)
lapiz.direccion = OESTE;
else
lapiz.direccion--;
break;
case 5:
printf("Introduzca la cantidad de pasos que desea dar: "); escribir(pasos);
break;
case 9:
printf("Gracias por usar el programa! \n"); break;
}
}
return 0;
}
void pintar_casilla() {
plano[lapiz.y][lapiz.x] = lapiz.estado;
}
void escribir(int pasos) {
switch(lapiz.direccion) {
case NORTE:
for(; pasos > 0; pasos--) {
if(lapiz.y > 0) {
lapiz.y--;
pintar_casilla();
}
}
break;
case ESTE:
for(; pasos > 0; pasos--) {
if(lapiz.x < (ancho - 1)) {
lapiz.x++;
pintar_casilla();
}
}
break;
case SUR:
for(; pasos > 0; pasos--) {
if(lapiz.y < (alto-1)) {
lapiz.y++;
pintar_casilla();
}
}
break;
case OESTE:
for(; pasos > 0; pasos--) {
if (lapiz.x > 0) {
lapiz.x--;
pintar_casilla();
}
}
break;
}
}
void imprimir_datos_lapiz() {
char direcc[6];
char est[10];
switch(lapiz.direccion) {
case 0:
break;
case 1:
break;
case 2:
break;
case 3:
break;
}
if(!lapiz.estado)
else
printf("Lapiz: %9s | %5s | x = %i | y = %i\n", est
, direcc
, lapiz.
x, lapiz.
y); }
void imprimir_tablero() {
int i, j;
for (i = 0; i < alto; i++) {
for (j = 0; j < ancho; j++) {
if(lapiz.y == i && lapiz.x == j )
else if(plano[i][j] == 0)
else
}
}
}