Kniga-Online.club
» » » » Сергей Парижский - Delphi. Учимся на примерах

Сергей Парижский - Delphi. Учимся на примерах

Читать бесплатно Сергей Парижский - Delphi. Учимся на примерах. Жанр: Программирование издательство -, год 2004. Так же читаем полные версии (весь текст) онлайн без регистрации и SMS на сайте kniga-online.club или прочесть краткое содержание, предисловие (аннотацию), описание и ознакомиться с отзывами (комментариями) о произведении.
Перейти на страницу:

  {… и если число входит в допустимый диапазон, то оно становится наибольшим}

  big:= temp;

end;

Рассмотрим процедуру, которая будет выполняться при создании формы:

procedure TForm1.FormCreate(Sender: TObject);

begin

 Randomize; //включаем генератор случайных чисел

 //загадываем случайное число из заданного диапазона

 num:= Random(StrToInt(finish.Text) – StrToInt(start.Text)) + StrToInt(start.Text);

 kolvo:= 0; //обнуляем количество попыток

 big:= StrToInt(finish.Text); //самое большое число

 small:= StrToInt(start.Text); //самое маленькое число

end;

Сначала мы включаем генератор случайных чисел, затем выбираем случайное число из заданного диапазона, и в конце устанавливаем для компьютера диапазон в пределах от наименьшего до наибольшего числа. В дальнейшем мы будем постепенно сужать этот диапазон.

Самое главное событие — нажатие кнопки Принять вариант. Создадим для этого кнопки обработчик события OnClick:

procedure TForm1.Button2Click(Sender: TObject);

begin

 //увеличиваем количество попыток на единицу

 kolvo:= kolvo + 1;

 if not comp.Checked then //если идет игра с человеком

 begin

  if pl1.Enabled then begin //если ход первого игрока

  //если вариант больше загаданного числа, ставим знак >

  if StrToInt(ch1.Text) > num then znak1.Caption:= '>';

  //если вариант меньше загаданного числа, ставим знак <

  if StrToInt(ch1.Text) < num then znak1.Caption:= '<';

  if StrToInt(ch1.Text) = num then //если число угадано

  begin

   znak1.Caption:= '='; //изменим знак на "="

   //вместо знака "X" показываем загаданное число

   х.Caption:= IntToStr(num);

   //выводим сообщение о победе первого игрока

   ShowMessage('Победил первый игрок!' + #13#10 + 'Число угадано за ' + IntToStr(kolvo) + ' попытки')

  end;

  //передаем ход второму игроку

  pl1.Enabled:= False;

  ch1.Enabled:= False;

  ch2.Enabled:= True;

  pl2.Enabled:= True;

  Exit; //прерываем выполнение процедуры

 end;

 if pl2.Enabled then begin //если ход второго игрока

  {сравниваем загаданное число с вариантом второго игрока и ставим соответствующий знак}

  if StrToInt(ch2.Text) > num then znak2.Caption:= '>';

  if StrToInt(ch2.Text) < num then znak2.Caption := '<';

   if StrToInt(ch2.Text) = num then begin

    znak2.Caption := '=';

    x.Caption:= IntToStr(num);

    ShowMessage('Победил второй игрок!' + #13#10 + 'Число угадано за ' + IntToStr(kolvo) + ' попытки')

   end;

  end;

  //передаем ход первому игроку

  рl2.Enabled:= False;

  ch2.Enabled:= False;

  ch1.Enabled:= True;

  pl1.Enabled:= True;

  Exit;

 end;

 if comp.Checked then begin //если игра против компьютера

  {проверяем вариант первого игрока и ставим соответствующий знак}

  if StrToInt(ch1.Text) > num then znak1.Caption:= '>';

  if StrToInt(ch1.Text) < num then znak1.Caption:= '<';

  if StrToInt(ch1.Text) = num then begin

   znak1.Caption:= '=';

   x.Caption:= IntToStr(num);

   ShowMessage('Вы победили!' + #13#10 + 'Число угадано за ' + IntToStr(kolvo) + ' попытки');

   Exit;

  end;

  //если вариант первого игрока больше загаданного числа

  if znak1.Caption = '>' then begin

   maximum[kolvo]:= StrToInt(ch1.Text); {добавляем в массив наибольших чисел вариант первого игрока}

   max();

   //ищем наибольшее число

  end;

  //если вариант первого игрока меньше загаданного числа

  if znak1.Caption = '<' then begin

   minimum[kolvo]:= StrToInt(ch1.Text); {добавляем число в массив наименьших чисел, выданных первым игроком}

   min();//ищем наименьшее число

   end;

   //после всех расчетов, компьютер выдает свой вариант

   ch2.Text:= IntToStr(Random(big– small)+ small);

  end;

  //проверяем вариант компьютера и ставим соответствующий знак

  if StrToInt(ch2.Text) > num then znak2.Caption:= '>';

  if StrToInt(ch2.Text) < num then znak2.Caption:= '<';

  if StrToInt(ch2.Text) = num then begin znak2.Caption:= '=' ;

  x.Caption:= IntToStr(num);

  ShowMessage('Вы проиграли!' + #13#10 + 'В этот раз победил компьютер!' + #13#10 + ' Число угадано за ' + IntToStr(kolvo) + ' попытки');

 end;

end;

По нажатию кнопки Принять вариант мы проверяем, какой режим игры установлен: с другим игроком или против компьютера. Если мы играем с человеком, то далее осуществляется проверка: кто из игроков выдал свой вариант. Если это был первый игрок, то мы сравниваем его вариант ответа с загаданным числом и после этого отображаем соответствующий знак или сообщаем о победе первого игрока, если числа равны. Затем мы блокируем ввод с клавиатуры для первого игрока и разрешаем ввести число второму игроку.

После того как второй игрок выдал свой вариант ответа, мы выполняем те же проверки, и, если число не угадано, вновь даем право попытаться угадать загаданное число первому игроку. После того как кто-то из игроков дает вариант ответа, мы пополняем счетчик kolvo, чтобы потом сообщить, сколько попыток использовалось, чтобы угадать число.

Если игра проходит против компьютера, то мы не разблокируем ввод второго игрока вообще. Там просто будут отображаться варианты, выдаваемые компьютером. Каждый раз, перед тем как компьютер решает, какой вариант ему выбрать, он анализирует вариант, выданный игроком. Если текущий вариант игрока больше загаданного числа, то мы добавляем текущий вариант первого игрока в массив наибольших чисел. В этом массиве ищется самое маленькое число среди наибольших.

Если текущий вариант игрока меньше загаданного числа, то мы добавляем его в массив наименьших чисел. В этом массиве ищется самое большое число среди наименьших. Тем самым мы постоянно сокращаем диапазон вариантов для компьютера. Все это продолжается до тех пор, пока игрок или компьютер не угадает загаданное число.

Для того чтобы можно было переключаться между режимами игры "с человеком" и "против компьютера", создадим обработчик события OnClick для флажка comp:

procedure TForm1.compClick(Sender: TObject);

begin

 if comp.Checked then begin //если флажок установлен

  //блокируем ввод от второго игрока

  ch2.Enabled:= False;

  рl2.Enabled:= False;

  //включаем ввод от первого игрока

  ch1.Enabled:= True;

  pl1.Enabled:= True;

 end

 else begin

  //если игра идет с человеком, то

  //включаем ввод для второго игрока

  ch2.Enabled:= True;

  рl2.Enabled:= True;

 end;

end;

Осталось только обработать нажатие кнопки Новая игра:

procedure TForm1.Button1Click(Sender: TObject);

begin

 if ((StrToInt(finish.Text) > StrToInt(start.Text)) and (StrToInt(start.Text) > 0) and (StrToInt(finish.Text) < 60000))

 then {проверяем, не выходит ли заданное пользователем число за допустимые пределы}

  {загадаем случайное число в заданном диапазоне}

  num:= Random(StrToInt(finish.Text) – StrToInt(start.Text)) + StrToInt(start.Text)

 else ShowMessage('Неверный диапазон!');

 //обнуляем все, и придаем программе начальный вид

 znak1.Caption:= '';

 znak2.Caption:= '';

 ch1.Enabled:= True;

 ch2.Enabled:= False;

 pl1.Enabled:= True;

 pl2.Enabled:= False;

 x.Caption:= 'X';

 ch1.Text:= '0';

 ch2.Text:= '0';

 //очистим массивы наибольших и наименьших чисел

 for i:= 1 to kolvo+1 do begin

  minimum[i]:= 0;

  maximum[i]:= 0;

  big:= StrToInt(finish.Text); //наибольшее число

  small:= StrToInt(start.Text); //наименьшее число

 end;

 kolvo:= 0; //количество использованных попыток

end;

После того как пользователь указал диапазон, в котором должно находиться случайное число, мы проверяем, не является ли конечное значение меньше начального. Проверяем также, не является ли начальное значение меньше нуля и не превышает ли конечное значение 60000. Если все нормально, то загадываем число в заданном диапазоне. После этого обнуляем все значения и приводим программу к начальному виду.

Перейти на страницу:

Сергей Парижский читать все книги автора по порядку

Сергей Парижский - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки kniga-online.club.


Delphi. Учимся на примерах отзывы

Отзывы читателей о книге Delphi. Учимся на примерах, автор: Сергей Парижский. Читайте комментарии и мнения людей о произведении.


Уважаемые читатели и просто посетители нашей библиотеки! Просим Вас придерживаться определенных правил при комментировании литературных произведений.

  • 1. Просьба отказаться от дискриминационных высказываний. Мы защищаем право наших читателей свободно выражать свою точку зрения. Вместе с тем мы не терпим агрессии. На сайте запрещено оставлять комментарий, который содержит унизительные высказывания или призывы к насилию по отношению к отдельным лицам или группам людей на основании их расы, этнического происхождения, вероисповедания, недееспособности, пола, возраста, статуса ветерана, касты или сексуальной ориентации.
  • 2. Просьба отказаться от оскорблений, угроз и запугиваний.
  • 3. Просьба отказаться от нецензурной лексики.
  • 4. Просьба вести себя максимально корректно как по отношению к авторам, так и по отношению к другим читателям и их комментариям.

Надеемся на Ваше понимание и благоразумие. С уважением, администратор kniga-online.


Прокомментировать
Подтвердите что вы не робот:*
Подтвердите что вы не робот:*