Pers.narod.ru. Алгоритмы. Игра "Угадай число" |
Программа, реализует следующую игру:
один игрок, в роли которого компьютер, задумывает
двузначное число, другой пытается его отгадать за минимальное
число попыток. После каждой попытки первый игрок сообщает второму
о том, больше или меньше названного задуманное число.
Эта игра известна как "Угадай число" или "Быки и коровы". Легко изменить диапазон чисел, "задумываемых" компьютером - просто укажите другое значение NMax.
program Guess;
uses Crt;
const ESC=#27; ENTER=#13; UP=#72; DOWN=#80;
NMax=100; {Верхняя граница чисел, можно поставить другую}
var Num,Input,Count,All,Balls:integer;
Ch:Char;
procedure WriteC (c,r:integer; s:char);
begin
GotoXy (c,r); Write (s);
end;
procedure Draw (c1,r1,c2,r2,text,back:integer);
{Заливка области экрана атрибутом}
var mem: ^byte;
c:byte;
i,j:integer;
begin
TextColor (text); TextBackGround (back);
for i:=c1 to c2 do for j:=r1 to r2 do begin
gotoxy (i,j);
write (' ');
end;
end;
procedure DrawWindow (c1,r1,c2,r2,bordcolor,bkcolor:integer);
{ Рисование окна по координатам от (c1,r1) до (c2,r2)
цветом bordcolor на фоне bkcolor }
var i:integer;
begin
Draw (c1,r1,c2,r2,bordcolor,bkcolor);
WriteC (c1,r1,'╔');
WriteC (c2,r1,'╗');
WriteC (c1,r2,'╚');
WriteC (c2,r2,'╝');
for i:=r1+1 to r2-1 do begin
WriteC (c1,i,'║');
WriteC (c2,i,'║');
end;
for i:=c1+1 to c2-1 do begin
WriteC (i,r1,'═');
WriteC (i,r2,'═');
end;
end;
procedure DefaultScreen;
begin
TextColor (LIGHTGRAY);
TextBackGround (BLACK);
ClrScr;
end;
begin
DefaultScreen;
All:=0;
Balls:=0;
Window (1, 1, 80, 25);
DrawWindow (5,5,75,20,yellow,blue);
Window (6, 6, 74, 19);
Writeln('УГАДАЙ ЧИСЛО!');
Writeln('-------------------------------------------------------');
Writeln('Программа, реализует следующую игру:');
Writeln('Один игрок,в роли которого компьютер, задумывает двузначное');
Writeln('число, другой - человек - пытается его отгадать за минимальное');
Writeln('число попыток. После каждой попытки первый игрок сообщает');
Writeln('второму о том, больше или меньше названного задуманное число.');
Writeln('-------------------------------------------------------');
Writeln('Очки начисляются в зависимости от числа попыток - чем');
Writeln('их меньше, тем больше очков Вы заработаете!');
WriteLn;
Randomize;
repeat
WriteLn ('Нажмите ESC для выхода или любую клавишу для игры...');
Ch:=UpCase(ReadKey);
if Ch=ESC Then Halt;
Count:=0;
Num:=Random (NMax-1)+1;
repeat
write ('Введите число или 0 для завершения партии:');
readln (Input);
Count:=Count+1;
if Input=0 then break
else if Input>Num then writeln ('Мое число меньше!')
else if Input<Num then writeln ('Мое число больше!')
else begin
Inc(All);
If Count<10 Then Balls:=Balls+(11-Count)*5;
writeln ('Вы угадали! Это ',Num);
writeln ('Ваше число попыток: ',Count);
writeln ('Число очков: ',Balls);
writeln ('Число партий: ',All);
break;
end;
until false;
until false;
DefaultScreen;
end.
|
|