更高階更複雜的變數運用技巧 (0) BASS 教學版



otwl007 BASS創作者兼二代目管理員(羽那P)
 Lv.47:0  Lv.1
私訊  發言  +好友
2014-03-23 21:11:51



  啊哈哈,這裏是用來教學如何把變數運用得更高階,所以如果想知道變數的基本使用法的話就自己爬文吧
  這個基本上是給做模擬養成的人看
  
  甲、基本但高階知識
  變數有無限個,
  而指令常用的有4種:
  1.四則運算
  2.條件式
  3.機率
  4.物件傳送
  
  指令會有以下三個原則:
  1.別跟我談先乘除後加減
  2.先來先操作
  3.同類同SYS,勿放在對話中
  
  1.別跟我談先乘除後加減
  其實和第二個原則一樣,但是這個是針對四則運算的
  
  例子1:
  sys(setv: v1: 5,setv: v1: +2,setv: v1: *2,setv: v1: -2,setv: v1: /2)
  那麼v1的數值= ((5+2)*2-2)/2 = 6
  而不是 5+2*2-2/2 = 8了
  
  2.先來先操作
  故名思義,就是會先操作放在前面的指令
  例子2:
  sys(setv: v1: 1,setv: v1: +1,setv: v1: *3,setv: v1: 2,setv: v1: /2)
  系統會這樣操作:
  指令一後,V1的變數為1
  指令二後,V1的變數為1+1 = 2
  指令三後,V1的變數為2*3 = 6
  指令四後,V1的變數為2
  指令五後,V1的變數為2/2 = 1
  
  從以上可見,根本首三個指令是沒有用的,所以編寫指令時要注意指令的先後順序!!
  
  
  3.同類同SYS,勿放在對話中
  意思就是在同一個SYS()內你只能操作同一類的指令
  例子:sys(setd: v1: equa1: stage1,setd: v2: equa1: stage2,setd: v3: equa1: stage3)
  這裏就同樣都是條件式指令,這樣就沒有問題的
  
  我們看一個不正確的例子:
  sys(setd: v1: equa1: stage1,prob:a:a:a:b:b:c)
  在同一個sys內出現了條件式和機率指令,是錯得太離譜的行為,因為這樣有很高的機率系統無法執行這些指令!!
  所以一個sys內只能有同一類條件式,不過當然並非必然:
  變數設定和給物件指令是可以放在同一個sys()內,所以兩者可以歸為同一類
  
  
  那麼什麼是「勿放在對話中」?
  就是指如果你想有一個嚴謹的遊戲的話
  任何指令都要另起新的一行
  不要因想省位和不想空點而放在對話中
  這樣做有機會造成系統略過指令的情況發生!
  
  乙、更複雜的條件式
  難度:非常簡單
  有些條件式不是簡單的x=k、x>k和x<k就可以完事的
  當然也有一些是a<x<b啊
  又或是
  if condition a=TRUE
  THEN event a
  else if condition b=TRUE
       THEN event b
  else if condition c=TRUE
       THEN event c
  else event d
  等等的多重條件式了
  ------------------分隔線--------------
  先談a<x<b的處理法
  可以嘗試以下指令:
  例子一:如果不符合條件的話,就滾到第二個舞台
  在舞台「stage0」: sys(setd: v: moreb: stage1,setd: v: lessa: stage1)
  
  
  例子二:如果符合條件的話,就滾到第二個舞台
  這個比較複雜,基本上都是使用
  在舞台「stage0」: sys(setd: v: lessb: stage1)
  並設置「stage0」的出口為「stage3」
  然後
  在舞台「stage1」: 
  sys(setd: v: morea: stage2)
  並設置「stage1」的出口為「stage3」
  
  看懂的可能會問:
  為什麼當 v<a 時要到「stage3」,而不是「stage0」呢?
  來到這裏,我們要有清晰的邏輯思考
  
  假設回到「stage1」的出口是stage0,我們又會再次遇上sys(setd: v: lessb: stage1)
  指令成立,所以會到stage1(因為b>a>v)
  到了stage1
  因為指令不成立,所以回到stage0,然後無限輪迴
  
  所以「stage1」的出口一定要是新舞台
  
  從上面的複雜度可見,「如果不符合條件的話,就滾到第二個舞台」是比較簡單
  ------------------分隔線--------------
  多重條件式
  例子(最簡單和容易做的):
  當0<v<2,到舞台stage1
  當2<v<4,到舞台stage2
  當v>4,到舞台stage3
  當以上皆不是,繼續舞台
  我們可以這樣做:
  在舞台「stage0」: 
  sys(setd: v: more0: stage1,setd: v: more2: stage2,setd: v: more4: stage3)
  
  
  丙、BUFF
  難度:簡單
  總之就是要好好運用BASS這個理論上可以用無限個變數的程式
  給一個情景作為例子,那麼大家自然融會貫通,可以用此技巧作為其他用途
  
  情景:
  
  遊戲一開始,玩家可以獲得BUFF A或BUFF B。
  
  當玩家發動了BUFF A的時侯,可以在事件A發生後有一條故事線,並同時在之後的遊戲有一些效果。
  
  如果發動BUFF B的話,可以在事件A發生後有另一條故事線,並同時在之後的遊戲有其他不同效果。
   
  在遊戲途中,玩家有一些方法獲得此兩個BUFF,但玩家只可以存在其中一個BUFF,若同時有兩個buff即入BAD END.
  
  事件B結束後,BUFF 失效
  
  做法:
  舞台1: 「初始」
  並詢問玩家要選擇哪一個BUFF
  選擇BUFF A前往舞台「BA」
  選擇BUFF B前往舞台「BB」
  
  舞台2: 「BA」
  sys(setv: BA: 1)  
  :這個是用作表達BUFF A已經開啟(0=關閉,1=開啟,當然可以按自己喜好)
  
  舞台3: 「BB」
  sys(setv: BB: 1)  
  :這個是用作表達BUFF B已經開啟(0=關閉,1=開啟,當然可以按自己喜好)
  
  事件A後,
  
  舞台4: 「事件A後檢查」
  sys(setd: BUFFTOTAL: BA,setd: BUFFTOTAL: +BB)
  :剛才設定了,當BUFF A和B開啟時就會是1,BUFFTOTAL這變數 就是用來檢查是否有兩個BUFF存在)
  sys(setd: BUFFTOTAL: equa2: BADEND,setd: BA: equa1: 故事線A,setd: BB: equa1: 故事線B)
  :第一個條件式的作用:如果BUFF A和B開啟,兩者都是1,加起來就會是2,那麼就可以立刻送進BAD END
  
  事件B後,
  舞台5: 「事件B後檢查」
  sys(setv: BA: 0,setv: BB: 0)
  
  那麼或許會問,有什麼作用呢?
  在做養成遊戲時,例如是想為某些結局設置一些觸發性條件
  並不是指好感、主角能力這些東西,
  而是指例如是:
  當有看過隱藏事件1,隱藏事件4,隱藏事件5後,才能進入真.結局
  又或是:
  當你進行二周目時,劇情將會有微變
  但是舞台發展不會再是這個模式:
    
  而是成為這個模式:
    
  這樣就能夠大大減少舞台數量
  
  
  其實只要明白變數的原理,可以發揮出來的還有很多用途
  其實還有些更加困難的技巧,不過對戀愛養成遊戲幾乎沒有幫助
  
  小技巧:
  如果是做比較複雜的模擬養成的話,
  抓蟲(BUG)是很痛苦的事
  因此可以不妨增加一個測試用舞台,
  把用來測試的變數啊物品啊都寫進去,
  出口就設置在你想測試的舞台
  如:
  你想測試5天後當好感度多於100時會否好結局時,
  可以在測試用舞台設置變數 天數:5 好感度834729(隨意就可以了,總之要大於100)
  出口設置判斷會否好結局的舞台,
  即方便測試
  這樣就不用每一次也重新玩,重新找這麼辛苦
  
  暫時寫這麼多,再想到再寫


好文(7)    給我的話   相本化   本主題精華文章    發表留言  

 頁數 :

搜尋本版


 

使用上有疑問嗎? 先問 BASS 專屬搜尋吧 !