Unit DMHelpXP;



Interface

Uses

  Crt;

const

  NumItems: integer = 0;

  MaxNumItems: integer = 30;

var

  XPValue: array[1..30] of longint;

  Description: array[1..30] of string;



Procedure XPTracker;



Implementation



Var

  Option: integer;

  Code: integer;

  UserInput: string;

Const

  StartDisp: integer = 1;



{*************************************************************************}

Procedure Wait;

var

  pause: char;

begin

  writeln;

  write('Hit Enter to continue...');

  readln(pause);

end;



{*************************************************************************}

Procedure DisplayMT;

var

  TotalXP: longint;

  DispMT: integer;

  StopDisp: integer;

  XPAdd: integer;

begin

  clrscr;

  if StartDisp > NumItems then StartDisp := 1;

  StopDisp := StartDisp + 9;

  if StopDisp > NumItems then StopDisp := NumItems;

  for DispMT := StartDisp to StopDisp do

    writeln(DispMT,') ',Description[DispMT],':  ',XPValue[DispMT]);

  writeln;

  TotalXP := 0;

  for XPAdd := 1 to NumItems do

    TotalXP := TotalXP + XPValue[XPAdd];

  writeln('Total XP for ',NumItems,' items:  ',TotalXP);

  writeln;

end;

{*************************************************************************}

Procedure WriteGetOptions;

type

   OptionsArray = array[1..4] of string;

const

  Options: OptionsArray = (

    '1)  Enter Monster and/or Treasure',

    '2)  Delete Monster and/or Treasure',

    '3)  Display Next 10 Monster/Treasure Descriptions',

    '4)  Quit to Main Menu'

    );

  NumOptions: integer = 4;

var

  OptionNum: integer;

  OptionChar: char;

begin

  for OptionNum := 1 to NumOptions do

    writeln(Options[optionNum]);

  repeat

    writeln;

    write('Option:  ');

    OptionChar := readkey;

    writeln(OptionChar);

    val(OptionChar, Option, code)

  until Option in [1..NumOptions];

end;



{***************************************************************************}

Procedure AddMT;

begin

  writeln;

  If NumItems + 1 > MaxNumItems then

    begin

      writeln('Maximum number of items already loaded.');

      wait;

      exit;

    end;

  NumItems := NumItems + 1;

  write('Description:  ');

  readln(Description[NumItems]);

  write('Experience Point Value:  ');

  readln(UserInput);

  val(UserInput,XPValue[NumItems],code);

end;



{***************************************************************************}

Procedure DelMT;

var

  Deleted: integer;

  CleanUp: integer;

begin

  writeln;

  write('Delete which Monster/Treasure [0 to exit]:  ');

  readln(UserInput);

  val(UserInput,Deleted,code);

  if (Deleted <= 0) or (Deleted > NumItems) then exit;

  NumItems := NumItems - 1;

  for Cleanup := Deleted to NumItems do

    begin

      Description[Cleanup] := Description[Cleanup + 1];

      XPValue[CleanUp] := XPValue[CleanUp + 1];

    end;

end;

{***************************************************************************}

{***************************************************************************}

{***************************************************************************}

Procedure XPTracker;

var

  Quit: boolean;

begin

  repeat

    Quit := false;

    DisplayMT;

    WriteGetOptions;

    Case Option of

      1:  AddMT;

      2:  DelMT;

      3:  StartDisp := StartDisp + 10;

      4:  Quit := true;

    end;

  until Quit;

end;

end.