Книга: Delphi. Учимся на примерах

Полный исходный код модуля

Полный исходный код модуля

Полный исходный код программного модуля игры "Угадывание чисел" представлен в листинге 9. 1.

Листинг 9.1. Программный модуль игры "Угадывание чисел"

unit Unit1;
interface
uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls;
type TForm1 = class(TForm)
 Button1: TButton;
 Label1: TLabel;
 Label2: TLabel;
 start : TEdit;
 finish: TEdit;
 Label3: TLabel;
 pl1: TLabel;
 ch1: TEdit;
 pl2: TLabel;
 ch2: TEdit;
 comp: TCheckBox;
 Button2: TButton;
 x: TLabel;
 znak1: TLabel;
 znak2: TLabel;
 procedure FormCreate(Sender: TObject);
 procedure compClick(Sender: TObject);
 procedure Button1Click(Sender: TObject);
 procedure Button2Click(Sender: TObject);
private
 { Private declarations }
 procedure min();
 procedure max();
public
 { Public declarations }
end;
var
 Form1: TForm1;
 num, j, i, kolvo, big, small: integer;
 maximum, minimum: array [1..100] of integer; {массивы максимальных и минимальных чисел}
implementation
{$R *.dfm}
//процедура нахождения наименьшего числа
procedure TForm1.min();
begin
 for i:=1 to kolvo do begin
  for j:=1 to kolvo do begin
   {Если число меньше наименьшего, то оно становится наименьшим}
   if minimum[j] > small then small:= minimum[j];
  end;
 end;
end;
//процедура нахождения наибольшего числа
procedure TForm1.max();
var temp: integer;
begin
 temp:= StrToInt(finish.Text);
 for i:=1 to kolvo do begin
  for j:=1 to kolvo do begin
   if temp > maximum[j] then
    if maximum[j] > 0 then temp:= maximum[j]; {если число больше наибольшего…}
  end;
 end;
 if ( (temp<>0) and (temp<>StrTolnt(finish.Text)) ) then
  {… и если число входит в допустимый диапазон, то оно становится наибольшим}
  big:= temp;
end;
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;
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;
end.

? Все файлы проекта и исполняемый файл рассмотренной программы находятся на прилагаемом к книге компакт-диске в папке Chapter09.

Оглавление книги


Генерация: 0.032. Запросов К БД/Cache: 0 / 0
поделиться
Вверх Вниз