PROGRAM GuessNumber;
{$MODE OBJFPC}{$H+}{$J-}
USES
Crt, SysUtils, Keyboard;
Function KeyInput: Char;
Var
Key: TKeyEvent;
Begin
InitKeyBoard;
Try
Key:= GetKeyEvent;
Key:= TranslateKeyEvent(Key);
Result:= GetKeyEventChar(Key);
Finally
DoneKeyBoard;
End;
End;
Function IsValidNumber(str: String): Boolean;
Var
iNum: Integer;
Begin
Result:= False;
If Length(str) > 4 Then Exit;
If TryStrToInt(str, iNum) And (Length(str) = 4)
Then Result:= True;
End;
Function WaitForEscOrEnter: Char;
Begin
Repeat
Result:= KeyInput;
Until (Result = #27) Or (Result = #13);
End;
Procedure Play;
Var
booQuit, booGameOver: Boolean;
strNum, strFound, strRandomNum, strRightFalse: String;
i, ix, iCount, iRound, iFound: Integer;
Begin
booQuit:= False;
RANDOMIZE;
While Not booQuit // Main Menu Loop
Do
Begin
ClrScr;
WriteLn('==============');
WriteLn(' GUESS NUMBER');
WriteLn('==============');
WriteLn;
WriteLn('ESC = QUIT');
WriteLn('ENTER = START');
If WaitForEscOrEnter = #27 // ESC
Then Break
Else
Begin
iRound:= 0;
strRandomNum:= IntToStr(1000+Random(8999));
booGameOver := False;
While Not booGameOver // Game Loop
Do
Begin
ClrScr;
WriteLn('==============');
WriteLn(' GUESS NUMBER');
WriteLn('==============');
WriteLn;
WriteLn('Input A Valid 4Digit-Number:');
ReadLn(strNum);
If IsValidNumber(strNum)
Then
Begin
Inc(iRound);
If SameText(strNum, strRandomNum)
Then
Begin
ClrScr;
booGameOver:= True;
WriteLn('==============');
WriteLn(' GUESS NUMBER');
WriteLn('==============');
WriteLn;
WriteLn('>> SUCCESS <<'+sLineBreak+
IntToStr(iRound)+' Round(s)');
WriteLn('Right Number: '+strRandomNum);
WriteLn;
WriteLn;
End
Else
Begin
strRightFalse:= '';
strFound := '';
iCount:= 0;
iFound:= 0;
For i:= 1 To 4
Do
Begin
If strNum[i] = strRandomNum[i]
Then strRightFalse:= strRightFalse+' RIGHT '
Else strRightFalse:= strRightFalse+' FALSE ';
End;
For i:= 1 To strNum.Length
Do
For ix:= 1 To strRandomNum.Length
Do
Begin
Inc(iCount);
If strNum[i] = strRandomNum[ix]
Then Inc(iFound);
If iCount = 4
Then
Begin
iCount := 0;
strFound:= strFound+' '+IntToStr(iFound)+'x ';
iFound := 0;
End;
End;
WriteLn;
//WriteLn(strRandomNum); // CheatMode On/Off :-)
WriteLn('ROUND '+IntToStr(iRound));
WriteLn;
WriteLn(' '+strNum[1]+' '+strNum[2]+' '+
strNum[3]+' '+strNum[4]);
WriteLn(strRightFalse);
WriteLn;
WriteLn(' FOUND FOUND FOUND FOUND');
WriteLn(strFound);
WriteLn;
WriteLn;
End;
If Not booGameOver
Then
Begin
WriteLn('ESC = MAIN MENU');
WriteLn('ENTER = TRY AGAIN');
If WaitForEscOrEnter = #27 // ESC
Then Break;
End
Else
Begin
WriteLn('ENTER Or ESC = MAIN MENU');
If WaitForEscOrEnter = #27 // ESC
Then Break
Else Break;
End;
End; // IsValidNumber
End; // Game Loop
End; // Start Game
End; // MainMenu Loop
End;
BEGIN
Play;
END.