Урок 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
пмогите


  1. sas
    sas 10 months ago
    афигенно блиииииииииин
Отменить.