program Hangman;
{$APPTYPE CONSOLE}
uses
SysUtils, strutils;
type
TBoard = array[1..30] of String[1];
TMan = array[1..6] of string;
var
Word:string;
Guess:string[1];
guessno:integer;
Guesses:array[1..26] of string[1];
WordLength, X:Integer;
Characters:array[1..30] of string[1];
Board:TBoard;
WordsFile:TextFile;
NoWords, WordSelect:Integer;
Words:array[1..200] of string;
Win:Boolean;
man:TMan;
Inp:String;
lives:integer;
Lose:boolean;
guessright:boolean;
Procedure ReadFile;
begin
assignfile(WordsFile, 'C:\Users\Jack\Code\Hangman\Words.txt');
reset(WordsFile);
X:=1;
while not eof(WordsFile) do
begin
Readln(WordsFile, Words[X]);
Words[X]:=Lowercase(Words[X]);
X:=X+1;
end;
NoWords:=x-1;
Closefile(WordsFile);
end;
procedure Start;
begin
writeln('HANGMAN!');
Writeln(' _____ ');
Writeln(' | | ');
Writeln(' | O ');
Writeln(' | /|\');
Writeln(' | / \');
Writeln(' |______');
Writeln;
Writeln;
end;
Procedure MakeImages;
begin
if lives=0 then
begin
man[1]:='_____ ';
Man[2]:='| | ';
Man[3]:='| O ';
Man[4]:='| /|\';
Man[5]:='| / \';
Man[6]:='|______';
end;
if lives=1 then
begin
man[1]:='_____ ';
Man[2]:='| | ';
Man[3]:='| O ';
Man[4]:='| /|\';
Man[5]:='| ';
Man[6]:='|______';
end;
if lives=2 then
begin
man[1]:='_____ ';
Man[2]:='| | ';
Man[3]:='| O ';
Man[4]:='| | ';
Man[5]:='| ';
Man[6]:='|______';
end;
if lives=3 then
begin
man[1]:='_____ ';
Man[2]:='| | ';
Man[3]:='| O ';
Man[4]:='| ';
Man[5]:='| ';
Man[6]:='|______';
end;
if lives=4 then
begin
man[1]:='_____ ';
Man[2]:='| | ';
Man[3]:='| ';
Man[4]:='| ';
Man[5]:='| ';
Man[6]:='|______';
end;
if lives=5 then
begin
man[1]:='_____ ';
Man[2]:='| ';
Man[3]:='| ';
Man[4]:='| ';
Man[5]:='| ';
Man[6]:='|______';
end;
if lives=6 then
begin
man[1]:=' ';
Man[2]:='| ';
Man[3]:='| ';
Man[4]:='| ';
Man[5]:='| ';
Man[6]:='|______';
end;
if lives=7 then
begin
man[1]:=' ';
Man[2]:=' ';
Man[3]:=' ';
Man[4]:=' ';
Man[5]:=' ';
Man[6]:=' ______';
end;
end;
procedure GetWord;
begin
randomize;
Lives:=7;
WordSelect:=random(NoWords-1)+1;
Word:=words[wordselect];
WordLength:=length(Word);
for X := 1 to WordLength do
Begin
Characters[X]:= Midstr(Word, X, 1);
End;
Guessno:=1;
end;
Procedure ClearBoard;
begin
for X :=1 to 30 do
Board[X]:='_';
for X:=1 to 26 do
Guesses[x]:='';
end;
Procedure DisplayBoard;
begin
write('Used : ');
for x:=1 to 26 do
Write(guesses[x], ' ');
Writeln;
for X:=1 to 6 do
Writeln(' ', man[x]);
for X :=1 to WordLength do
Write(Board[X], ' ');
Writeln;
end;
Procedure Gues;
begin
write('Guess: ');
Readln(guess);
guess:=lowercase(guess);
Guesses[Guessno]:=guess;
Guessright:=false;
for X := 1 to WordLength do
begin
if Characters[X] = Guess then
begin
Board[X]:=Guess;
Guessright:=true;
end;
end;
if Guessright=false then
Lives:=Lives-1;
Guessno:=Guessno+1;
end;
Procedure CheckIfWon;
begin
Win:=True;
for X:=1 to WordLength do
begin
if Board[X]= '_' then
Win:=false;
end;
end;
Procedure CheckIfLost;
begin
Lose:=False;
if Lives=0 then
lose:=true;
end;
begin
ReadFile;
Start;
repeat
GetWord;
ClearBoard;
MakeImages;
DisplayBoard;
repeat
Gues;
makeImages;
DisplayBoard;
CheckIfWon;
CheckIfLost;
until (Win=True) or (lose=true);
if Win=true then
Writeln('You got the word! You win!');
if Lose=true then
begin
writeln('Looks Like your dead mate...');
Write('The word was ');
for X := 1 to WordLength do
Begin
write(Characters[X]);
End;
Writeln;
end;
Writeln('play again? (Y/N)');
Readln(inp);
until (inp= 'n') or (inp='N');
end.