Примеры программ Delphi (Lazarus).

Динамическая игра "Тараканьи бега"




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


Panel1 - беговая дорожка, её лучше сделать белого цвета;
Edit1и Edit2 - в эти редакторы будут вводиться имена болельщиков;
Button1 - кнопка "Старт", Button2 - кнопка "Сброс";
Label1 и Label2 - будут отображать путь пройденный жучками (в пикселях);
Timer - (объект находится на закладке System) необходим для создания перемещения жучков.
На компоненты Image1и Image2 установим картинки с изображением жучков. Картинки можно нарисовать в редакторе Pant или скачать представленные здесь:
    
Для скачивания картинок, следует навести курсор на картинку, нажать правую кнопку мыши и в меню выбрать "Сохранить изображение как :". Картинки желательно сохранить в папку с проектом.
Для установки картинок на объекты Image, следует в свойствах выбрать пункт "Picture", нажать маленькую кнопку справа, затем на панели Picture Editor нажать кнопку Load. Для того чтобы фон картинок сделать прозрачным, следует в свойствах выбрать пункт Transparent и сделать его True.
Далее, создадим двойным щелчком на форме событие FormCreate.
В редакторе кода, сначала допишем (выделено синим) глобальные переменные:

var
Form1: TForm1;
//Это уже создано
flag: integer; //флаг нужен для включения/выключения таймера
x1, x2, z : integer; //x1,x2 - координаты жучков, z - для вычисления очков победителя.

Само событие FormCreate будет выглядеть так (выделенное синим цветом, дописываем самостоятельно):

procedure TForm1.FormCreate(Sender: TObject);
begin

edit1.Text:= 'Вася';
edit2.Text:= 'Петя';
Label1.Caption:= '';
Label2.Caption:= '';
Button1.Caption:= 'Старт';
Button2.Caption:= 'Сброс';
Flag:= 0;
//Задаём начальные координаты для жучков
x1:= 5;
x2:= 5;
//Устанавливаем жучков в начальные координаты
Image1.Left:= x1;
Image2.Left:= x2;
end;

Запустим программу и убедимся, что интерфейс соответствует рисунку:



Далее, создадим событие для кнопки "Сброс":

procedure TForm1.Button2Click(Sender: TObject);
begin
//Задаём начальные координаты для жучков
x1:= 5;
x2:= 5;
//Устанавливаем жучков в начальные координаты
Image1.Left:= x1;
Image2.Left:= x2;
Flag:= 0; //Таймер выключен
Label1.Caption:= '0';
Label2.Caption:= '0';
end;

Затем создадим событие для кнопки "Старт":

procedure TForm1.Button1Click(Sender: TObject);
begin

flag:= 1; //Включаем таймер
end;

Далее нам следует определиться на какое расстояние должны переместиться жучки, дойдя до финиша. Для этого нужно выделить картинку с любым жучком и переместить до конца панели вправо. В свойствах Left будет указано положение картинки, например (как в примере автора) 650 пикселей. Это значение следует запомнить.
Настроим заданный интервал для таймера. В свойствах таймера, в строке Interval, установим значение 50 (это означает, что частота тиков таймера будет 50 миллисекунд). Осталось использовать таймер для перемещения жучков. Для этого на пиктограмме таймера дважды щёлкнем мышью и допишем строки события:

procedure TForm1.Timer1Timer(Sender: TObject);
begin

if flag = 0 then exit else //Если таймер остановлен то уходим
begin
//Включаем генератор случайных чисел
randomize;
//Задаём смещение для 1 жучка
x1:= x1 + random(10);
Image1.left:= x1;
label1.caption:= IntToStr(x1);
//Задаём смещение для 2 жучка
randomize;
x2:= x2 + random(10);
Image2.left:= x2;
label2.caption:= IntToStr(x2);
//Проверяем, дошел ли какой из жучков до финиша
if (x1 >= 650) or (x2 >= 650) then
begin
//Если финиш, то подсчитываем очки победителя
if x1 > x2 then z:= x1 - x2 else
z:= x2 - x1;
flag:= 0;
if x1 > x2 then showmessage('Выигрыш ' +Edit1.Text + ' со счётом '+IntToStr(z))
else showmessage('Выигрыш ' +Edit2.Text + ' со счётом '+IntToStr(z))
end;
end;
end;

Запускаем программу, нажимаем "Сброс" затем "Старт" и убеждаемся, что программа работает:





  
©Гуков Константин Михайлович 2006 - 2015     Почта: [email protected]