Урок 26 - Создаем игру Ping-pong - часть(1/3)
Начинаем писать простенькую игру Пинг-Понг.
Думаю, смысл игры Пинг-Понг давно всем известен :). Создание этой игры я разделю на 3 части: простое перемещение и рикошеты от граней
формы, возможность отбивать шарик мышкой, искусственный интеллект (Противник).
Итак все что нам понадобится - это компонент Shape на вкладке Additional. Вытаскиваем его на форму и меняем свойство Shape на stCircle,
у нас вместо квадрата получился кружок.
Для работы нам понадобятся 2 свойства: Left и Top, первое - это позиция по горизонтали в дальнейшем X, второе - по вертикали (Y).
Приступим создадим 4 глобальных переменных типа Single: PosX, PosY, VelX, VelY. первые 2 переменных - это позиция по X и Y, остальное - скорость по X и Y.
Создадим обработчик события Form1 OnCreate:
procedure TForm1.FormCreate(Sender: TObject); begin PosX:= 30; // Задаем позицию PosY:= 50; // начальную VelX:= 1; // Задаем скорость VelY:= 2; // начальную end;
Если мы сейчас скомпилируем то ничего не будет, просто зададутся значения, нам нужно обновлять позицию шара через равные промежутки времени, с этой работой хорошо справится таймер. Вытащим его на форму, сразу установим интервал на 1 мс и в обработчике события напишем код:
procedure TForm1.Timer1Timer(Sender: TObject); begin PosX:= PosX + VelX; // Изменяем PosY:= PosY + VelY; // позицию Shape1.Left:= Round(PosX); // Обновляем Shape1.Top:= Round(PosY); // положение шарика end;
Теперь наш шарик двигается, но он выходит за границы формы, модифицируем код:
procedure TForm1.Timer1Timer(Sender: TObject); begin PosX:= PosX + VelX; // Изменяем PosY:= PosY + VelY; // позицию if PosX > ClientWidth - Shape1.Width then //если шарик коснется правого края то направим его в обратную сторону VelX:= -VelX; if PosY > ClientHeight - Shape1.Height then //если шарик коснется нижнего края то направим его в обратную сторону VelY:= -VelY; if PosX < 0 then //если шарик левого правого края то направим его в обратную сторону VelX:= -VelX; if PosY < 0 then //если шарик верхнего правого края то направим его в обратную сторону VelY:= -VelY; Shape1.Left:= Round(PosX); // Обновляем Shape1.Top:= Round(PosY); // положение шарика end;
Ну вот все прекрасно работает!
Удачи!
Встретимся в следующем уроке!
Добавил(а): Best-haker | Дата: 2014-09-17 | |
![]() |
Добавил(а): Exotic | Дата: 2014-10-15 | |
Что понимается под живностью?
|
Добавил(а): hess2222 | Дата: 2015-05-14 | |
Да жив наверно)))
|
Добавил(а): opchik | Дата: 2018-08-29 | |
![]() |
-
афигенно блиииииииииин