% Hangman in Turing
% Coded by Johnny F
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
var input : string % User's guess
var puzzle, puzzleCaps : string := "" % Phrase to guess, Phrase in all caps
var unString, unDisplay : string := "" % Phrase with underlines, To display
var bodyCount : int := 0 % # of errors
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Procedure centers text and displays it at current row as per Text.Whatrow
proc PutCenter (inputString : string)
locate (Text.WhatRow, (maxcol div 2) - (length (inputString) div 2))
put (inputString)
end PutCenter
% Draws a hangman
% xLeftFoot - x position of left foot
% yLeftFoot - y position of left foot
% headRad - radius of head
% legHeight - height of legs in pixels
% torsoHeight - height of torso
% footToTorso - distance of foot to torso (center) horizontally
% armsOut - how far out the arms are horizontally (in pixels)
% armsVertOffset - 0 will set arms straight, another number will allow offset
% state - a value from 0-6. 0 = no hangman, 1 = head, 2 = torso, 3 = r arm, 4 = l arm, 5 = r leg, 6 = l leg
% example call... DrawHangman (100,120,10,50,45,15,50,-10,6,10)
proc DrawHangman (xLeftFoot : int, yLeftFoot : int, headRad : int, legHeight : int, torsoHeight : int, footToTorso : int, armsOut : int, armsVertOffset : int, state : int, colorOf : int)
% Left Leg (6)
if bodyCount > 5 then
Draw.Line (xLeftFoot, yLeftFoot, xLeftFoot + footToTorso, yLeftFoot + legHeight, colorOf)
end if
% Right Leg (5)
if bodyCount > 4 then
Draw.Line (xLeftFoot + footToTorso * 2, yLeftFoot, xLeftFoot + footToTorso, yLeftFoot + legHeight, colorOf)
end if
% Left Arm (4)
if bodyCount > 3 then
Draw.Line (xLeftFoot + footToTorso, yLeftFoot + legHeight + (torsoHeight - (torsoHeight div 6)), (xLeftFoot + footToTorso) - armsOut, (yLeftFoot + legHeight + (torsoHeight - (torsoHeight
div 6))) + armsVertOffset, colorOf)
end if
% Right Arm (3)
if bodyCount > 2 then
Draw.Line (xLeftFoot + footToTorso, yLeftFoot + legHeight + (torsoHeight - (torsoHeight div 6)), (xLeftFoot + footToTorso) + armsOut, (yLeftFoot + legHeight + (torsoHeight - (torsoHeight
div 6))) + armsVertOffset, colorOf)
end if
% Torso (2)
if bodyCount > 1 then
Draw.Line (xLeftFoot + footToTorso, yLeftFoot + legHeight, xLeftFoot + footToTorso, (yLeftFoot + legHeight) + torsoHeight, colorOf)
end if
% Head (1)
if bodyCount >= 1 then
Draw.Oval (xLeftFoot + footToTorso, yLeftFoot + legHeight + torsoHeight + headRad, headRad, headRad, colorOf)
end if
end DrawHangman
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Set colors
View.Set ("graphics:max;max")
RGB.SetColor (1, 0.11328125, 0.15234375, 0.1953125) % Dark blue
RGB.SetColor (2, 0.90234375, 0.99609375, 0.234375) % Bright lime
colourback (1)
colour (2)
cls
% Welcome Screen
%include "welcomeScreen.t"
% Prompt user for phrase to be used FIXME - hangman not showing up!
DrawHangman (100, 600, 10, 40, 30, 15, 10, -20, 6, white)
delay (2000)
locate (2, 3)
put "Please enter the phrase to be used:"
locate (3, 3)
get puzzle : *
% Convert puzzle to puzzleCaps
for i : 1 .. length (puzzle)
if ord (puzzle (i)) > 96 and ord (puzzle (i)) < 123 then
puzzleCaps := puzzleCaps + chr (ord (puzzle (i)) - 32)
else
puzzleCaps := puzzleCaps + puzzle (i)
end if
end for
% Create underline string, store in unString
for i : 1 .. length (puzzleCaps)
if ord (puzzleCaps (i)) > 64 and ord (puzzleCaps (i)) < 91 then
unString := unString + "_"
else
unString := unString + puzzleCaps (i)
end if
end for
loop
% set up unDisplay for centering
unDisplay := ""
for i : 1 .. length (unString)
unDisplay := unDisplay + unString (i) + " "
end for
cls
% Draw Hangman
DrawHangman (100, 120, 10, 40, 30, 15, 10, -20, bodyCount, 2)
% Draw gallows
Draw.Box (100,100,200,200,2)
% Put underlines on third row
locate (3, 1)
PutCenter (unDisplay)
% Prompt for input (guess)
locate (5, 1)
PutCenter ("Enter your guess. (FIXME - in caps for now)")
get input
% Convert input to caps
% If letter is there then go through and change unString
if index (puzzleCaps, input) > 0 then
for i : 1 .. length (puzzleCaps)
if puzzleCaps (i) = input then
unString := unString (1 .. i - 1) + input + unString (i + 1 .. *)
end if
end for
elsif index (puzzleCaps, input) = 0 then
bodyCount += 1
end if
end loop
|