Program av;
uses crt, graph, Carts;
const m_ok = '!!! Felicitari, ati ghicit !!! :-)';
      m_er = 'Cu parere de rau, azi nu va mers :-(';
      k_exit = ['x', 'X', #27];
      k_aleg = ['1'..'3'];
      n_valet = 'V';
      n_as    = 'As';

var gd, gm: integer;
    n,c,i: integer;
    t: array[1..3] of TCarte;
    k: char;

procedure TextInLine(pad, line: integer; msg: string; center: boolean);
begin
   if center then inc(pad, (GetMaxX-TextWidth(msg)) shr 1);
   line := line * (5+TextHeight('M')) + 5;
   OutTextXY(pad, line, msg);
end;

procedure CartIn3(pos: byte; n: TNumeCarte; m: TMaste);
begin
   DrowCart(n, m, (GetMaxX-c_width*3-20) shr 1 + (pos-1)*(c_width+10), (GetMaxY -c_height)shr 1);
end;

BEGIN CLRSCR;
  {Initializarea modului grafic}
  gd := DETECT;
  InitGraph(gd, gm, '');
  if GRaphResult <> grOk then begin
     writeln('Eroare initializare mod grafic!');
     ReadKey;
     Exit;
  end;

  SetBkColor(8);
  SetColor(YELLOW);

  c_style_verso := 10;

  randomize;
  c := 3;
  while c > 1 do with t[c] do begin
    maste := random(2);
    nume := n_valet;
    dec(c);
  end;

 repeat
   TextInLine(1, 0, 'Salut! Va propun un joc pentru copii:', true);
   TextInLine(1, 1, 'Sunt trei carti: Asul si 2 Valeti. Ghiciti unde se ascunde asul!', true);
   TextInLine(1, 3, 'Alegerea pe 1-3, iesire pe X sau ESC.', true);

   t[c].nume  := n_valet;
   t[c].maste := random(2);
   c := random(3)+1;
   inc(t[c].maste, 2);
   t[c].nume := n_as;

  for i := 1 to 3 do
    CartIn3(i, chr(i+ord('0')), c_verso);

  repeat k := UpCase(ReadKey) until k in k_exit + k_aleg;
  if k in k_exit then Break;
  i := ord(k) - ord('0');
  with t[i] do CartIn3(i, nume, maste);
  if i = c then
      OutTextXY((GetMaxX-TextWidth(m_ok)) shr 1, (GetMaxY+c_height)shr 1+10, m_ok)
  else begin
      OutTextXY((GetMaxX-TextWidth(m_er)) shr 1, (GetMaxY+c_height)shr 1+10, m_er);
      k := UpCase(ReadKey);
      if k in k_exit then Break;
      with t[c] do CartIn3(c, nume, maste);
  end;
  k := ReadKey;
  ClearViewPort;
 until UpCase(k) in k_exit;

  CloseGraph;
end.
