Назад

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

  If BulletLife > 0 then Gosub ShootBullet
 

Мы заменили несколько строк кода для проверки времени "жизни" снаряда всего одной строкой. Команда "Gosub" применяется для того, чтобы выполнить код, расположенный в другом месте программы, а затем вернуться туда, откуда был произведен вызов команды "Gosub". Здесь мы вызываем подпрограмму "ShootBullet".

  ShootBullet:
  Dec BulletLife
  Move object 2,10

  bX#=Object position X(2)
  bY#=Object position Y(2)
  bZ#=Object position Z(2)

  inc Pn
  if Pn=21 then Pn=10
  Scale object Pn,100,100,100
  Position object Pn,bX#,bY#,bZ#
  point object Pn,X#,Y#,Z#
  Zrotate object Pn,rnd(180)
  for x = 1 to 10
   scale object int((Wrapvalue((Pn-9+x)*36))/36)+10,100+x*25,100+x*25,100+x*25
  set cursor 10,10
  next x

  if bY# < Get Ground height(1,bX#,bZ#) then BulletLife=0
  Position sound 2,bX#,bY#,bZ#
  set cursor 10,10
  if Sqrt((mX# - bX#)^2 + (mY#+25 - bY#)^2 + (mZ# - bZ#)^2) <20
   print "Цель поражена"
   BulletLife = 0
  endif
  if BulletLife = 0
   Hide object 2
   stop sound 2
   for x=10 to 20
    hide object x
   next x
   Explode = 20
  endif
Return

 

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

 

Hosted by uCoz