program guess_number;
uses
crt;
var
x, y, guess, punkt, punkt2, level: Byte;otvet, cont: Boolean;ch, button: Char;
{**з*«® ЇҐаҐзЁб«Ґ*Ёп дг*ЄжЁ© Ё Їа®жҐ¤га}
procedure makewin(x1, y1, x2, y2, back, frame: byte; mess: String);
{Їа®жҐ¤га* Їа®аЁб®ўЄЁ ®Є®*. ЇҐаўлҐ зҐвлॠЇҐаҐ¬Ґ**лҐ ®Ў®§**з*ов Є®®а¤Ё**вл
¦Ґ«*Ґ¬®Ј® ®Є**. ЇаЁ н⮬ ҐбвҐб⢥**® **¤® зв®Ўл е2 *Ґ Ўл« Ўл ¬Ґ*миҐ е1
Ё зв®Ўл г2 *Ґ Ўл«® Ўл ¬Ґ*миҐ г1. ўв®алҐ ¤ўҐ ЇҐаҐ¬Ґ**лҐ н⮠梥в* д®**
Ё а*¬ЄЁ б ⥪б⮬. *г Ё Ї®б«Ґ¤*пп ЇҐаҐ¬Ґ***п нв® §*Ј®«®ў®Є ®Є**. Ґб«Ё
¬л *Ґ е®вЁ¬ ЇЁб*вм §*Ј®«®ў®Є, в® ў ўл§лў*о饩 нвг Їа®жҐ¤гаг бва®ЄҐ, **
¬Ґб⥠Ї®б«Ґ¤*Ґ© ЇҐаҐ¬Ґ**®© ЇЁиҐ¬ ''.}
var
i, j: Byte;
begin
textattr := (back * 16) + frame;
gotoxy(x1, y1);{ўҐае}
write(#201);
for i := x1 + 1 to x2 - 1 do
write(#205);
write(#187);
for i := y1 + 1 to y2 - 1 do{бҐаҐ¤Ё**}
begin
gotoxy(x1, i);
write(#186);
for j := x1 + 1 to x2 - 1 do
write(' ');
write(#186);
end;
gotoxy(x1, y2);{*Ё§}
write(#200);
for i := x1 + 1 to x2 - 1 do
write(#205);
write(#188);
j := (x1 + (x2 - x1) div 2) - (Length(mess) div 2);{ўлзЁб«пҐ¬ ЇаЁ¬Ґа*® бҐаҐ¤Ё*г
ўҐае*Ґ© Ї®«®бл ®Є** ¤«п **з*« ўлў®¤* §*Ј®«®ўЄ*. —Ёб«® §*ўЁбЁв ®в иЁаЁ*л
®Є** Ё ®в ¤«Ё**л б«®ў*.}
gotoxy(j, y1);{ЇҐаҐе®¤Ё¬ ** в®зЄг ўлзЁб«Ґ**го а**ҐҐ}
write(mess);{ЇЁиҐ¬ **и §*Ј®«®ў®Є}
end;
procedure makewin2(x1, y1, x2, y2, back, front: Byte; mess: String);{⮦Ґ зҐавЁв
®Є®иЄЁ *® а*¬Є* *Ґ ¤ў®©**п, *
®¤Ё**а**п.}
var
i, j: Byte;
begin
textattr := (back * 16) + front;
gotoxy(x1, y1);
write(#218);
gotoxy(x2, y1);
write(#191);
gotoxy(x1, y2);
write(#192);
gotoxy(x2, y2);
write(#217);
for i := x1 + 1 to x2 - 1 do
begin
gotoxy(i, y1);
write(#196);
end;
for j := y1 + 1 to y2 - 1 do
begin
gotoxy(x1, j);
write(#179);
for i := x1 + 1 to x2 - 1 do
write(' ');
write(#179);
end;
for i := x1 + 1 to x2 - 1 do
begin
gotoxy(i, y2);
write(#196);
end;
j := (x1 + (x2 - x1) div 2) - (Length(mess) div 2);
gotoxy(j, y1);
write(mess);
end;
procedure setupscreen;{ЇаЁў®¤Ё¬ нЄа** ў Єа*бЁўл© Ё§**з*«м*л© ўЁ¤}
begin
TextAttr := (cyan * 16) + darkgray;
ClrScr;
HighVideo;
end;
procedure setupscreen2;{ўЁ¤ нЄа*** Ї®б«Ґ Ї®ЎҐ¤л}
begin
TextAttr := (green * 16) + darkgray;
ClrScr;
HighVideo;
end;
procedure writeat(x, y, text, back: Byte; sentence: String);{Їа®жҐ¤га* ¤«п ўлў®¤* ⥪бв* ў
«оЎ®© в®зЄҐ нЄа*** б §*¤***л¬ жўҐв®¬}
begin
textcolor(text);
textbackground(back);
gotoxy(x, y);
write(sentence);
end;
function score(guessleft: Byte): Integer;{ўлзЁб«пҐ¬ ®зЄЁ §* Ї®ЎҐ¤г}
begin
case level of
1: score := guess * 10;
2: score := guess * 15;
3: score := guess * 20;
4: score := guess * 25;
end;
end;
function asknumber: Byte;{бЇа*иЁў*Ґ¬ зЁб«® г ЁЈа®Є*}
var
ch: Char;
str: String;
err: Integer;
a: Integer;
begin
repeat
str := '';
writeat(21, 17, 15, 0, ' ');
writeat(21, 17, 15, 0, '‚ўҐ¤ЁвҐ ў*и ў*аЁ**в(®в 1 ¤® 100): ');
repeat
repeat
ch := readkey; {бзЁвлў*Ґ¬ жЁдаг бва®ЄЁ ўўҐ¤Ґ**го Ї®«м§®ў*⥫Ґ¬}
Val(ch, a, err);{Їа®ўҐап¬ зЁб«® «Ё нв® Ё«Ё *Ґв}
if err = 0 then {Ґб«Ё зЁб«® в®...}
begin
if Length(str) < 3 then{Їа®ўҐаЄ* зв®Ўл бва®Є* ўў®¤* *Ґ ЇаҐўли*«* 3 бЁ¬ў®«®ў}
begin
write(ch);{ЇЁиҐ¬ нв®в бЁ¬ў®« Ґб«Ё нв® жЁда*}
if ch <> #13 then str := str + ch;{Є бва®ЄҐ str ЇаЁЇЁблў*Ґ¬ ўўҐ¤Ґ**л© бЁ¬ў®«}
end;
end;
until ch = #13; {§*Є**зЁў*Ґ¬ жЁЄ« Ґб«Ё Ўл« **¦*в ‚ў®¤ - Enter}
Val(str, a, err);{Ї®«гзЁўигобп Ё§ ®в¤Ґ«м*ле бЁ¬ў®«®ў бва®Єг str, ¬л
ЇҐаҐў®¤Ё¬ ў зЁб«®ў®© д®а¬*в.}
asknumber := a{ЇаЁбў*Ёў*Ґ¬ дг*ЄжЁЁ §**зҐ*ЁҐ Ї®«г稢襣®бп зЁб«* "*"}
until err = 0;{Ґб«Ё ў १г«мв*⥠ЇаҐўа*йҐ*Ёп бва®ЄЁ ў зЁб«® Їа®Ё§®и«* ®иЁЎЄ*,
в® Ґбвм ®¤Ё* Ё§ бЁ¬ў®«®ў *Ґ жЁда*, в® **зЁ**Ґ¬ жЁЄ« б*®ў*.
ЏаЁ ®вбгвбвўЁЁ ®иЁЎ®Є ЇҐаҐ¬Ґ***п err ЇаЁ*Ё¬*Ґв §**зҐ*ЁҐ "0",
Ё ¬л бЇ®Є®©*® ўл室Ё¬ Ё§ жЁЄ«*.}
until a < 101;{*® нв® ҐйҐ *Ґ ўбҐ - Ґб«Ё Ї®«г稢襥бп зЁб«® Ў®«миҐ 100, в®Ј¤*
**з*вм б б*¬®Ј® б*¬®Ј® **з*«*. ‘вҐаҐвм бва®зЄг §*Їа®б* зЁб«*
Ё **ЇЁб*вм §**®ў®.}
end;
function rand: ShortInt;{Є®¬ЇмовҐа §*Ј*¤лў*Ґв б«гз*©*®Ґ зЁб«®}
begin
Randomize;
rand := random(100);
end;
procedure blink(x, y, first, second: Byte; del: Integer; mess: String);{Їа®жҐ¤га* ¤«п ўлў®¤* ¬Ґаж*о饣® ⥪бв*}
begin
repeat
gotoxy(x, y);
textcolor(first);
write(mess);
delay(del);
gotoxy(x, y);
textcolor(second);
write(mess);
delay(del);
until keypressed;
end;
function compare(number, guess: Byte): String;{ба*ў*Ёў*Ґ¬ зЁб«® Ї®«м§®ў*⥫п
Ё зЁб«® §*Ј*¤***®Ґ Є®¬Ї®¬}
begin
if x = y then cont := false
else
begin
cont := true;
if (x < y) and (x <> y) then
compare := '‚*иҐ зЁб«® Ў®«миҐ'
else compare := '‚*иҐ зЁб«® ¬Ґ*миҐ';
end;
end;
procedure melody;{¬г§лзЄ* пЇ®*бЄ*п}
begin
sound(540);delay(30000);nosound;
sound(480);delay(10000);nosound;
sound(420);delay(20000);nosound;
sound(480);delay(20000);nosound;
sound(540);delay(10000);nosound;delay(10000);
sound(540);delay(10000);nosound;delay(10000);
sound(540);delay(30000);nosound;
sound(480);delay(10000);nosound;delay(10000);
sound(480);delay(10000);nosound;delay(10000);
sound(480);delay(30000);nosound;
sound(540);delay(10000);nosound;delay(10000);
sound(660);delay(10000);nosound;delay(10000);
sound(660);delay(30000);nosound;
sound(540);delay(20000);nosound;
sound(480);delay(20000);nosound;
sound(440);delay(40000);nosound;
end;
procedure result;{Їа®жҐ¤га* ¤«п ўлў®¤* १г«мв*в* ЇаЁ Їа®ЁЈалиҐ}
begin
if guess = 0 then
begin
setupscreen;
makewin(17, 6, 60, 20, 0, 15, '');
writeat(32, 13, 9, 0, '‚› ЏђЋ?ѓђЂ‹?...');
gotoxy(28, 17);textcolor(magenta);
writeln('‡*Ј*¤a*® Ўл«® зЁб«® ', x);
readkey;
end
else
begin
setupscreen2;
makewin(17, 6, 60, 20, 1, 14, '');
gotoxy(35, 17);
textcolor(12);
writeln('‘зсв: ', score(guess));
blink(33, 12, 14, 15, 30000, '‚› “ѓЂ„Ђ‹?!!!');
melody;
end;
end;
procedure finish;{Їа®жҐ¤га* ўлў®¤* Їа®й*«м*®Ј® нЄа***}
begin
setupscreen;
makewin(17, 6, 60, 20, 0, 15, '');
writeat(36, 13, 12, 0, 'ЏЋЉЂ!');
readln;
halt;
end;
function yesno: Boolean;{§*Їа®б Їа®¤®«¦Ёвм ЁЈаг Ё«Ё ўл©вЁ}
var
ch: Char;
begin
setupscreen;
makewin(17, 6, 60, 20, 0, 15, '');
writeat(28, 13, 14, 0, 'Ќ*з*вм б*®ў*(y/n)?: ');
repeat
ch := UpCase(readkey);
until (ch = 'Y') or (ch = 'N');
write(ch);writeln;readln;
if ch = 'N' then
begin
yesno := false;
finish;
end
else yesno := true;
end;
function colorchange(x, y: Byte; s: String): string;{ЇЁиҐв бва®Єг, Ї®ЇҐаҐ¬Ґ**® ¬Ґ*пп 梥в
ҐҐ н«Ґ¬Ґ*в®ў б ®¤*®Ј® ** ¤агЈ®©}
var
i: Byte;
begin
gotoxy(x, y);
for i := 1 to Length(s) do
if i mod 2 = 0 then
begin
textcolor(11);
write(s[i]);
end
else
begin
textcolor(7);
write(s[i]);
end;
end;
procedure ImagePunkt; forward;{нв® зв®Ўл Їа®жҐ¤гаг ўЁ¤*® Ўл«® ¤*«миҐ}
procedure Key; forward;
procedure game; forward;
procedure Menu;
var
ch: Char;
begin
makewin2(25, 9, 53, 17, 2, 4, '');
textcolor(15);
writeat(27, 10, 0, 2, '‘ЉЋ‹њЉЋ ‚ЂЊ „Ђ’њ ЏЋЏ›’ЋЉ?');
if punkt2 = 1 then
textbackground(1)
else textbackground(2);textcolor(15);
gotoxy(28, 12);write(' 8 Ї®Їлв®Є (*®а¬*) ');
if punkt2 = 2 then
textbackground(1)
else textbackground(2);textcolor(14);
gotoxy(28, 13);write(' 6 Ї®Їлв®Є (ваг¤*®) ');
if punkt2 = 3 then
textbackground(1)
else textbackground(2);textcolor(5);
gotoxy(28, 14);write(' 4 Ї®ЇлвЄЁ (*ў®бм..) ');
if punkt2 = 4 then
textbackground(1)
else textbackground(2);textcolor(4);
gotoxy(28, 15);write(' 2 Ї®ЇлвЄЁ (¦Ґбв®Є®) ');
end;
procedure Key2;
begin
while true do
begin
ch := readkey;
if ch = #0 then
begin
ch := readkey;
case ch of
#72:
begin
Dec(punkt2);
if punkt2 < 1 then
punkt2 := 4;
Menu;
end;
#80:
begin
Inc(punkt2);
if punkt2 > 4 then
punkt2 := 1;
Menu;
end;
end;
end
else if ch = #13 then
case punkt2 of
1:
begin
guess := 8;
level := 1;
Game;
end;
2:
begin
guess := 6;
level := 2;
Game;
end;
3:
begin
guess := 4;
level := 3;
Game;
end;
4:
begin
guess := 2;
level := 4;
Game;
end;
end;
end;
end;
procedure Rules;{ўлў®¤Ё¬ Їа*ўЁ«* ЁЈал}
begin
setupscreen;
makewin2(18, 7, 62, 20, 0, 0, '');
makewin2(16, 6, 60, 19, 6, 6, '');
writeat(19, 8, 9, 6, '„ЋЃђЋ ЏЋ†Ђ‹Ћ‚Ђ’њ ‚ ?ѓђ“');textcolor(yellow);
write(' "“ѓЂ„Ђ‰ —?‘‹Ћ"');
writeat(31, 10, 15, 6, 'Џа*ўЁ«* ЁЈал:');
writeat(19, 12, 11, 6, 'Љ®¬ЇмовҐа §*Ј*¤лў*Ґв зЁб«®. ‚л ¤®«¦*л');
writeat(19, 13, 11, 6, '§* в® Є®«ЁзҐбвў® Ї®Їлв®Є, Є®в®а®Ґ ўл');
writeat(19, 14, 11, 6, 'гбв**®ўЁвҐ ў ¬Ґ*о Ќ*бва®©ЄЁ ®вЈ*¤*вм ҐЈ®');
writeat(19, 15, 11, 6, '…б«Ё ў*¬ нв® г¤*бвбп, ў*¬ **зЁб«пв ®зЄЁ');
writeat(19, 16, 11, 6, 'ў §*ўЁбЁ¬®бвЁ ®в га®ў*п б«®¦*®бвЁ ЁЈал');
writeat(19, 17, 11, 6, 'Ё ®бв*ўиЁебп г ў*б Ї®Їлв®Є. “¤*зЁ!');
readkey;
setupscreen;{ўлаЁб®ўлў*Ґ¬ ®Є®иЄ® б Їа*ўЁ«*¬Ё ЁЈал Ё ¦¤Ґ¬ ®вўҐв* **зЁ**вм
Ё«Ё ЁЈаг Ё«Ё *Ґв}
makewin(17, 6, 60, 20, 0, 15, '');
ImagePunkt;
end;
procedure About;{ўлў®¤Ё¬ ®Є®иЄ® ® ᮧ¤*⥫Ґ Їа®Ја*¬¬л}
begin
setupscreen;
makewin2(18, 7, 62, 20, 0, 0, '');
makewin2(16, 6, 60, 19, 4, 4, '');
writeat(26, 10, 10, 4, 'Ђўв®а ЁЈал:');textcolor(14);write(' ђ*бЁ¬ Ђ«ЁҐў');
writeat(18, 12, 11, 4, '?Ја* Ўл«* ᮧ¤*** ў 2002 Ј®¤г б Ї®¬®ймо');
writeat(18, 13, 11, 4, 'Є®¬ЇЁ«пв®а* Turbo Pascal 7. ‚ᥠ§*¬Ґз**Ёп');
writeat(18, 14, 11, 4, 'Є*б*ойЁҐбп ЁЈал ¬®¦*® ЇаЁбл«*вм Ї® *¤аҐбг');
writeat(30, 15, 9, 4, 'rasim@rambler.ru');
readkey;
setupscreen;{ўлаЁб®ўлў*Ґ¬ ®Є®иЄ® б Їа*ўЁ«*¬Ё ЁЈал Ё ¦¤Ґ¬ ®вўҐв* **зЁ**вм
Ё«Ё ЁЈаг Ё«Ё *Ґв}
makewin(17, 6, 60, 20, 0, 15, '');
ImagePunkt;
end;
procedure ImagePunkt;{¬Ґ*пҐв 梥в д®** ўл¤Ґ«Ґ**®Ј® Їг*Єв* ¬Ґ*о}
begin
makewin2(25, 9, 53, 17, 2, 4, ' Ћ‘ЌЋ‚ЌЋ… Њ…Ќћ ');
textcolor(15);
if punkt = 1 then
textbackground(1)
else textbackground(2);
gotoxy(30, 11);write(' Ќ*з*вм ЁЈаг ');
if punkt = 2 then
textbackground(1)
else textbackground(2);
gotoxy(30, 12);write(' Џа*ўЁ«* ЁЈал ');
if punkt = 3 then
textbackground(1)
else textbackground(2);
gotoxy(30, 13);write(' Ћ ᮧ¤**ЁЁ ЁЈал ');
if punkt = 4 then
textbackground(1)
else textbackground(2);
gotoxy(30, 14);write(' Џ®б«ги*вм ¬г§лЄг ');
if punkt = 5 then
textbackground(1)
else textbackground(2);
gotoxy(30, 15);write(' ‚л室 ');
end;
procedure Key;
var
ch: Char;
begin
while true do
begin
ch := readkey;
if ch = #0 then
begin
ch := readkey;
case ch of
#72:
begin
Dec(punkt);
if punkt < 1 then
punkt := 5;
ImagePunkt;
end;
#80:
begin
Inc(punkt);
if punkt > 5 then
punkt := 1;
ImagePunkt;
end;
end;
end
else if ch = #13 then
case punkt of
1:
begin
punkt2 := 1;
Menu;
Key2;
end;
2: Rules;
3: About;
4: Melody;
5: Finish;
end;
end;
end;
procedure Game;
begin
setupscreen;{ЇЁиҐ¬ зв® Є®¬Ї §*Ј*¤*« зЁб«® Ё ЇаЁў®¤Ё¬ зЁб«® ®вЈ*¤®Є Є
**з*«м*®¬г зЁб«г 8 Ё Ї®¬Ґй*Ґ¬ ў ЇҐаҐ¬Ґ**го е §*Ј*¤***®Ґ зЁб«®}
makewin(17, 6, 60, 20, 0, 15, '');
writeat(27, 13, 3, 0, 'ЉЋЊЏњћ’…ђ ‡ЂѓЂ„Ђ‹ —?‘‹Ћ');
x := rand;
repeat {**з*«® ўв®а®Ј® жЁЄ«* Є®в®ал© Ўг¤Ґв Їа®¤®«¦*вмбп ¤® вҐе Ї®а, Ї®Є*
зЁб«® ў®§¬®¦*ле ®бв*ўиЁебп ®вўҐв®ў Ў®«миҐ 0. ’® Ґбвм, г ЁЈа®Є*
ҐйҐ Ґбвм ў®§¬®¦*®бвм ®вЈ*¤*вм зЁб«®.}
gotoxy(22, 17);textcolor(white);
y := asknumber; {Ї®¬Ґй*Ґ¬ ў ЇҐаҐ¬Ґ**го е зЁб«® Є®в®а®Ґ ЁЈа®Є ўўҐ«
ў ®вўҐв ** §*Їа®б}
setupscreen;
makewin(17, 6, 60, 20, 0, 15, '');
textcolor(lightcyan);
writeat(29, 13, 11, 0, compare(x, y));{ўл§лў*Ґ¬ Їа®жҐ¤гаг ба*ў*Ёў**Ёп Ё ЇЁиҐ¬
Ў®«миҐ «Ё зЁб«®-®вўҐв §*Ј*¤***®Ј® Ё«Ё
¬Ґ*миҐ}
if cont = false then break;{Ґб«Ё зЁб«® гЈ*¤**® ўҐа*® ЇаҐалў*Ґ¬ жЁЄ« Ё
ЇҐаҐе®¤Ё¬ ** бва®Єг 225, в® Ґбвм, ўл§лў*Ґ¬
Їа®жҐ¤гаг result}
Dec(guess);{㬥*ми*Ґ¬ Є®«ЁзҐбвў® ®бв*ўиЁебп ®вўҐв®ў ** Ґ¤Ё*Ёжг}
makewin(25, 23, 50, 25, 1, 14, '');
gotoxy(28, 24);textcolor(10);
writeln('Ћбв*«®бм ®вўҐв®ў: ', guess);
until guess = 0; {Є®*Ґж ўв®а®Ј® жЁЄ«*}
result;{ўл§лў*Ґ¬ Їа®жҐ¤гаг Є®в®а*п ў §*ўЁбЁ¬®бвЁ ®в в®Ј® гЈ*¤**® «Ё зЁб«®
Ё«Ё ¦Ґ Їа®бв® Є®*зЁ«®бм зЁб«® ¤®ЇгбвЁ¬ле ®вўҐв®ў ўлў®¤Ёв а*§*л©
нЄа**.}
if yesno = true then
begin
punkt := 1;
ImagePunkt;
Key;
end;
end;
{**з*«® ®б*®ў*®Ј® ⥫* Їа®Ја*¬¬л}
begin
setupscreen;{аЁб㥬 **з*«м*го §*бв*ўЄг}
makewin2(12, 4, 22, 8, 9, 9, '');
makewin2(12, 18, 22, 22, 4, 4, '');
makewin2(55, 4, 65, 8, 4, 4, '');
makewin2(55, 18, 65, 22, 9, 9, '' );
makewin(17, 6, 60, 20, 0, 15, ' - ЏаЁўҐв! - ');
writeat(35, 9, 12, 0, 'Ё Ј а *');
writeat(26, 12, 2, 0, '"“ ѓ Ђ „ Ђ ‰ — ? ‘ ‹ Ћ"');
colorchange(28, 15, '=-=-=-=-=-=-=-=-=-=-=');
blink(27, 18, 9, 14, 30000, 'Ќ*¦¬ЁвҐ «оЎго Є«*ўЁиг...');
readkey;
setupscreen;{ўлаЁб®ўлў*Ґ¬ ®Є®иЄ® б Їа*ўЁ«*¬Ё ЁЈал Ё ¦¤Ґ¬ ®вўҐв* **зЁ**вм
Ё«Ё ЁЈаг Ё«Ё *Ґв}
makewin(17, 6, 60, 20, 0, 15, '');
punkt := 1;
ImagePunkt;
Key;
end.