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.

Рейтинг@Mail.ru

вверх гостевая; E-mail
Hosted by uCoz