Program Hanger;
{a simple hangman-pascalsource by Seabert SoftWare, 1996}
{comments & suggestions : jjtaks@cs.ruu.nl}

Uses
 Crt, WinDos;

Var
 Words: Array[1..100] of String;
 Sizes: Array[1..100] of Integer;
 PlayWord, ChLine, word: String[10];
 Ch: Char;
 WordFile: Text;
 i, j, lgt, Max, ChLgt: Integer;

Function ReadFile( FileName: String): Boolean;
 begin
  if ( FileName = '') then
   ReadFile := False
  else
   begin
    ReadFile := True;
    i := 0;
    Assign( WordFile, FileName)
    Reset( WordFile);
     While( not( EoF( WordFile))) do
      begin
       Inc( i);
       ReadLn( WordFile, word);
       Words[i] := word;
       ReadLn( WordFile, lgt);
       Sizes[i] := lgt;
      end;
    Max := i;
    Close( WordFile);
   end;
 end;

Function ChooseWord: Boolean;
 begin
  Repeat
   Randomize;
   j := Random( Max);
  Until (( j > 0) and ( j <= Max));
  PlayWord := Words[j];
  ChLgt := Sizes[j];
   if ( PlayWord <> '') then
    ChooseWord := True
   else
    ChooseWord := False;
 end;

Procedure InitArrays;
 begin
  for i := 1 to 100 do
   begin
    Words[i] := '';
    Sizes[i] := 0;
   end;
 end;

Procedure GamePlay;

 Procedure ClrWord;
  begin
   For i := 1 to 10 do
    PlayWord[i] := '';
  end;

 Procedure SetChLine;
  begin
   For i := 1 to 10 do
    ChLine[i] := '-';
  end;

 begin
  SetChLine;
  Repeat
   GoToXY( 15, 3);
    For i := 1 to Max do
     Write(ChLine[i]);
   GoToXY( 1, 3);
   Write('Enter a character: ');
   ReadLn( Ch)
    For i := 1 to Max do
     begin
      if ( Ch = PlayWord[i]) then
       ChLine[i] := Ch;
     end;
    if ( ChLine = PlayWord) then
     begin
      GoToXY( 15, 1);
      Write('You got it!');
     end;
  Until ( ChLine = PlayWord);
 ClrScr;
 ClrWord;
SetChLine;
end;

Begin
 ClrScr;
 Repeat
 InitArrays;
  if ( ReadFile( 'WORDS.TXT') = True) then
   begin
    if ( ChooseWord = True) then
     GamePlay
    else
     begin
      WriteLn('No words found.');
      Halt(1);
     end;
   end
  else
   begin
    WriteLn('Unable to read file WORDS.TXT.');
    Halt(1);
   end;
  Write(' Again? ');
  ReadLn( Ch);
 Until ( UpCase( Ch) = 'N');
End.

{ WORDS.TXT ( example):
  ape
  3
  book
  4
  circle
  6
}

------ SeaBert -------------
| E-Mail: jjtaks@cs.ruu.nl | 
------ C-Bert --------------


    Source: geocities.com/siliconvalley/2926/tpsrc

               ( geocities.com/siliconvalley/2926)                   ( geocities.com/siliconvalley)