program kresleni;

uses
  crt;

const
  kurzor = #220;
  vypln  = #219;

type
  TBod = record
    x,y: byte;
  end;

var
  poz:   TBod;
  barvy: array [1..80,1..25] of byte;
  c:     char;

procedure Init;
begin
  clrscr;
  poz.x := 1;
  poz.y := 1;
  textcolor(white);
  write(kurzor);
end;

procedure Done;
begin
  textcolor(lightgray);
  clrscr;
end;

procedure Nahoru;
begin
  if (poz.y > 1) then begin
    gotoxy(poz.x, poz.y);
    textcolor(barvy[poz.x, poz.y]);
    write(vypln);
    dec(poz.y);
    gotoxy(poz.x, poz.y);
    textcolor(white);
    write(kurzor);
  end;
end;

procedure Dolu;
begin
  with poz do          { prikaz with umoznuje jednoduse pracovat se zaznamy }
    if (y < 25) then begin                 { srovnej s predchozi procedurou }
      gotoxy(x,y);
      textcolor(barvy[x,y]);
      write(vypln);
      inc(y);
      gotoxy(x,y);
      textcolor(white);
      write(kurzor);
    end;
end;

procedure Doprava;
begin
  with poz do
    if (x < 80) then begin
      gotoxy(x,y);
      textcolor(barvy[x,y]);
      write(vypln);
      inc(x);
      gotoxy(x,y);
      textcolor(white);
      write(kurzor);
    end;
end;

procedure Doleva;
begin
  with poz do
    if (x > 1) then begin
      gotoxy(x,y);
      textcolor(barvy[x,y]);
      write(vypln);
      dec(x);
      gotoxy(x,y);
      textcolor(white);
      write(kurzor);
    end;
end;

procedure ZmenBarvu(barva: byte);
begin
  barvy[poz.x, poz.y] := barva;
end;

begin
  Init;
  repeat
    c := readkey;
    case c of
      #27: break;
      '0'..'9': ZmenBarvu(ord(c) - ord('0'));
      'a'..'f': ZmenBarvu(ord(c) + 10 - ord('a'));
      'A'..'F': ZmenBarvu(ord(c) + 10 - ord('A'));
      #0: begin
        c := readkey;
        case ord(c) of
          72: Nahoru;
          80: Dolu;
          77: Doprava;
          75: Doleva;
        end;
      end;
    end;
  until false;
  Done;
end.