{Ben Allen
Master Mind Program
10/28/96}
uses
crt;
var
cfn,csn,ctn,cln,ufn,usn,utn,uln,guess,pcor,ncor,x,ans,uinput,count:integer;
chec:boolean;
{-------------Generates a welcome start up screen---------------}
procedure start;
begin
clrscr;
gotoxy (27,10);
writeln ('Welcome to Number Puzzler 1.0');
gotoxy (25,11);
writeln ('This program is for 1 or 2 players');
gotoxy (19,12);
writeln('In 1 player mode, the computer will generate a');
gotoxy (13,13);
writeln (' 4 digit number using different numbers between 1 and 9.');
gotoxy (22,14);
writeln ('The object of the game is to guess the');
gotoxy (22,15);
writeln (' number in the least number of tries.');
gotoxy (17,16);
writeln ('In 2 player mode, Player 1 will make up a 4 digit');
gotoxy (20,17);
writeln (' number and Player 2 will try to guess it.');
gotoxy (31,18);
writeln ('Press Enter to Begin');
readln;
end;
{-------------Generates Computer Secret Num---------------}
procedure secretnum (var cfn,csn,ctn,cln:integer);
{cfn- Computer first num,csn-Computer second num,
ctn-Computer third nun,cln-Computer last num}
begin
cfn:=random (9) +1;
repeat
csn:=random (9) +1;
until csn <> cfn;
repeat
ctn:=random (9) +1;
until (ctn <> cfn) and (ctn <> csn);
repeat
cln:=random (9) +1;
until (cln <> cfn) and (cln <> csn) and (cln <> ctn);
end;
{-----------------Asks user for a number---------------------}
procedure user (var uinput:integer);
begin
write ('Enter a four digit number repeating none of the digits: ');
readln (uinput);
end;
{--------Divides 4 digit num into 4 seperate digits----------}
procedure seperate (var fn,sn,tn,ln:integer; ug:integer);
begin
fn:=ug div 1000;
sn:=(ug div 100)mod 10;
tn:=((ug div 10)mod 100)mod 10;
ln:=((ug mod 1000)mod 100)mod 10;
end;
{------------Checks to see if all 4 numbers are different---------------}
procedure check (var checker:boolean; fn,sn,tn,ln,input:integer);
begin
if (fn=sn) or (fn=tn) or (fn=ln) or (sn=tn) or (sn=ln) or (tn=ln) or
(input>9876) then
checker:=false
else
checker:=True;
end;
{------------Compares User num to Computer num---------------}
procedure compare (fn,sn,tn,ln:integer; var ncorrect,pcorrect:integer);
begin
ncorrect:=0;
pcorrect:=0;
if (fn=cfn) or (fn=csn) or (fn=ctn) or (fn=cln) then
ncorrect:=ncorrect+1;
if (sn=cfn) or (sn=csn) or (sn=ctn) or (sn=cln) then
ncorrect:=ncorrect+1;
if (tn=cfn) or (tn=csn) or (tn=ctn) or (tn=cln) then
ncorrect:=ncorrect+1;
if (ln=cfn) or (ln=csn) or (ln=ctn) or (ln=cln) then
ncorrect:=ncorrect+1;
if fn = cfn then
pcorrect:=pcorrect+1;
if sn = csn then
pcorrect:=pcorrect+1;
if tn = ctn then
pcorrect:=pcorrect+1;
if ln = cln then
pcorrect:=pcorrect+1;
end;
{=================================================================}
begin
count:=0;
start;
clrscr;
randomize;
chec:=true;
write ('Would like a one player or two player game? ');
readln (ans);
if ans = 1 then
secretnum (cfn,csn,ctn,cln)
else
begin
repeat
user (uinput);
seperate (cfn,csn,ctn,cln,uinput);
check (chec,cfn,csn,ctn,cln,uinput);
if chec=false then
begin
writeln ('Sorry that is an invalid number.');
writeln ('Number must not contain 2 of the same digit or more than 4 digits.');
end;
until chec=True;
clrscr;
end;
gotoxy (1,23);
writeln (' Guess a 4 digit number');
writeln ('Using digits between 1 and 9', 'Correct Numbers':20,
'Correct Placement':26);
repeat
count:=count+1;
repeat
read (guess);
seperate (ufn,usn,utn,uln,guess);
check (chec,ufn,usn,utn,uln,guess);
if chec=false then
begin
writeln ('Sorry that is an invalid number.');
writeln ('Number must not contain 2 of the same digit or more than 4 digits.');
end;
until chec=True;
compare (ufn,usn,utn,uln,ncor,pcor);
gotoxy (10,24);
write (ncor:32);
writeln (pcor:25);
until (ufn = cfn) and (usn = csn) and (utn = ctn) and (uln = cln);
writeln ('Congratulations, You Win. The Number was ', cfn,csn,ctn,cln,'.');
writeln ('It took you ',count, ' guesses');
readln;
readln;
end.
               (
geocities.com/~franzglaser)