Re: 問一段ruby語法的問題

看板Ruby作者 (波卡)時間18年前 (2006/07/15 19:15), 編輯推噓2(200)
留言2則, 2人參與, 最新討論串2/2 (看更多)
※ 引述《kons (kons)》之銘言: : 最近剛好在用RMXP做遊戲 : 想要寫腳本,卻遇到了瓶頸,我不懂程式語言啊! : def hit : n = base_agi + @dex_plus.to_i : for i in @states : n *= $data_states[i].hit_rate / 100.0 : end : return Integer(n) : end : 請問一下,以上這段文字的意思要如何解讀? : def是什麼意思呢? : for i in @states又是什麼意思?謝謝! 因為我沒有實際碰過RMXP 所以某些地方可能解釋有錯 請各位指正 <(_ _)> def hit 這行代表我們要宣告一個計算"命中率"的函式 def是宣告函式所需的關鍵字 "hit"就是這個函式的名字 首先 我們先建立了一個變數 n 用來儲存計算過後的命中率 第二行 n = base_agi + @dex_plus.to_i 應該是代表著 將n設為 基本敏捷值 + 額外敏捷加成 接下來的for i in @states是一個迴圈(或著說是iterator?) 意思是說 把states這個陣列裡頭的每個數字 一個一個取出來 丟到i裡面 然後執行下面這行: n *= $data_states[i].hit_rate / 100.0 將n乘上 (i代表的命中率 / 100.0) $data_states[i].hit_rate/100.0這行就有點複雜了 你可以想像成電腦裡有一個表格長這樣: data_states | hit_rate | dodge_rate | OOXX | .... ------------------------------------------------------------------------- 1 | 30 | 10 | 5 | 2 | 31 | 11 | 5 | 3 | 32 | 11.5 | 6 | . . . (上面那是亂寫的 實際數值一定不是那樣) 所以說 假設我們的i裡面的數值是22 我們要怎麼知道22所對應到的命中率是多少呢? 很簡單 就查上面的表 $data_states[i]可以想像成 要電腦找出data_states這個欄位裡面 數值是22的那行 後面的 .hit_rate 就是要電腦找出這一行裡面hit_rate的值了 再把得到的hit_rate值除以100 換成小數 再把n乘上得到的數值 把@states裡面的每個值都這樣做一遍之後 再把n回傳回去 就完成了! 最後得到的n就是計算出來的命中率 -- 只看程式碼也可以寫出這麼大一篇 這告訴我們好的變數名稱是多重要的一件事 ̄▽ ̄ 註:有些地方實際上不是我說的方法 不過這樣去理解應該是不會有什麼問題.. -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 218.170.48.15 ※ 編輯: poga 來自: 218.170.48.15 (07/15 19:36)

07/15 19:44, , 1F
謝謝!我大致上瞭解了
07/15 19:44, 1F

07/16 14:40, , 2F
ya! 迴圈
07/16 14:40, 2F
文章代碼(AID): #14kCvZOa (Ruby)
文章代碼(AID): #14kCvZOa (Ruby)