С помощью шейпа не очень хороший вариант, одна пуля да и шейп объект, а вы рисуете на канве.
в самом простом случае это одна пуля.
принцип таков: при нажатии на пробел танк стреляет - вылетает пуля.
дальнейшие нажатия на пробел ни к чему не приводят - пока пуля не долетит до цели и не уничтожется.
заводим две переменные координаты пули px py две переменных скорости пули pxv pyv и переменную активности пули pactive
теперь в процедуре обработки нажатия клавиши пишем
if key=32 and pactive=0 then // если нажат пробел и пуля неативна.т.е. ее нет на экране она не движится.
begin
pactive=1 // активируем пулю.
// присваиваем координатам пули координаты танка.
px=x;
py=y;
//присваеваем скорость пули - тут уже ваш алгоритм скорости как вы пожелаете.
pxv=........
pyv=........
end
теперь идем все в туже процедуру обработки таймера и в конце дописываем
//если пуля активна то
if pactive=1 then
begin
//меняем координаты пули
px=px+pxv;
py=py+pyv;
//теперь проверяем момент соударения пули с чем либо - это тоже ваш алгоритм я не знаю что вы тут будете делать. не забудьте установить ограничение чтобы пуля деактивировалась и исчезала когда она вылетает за экран
if есть взаимодействие then
begin
// отключаем пулю
pactive=0
//ну и может чтото там взрываться если конечно это нужно
end
end
ну и последнее, не забудьте нарисовать пулю на канве. это можно сделать в процедуре отрисовки спрайта.
пулю можно рисовать как окружностью так и спрайтом из ListImage
если вас интересует технология стрельбы сразу несколькими пулями то пишите, постараюсь объяснить, там надо будет использовать массивы.