2015年10月30日 星期五

路亞修行排版與簡化

  這篇文章將教各位如何把自己的程式寫得整齊、美觀,面對不同的地圖,有些程式會需要修改,此時如果沒有排版,那麼程式看起來就會相當凌亂,不僅苦了自己,就連發文提問都苦了前來幫忙的人,所以我們將在這篇文章中教各位排版的方式。



【第一堂課(空格層次)】
  在遇到if的時候,常常會有好幾個if同時出現,如果這時能製造層次感,那麼每個if所包含的內容我們都能夠一目了然,那麼該怎麼製造層次感?正如標題上寫的,"空格"將會是一個很棒的工具,不多說了,來看看下面的兩個例子吧!

一個有層次感的程式:(改編自main.lua)

  if enemy then
    game.logState("目標","攻擊敵人:"..enemy.info.name)
    me.setAimTarget(enemy)
    if me.currentWeaponInfo.isCloseWeapon then
      if enemy.loc:distanceTo(me.loc) > 3 then
        if me.nextWeaponInfo.isRangedWeapon then
          me.triggerKeyboard("q")
        else
          me.moveTo(enemy)
        end
      else
        me.moveTo(enemy)
      end
    else
      if enemy.loc:distanceTo(me.loc) <= 3 then
        if me.nextWeaponInfo.isCloseWeapon then
          me.triggerKeyboard("q")
        end
      end
    end
    if me.currentWeaponHasClearLineTo(enemy) then
      me.triggerMouse()
    else
      me.moveTo(enemy)
    end
    return
  end

  這樣的程式總是能讓版面整齊一些,if、else及end分別如何對應也是一下就看得懂,這樣子排版能省去很多不必要的困擾,對於一個撰寫程式的人而言,這是相當重要且基本的,養成用空格排版的好習慣,這將為你帶來大大的幫助

程式相同但沒有用空格排版的程式:
  if enemy then
  game.logState("目標","攻擊敵人:"..enemy.info.name)
  me.setAimTarget(enemy)
  if me.currentWeaponInfo.isCloseWeapon then
  if enemy.loc:distanceTo(me.loc) > 3 then
  if me.nextWeaponInfo.isRangedWeapon then
  me.triggerKeyboard("q")
  else
  me.moveTo(enemy)
  end
  else
  me.moveTo(enemy)
  end
  else
  if enemy.loc:distanceTo(me.loc) <= 3 then
  if me.nextWeaponInfo.isCloseWeapon then
  me.triggerKeyboard("q")
  end
  end
  end
  if me.currentWeaponHasClearLineTo(enemy) then
  me.triggerMouse()
  else
  me.moveTo(enemy)
  end
  return
  end

  是不是看不太懂了?當我們沒有用空格去排版時,情況看起來就會是如此,千萬別讓自己的程式變成這樣喔!


【第二堂課(標題分類)】
  程式裡有一種功能叫做註解,當然這個功能在排版上也是很棒的一個東西,我們接下來要教的"標題分類"將會用到註解的功能,基本上我也相當建議各位多多用標題分類,否則主程式main.lua裡的東西真的會越積越多,最後就是眼花撩亂又一直找不到程式。
相關文章<路亞註解功能>尚未撰寫

大家應該都知道「--」可以用來標示註解,那又該如何利用註解來分類?
這裡為大家準備了一個範例
  --*********************************
  --【如果我是靈體就】
  if me.isSpirit then
    dofile("spirit.lua")
    return
  end
  --*********************************
  --【變數指定】
  enemy = me.findClosestEnemy()
  friend = me.findClosestFriend()
  rifle = me.findClosestItem("步槍")
  magazine = me.findClosestItem("彈匣")
  --*********************************

  這個就是用註解去做分類的功能,每一段程式的所屬區塊都可以非常明確,同時還能給每個區塊的程式一個主題,這種排版方式簡單、快速、方便,這麼一來在尋找某一段程式時,就可以直接從標題去看懂每段程式的功能,是一個非常棒的排版技巧,務必要學起來呀!


【第三堂課(附檔簡化)】
  如果你的程式有八百多行時,你可能會覺得用捲動頁面的方式找程式有點麻煩,此時你可以利用附檔來簡化你的程式,這麼一來main.lua就會變得很乾淨,這會使你在排每段程式的優先順序時更方便一些。
大概就像下面這樣:
  --*********************************
  --【變數宣告】
  enemy = me.findClosestEnemy()
  friend = me.findClosestFriend()
  --*********************************
  --【撿武器】
  if me.currentWeaponInfo.type == "手槍" then
    dofile("getweapon.lua")
  end
  --*********************************
  --【發現敵人】
  if enemy then
    dofile("have_enemy.lua")
  end
  --*********************************
  --【漫無目的】
  if enemy == nil and friend == nil then
    dofile("no_target.lua")
  end
  --*********************************

  就這樣把main.lua的東西都放到附檔裡去,此時版面就會相當簡潔,在排順序的時候真的很方便,各位不訪也可以試試看,絕對有幫助喔!


這次的排版教學就到這邊
若未來有發現其它排版方式
則筆者會再更新這篇文章
也歡迎各位在下方的留言板表達自己的意見喔!
相關文章:
<路亞註解功能>尚未撰寫
<主程式與附檔?>

沒有留言:

張貼留言