Игра "Поймай меня"

На одном из занятий по изучению объектно-ориентированных языков программирования, на примере языка Visual Basic, нам предложили написать небольшую шуточную игру. Суть игры состоит в том, чтобы поймать кнопку, которая хаотически движется по экрану. И я сразу же решил перевести данную игру в язык программирования Delphi.

Описание игры:

При запуске программы примерно в центре экрана располагается обыкновенная кнопка с заголовком "Поймай меня". При старте игры эта кнопка начинает беспорядочно перемещаться по форме. Если игроку удается поймать кнопку, то игра приостанавливается, и заголовок кнопки меняется на "Готово". В свою же очередь попробуем добавить к игре несколько функций, например, паузу и выбор уровней сложности. Движущаяся кнопка будет перемещаться по случайным координатам, которые ей будут задаваться в обработчике события истечения интервала времени таймера. Для того чтобы игрок не смог перейти на кнопку клавишей Tab и тем самым нажать на нее при помощи клавиатуры, свойству TabStop кнопки необходимо задать значение False. И так создадим новый проект и положим на форму следующие компоненты:
  • 1. Кнопка btnStart - Начало игры;
  • 2. Кнопка btnPause - Возможная пауза в игре;
  • 3. Кнопка btnGet - Кнопка, которую нужно ловить;
  • 4. Timer;
  • 5. Меню:
    • mnuEasy - Легкий уровень сложности;
    • mnuNormal - Средний уровень сложности;
    • mnuHard - Тяжелый уровень сложности;
  • 6. Кнопка btnClose - Выход из игры;

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

procedure TForm1.FormCreate(Sender: TObject);
begin
 Timer1.Enabled:=False;
 btnGet.Caption:='Поймай' + #10 + 'Меня';
 btnGet.Enabled:=False;
 btnPause.Enabled:=False;
end;

А вот и сам обработчик события истечения интервала времени таймера. Кнопка будет перемещаться по 9 основным местам экрана. Число 15, которое добавляется к выражению для расчета координат, означает отступ от краев формы. В целом именно такие выражения для расчета координат расположения кнопок были придуманы для того, чтобы движущаяся кнопка не "уходила" за пределы видимой части формы.

procedure TForm1.Timer1Timer(Sender: TObject);
Var I: Integer;
begin
  Randomize;
  I:=Random(9);
  btnGet.Enabled:=True;
  btnGet.Top:=(15 + 100 * (I div 3));
  btnGet.Left:=(15 + 200 * (I mod 3));
end;

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

procedure TForm1.btnStartClick(Sender: TObject);
begin
 Timer1.Enabled:=True;
 btnGet.Enabled:=True;
 btnGet.Caption:='Поймай' + #10 + 'Меня';
 btnPause.Enabled:=True;
end;

Кнопка паузы. При нажатии на нее таймер становится не активным и движущаяся кнопка прекращает свое движение при этом ее заголовок меняется на "Пауза". При повторном нажатии процесс игры начинается с последней заданной позиции.

procedure TForm1.btnPauseClick(Sender: TObject);
begin
 If Timer1.Enabled = True Then
   Begin
     Timer1.Enabled:=False;
     btnGet.Enabled:=False;
     btnGet.Caption:='Пауза';
   End
 Else
   If Timer1.Enabled = False Then
     Begin
       Timer1.Enabled:=True;
       btnGet.Enabled:=True;
       btnGet.Caption:='Поймай' + #10 + 'Меня';
     End;
end;

Обработчик события нажатия на движущуюся кнопку. После того как движущаяся кнопка была поймана игроком процесс игры приостанавливается, и заголовок кнопки меняется на "Готово".

procedure TForm1.btnGetClick(Sender: TObject);
begin
 Timer1.Enabled:=False;
 btnGet.Caption:='Готово';
 btnGet.Enabled:=False;
end;

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

procedure TForm1.mnuNormalClick(Sender: TObject);
begin
 Timer1.Interval:=600;
end;

procedure TForm1.mnuEasyClick(Sender: TObject);
begin
 Timer1.Interval:=800;
end;

procedure TForm1.mnuHardClick(Sender: TObject);
begin
 Timer1.Interval:=300;
end;

Выход из программы.

procedure TForm1.btnCloseClick(Sender: TObject);
begin
 Close;
end;

Вернуться в оглавление
Вернуться на главную страницу
Hosted by uCoz