anchor.diff:  (* Simple jeu réalise par Mohamed Aziz Knani 
    * Email : medazizknani@gmail.com
    * Blog  : http://mohamedazizknani.wordpress.com
  + * Sorry for the spaghetti code :v
    *)
   
   program theGame; 
  -uses ncurses;
  -
  +uses ncurses,strings;
  +{$H+}
   type
     Ship = record 
     posx       : integer;
     shape      : string;
     ammunition : integer;
  -  ammupos    : array [1..50] of byte; { contient la postion des missiles }
  +  ammupos    : array [1..100] of byte; { contient la postion des missiles }
     end;
   
     Enemy = record
     shape : char;
     nbr   : integer;
  -  enepos : array[1..50] of byte; {contient la postion des ennemies}
  +  enepos : array[1..100] of byte; {contient la postion des ennemies}
     end;
   
   var
     max_y, max_x : integer; { les resolutions de la fenetre }
  -  BShip  : Ship;
  -  BEnemy : Enemy;
  -  rk     : integer;
  -  i, k   : integer; { des compteurs pour ralentir }
  +  BShip            : Ship;
  +  BEnemy           : Enemy;
  +  rk               : integer;
  +  i, k, new_x, new_y             : integer; { des compteurs pour ralentir }
  +  dashboard, field : Pwindow;
   
   function newPos(Posi : char) : integer;
   begin
  -  if (Posi = 'L')  and (1+BShip.posx <= max_x) then
  +  if (Posi = 'L')  and (3+BShip.posx <= max_x) then
       newPos := 1+BShip.posx
  -  else if (Posi = 'R') and (BShip.posx-1 >= 0) then
  +  else if (Posi = 'R') and (BShip.posx-2 >= 0) then
       newPos := BShip.posx-1
     else newPos := BShip.posx;
   end;
  
positive.code:   initscr();
    noecho();
    curs_set(0);
    init(BShip);
    getmaxyx(stdscr, max_y, max_x);  {stdscr est la fenetre par default}
    { des petits problemes sous les terminal linux (XFCE et Gnome) 
      un decalage d'un pixel (ou c'est juste moi) a essayer sous windows}
    Dec(max_y); Dec(max_x);
    i := 0; k:=0;
    { la procedure permet de ne pas attendre l'utilisateur d'entrer une touche
      par contre elle retourne ERR si il n'entre rien}
    nodelay(stdscr, true);
    while True do begin
      Inc(i); Inc(k);
      clear();
      rk := getch();
      case rk  of 
        67 : BShip.posx :=newPos('L');
  
negative.code:       32 : begin
               with BShip do
                 if ammunition > 0 then begin
                   ammupos[posx] := max_y-5;
                   Dec(ammunition);
                 end;
               Shoot(BShip);
             end;
      end; 
      { nettoyage la fenetre field }
      wclear(field);
      wclear(dashboard);
      drawBox(field);
      drawBox(dashboard);
      //mvwprintw(field, 1, 1, 'Field');
      mvwprintw(dashboard, 1, max_x div 2 , PChar(concat('| Ammo : ', IntToStr(BShip.ammunition))));
      // refresh each window
      wrefresh(field);
      wrefresh(dashboard);
      mvprintw(max_y-5, BShip.posx, 'O');
      refresh;
      if (BEnemy.nbr > 0) then begin
        randomize;
        BEnemy.enepos[random(max_x)+1] := 2;
        Dec(BEnemy.nbr);
      end;
      Shoot(BShip);
      //Enemys(BEnemy);
      {un petit dodo pour 3 millisecondes}
      napms(5);
    end;
    endwin();
  END.
  