RGSS之Array(組數)的運用
+2
嵐
愚零鬥武多
6 posters
RGSS之Array(組數)的運用
前言:
今天要講的是Array(組數)的運用,內容我盡量寫的白話基本簡單,
組數在做系統是非常重要的一個環節....
裡頭有運用迴圈和一些基本語法觀念,請參閱精華區RMXP基礎教學,此處就不再贅述
◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆Begin◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆
一般做系統我們都會用到很多"變數"去比較來比較去,但是用內建的事件做實在是有
夠麻煩,代來代去代到自己都眼花了@@,此時我們可以用Array來幫我們解決這些麻煩
◆◆1.組數設定方法◆◆
data = [1,2,3,4,5,6,7,8,9,10]
這樣就是設定一個組數的方法,內容可以是數字,也可以是字串,所以他的實際用途
是十分廣泛的,不過大家看了這麼簡單的東西還要說明?其實這樣的組數是可以做出
很多種變化的,請繼續耐心的看下去
------------------------------------------------------------------
push這個指令是將()內的資料依序添加到數組結尾
例:
例:
組數做成資料庫的實際做法如下
將i從1循環到100
這樣在p data的時候你就會看到[0,0,2,5,16,55,33,48,77.......]
裡頭有100筆資料,就是從變數1~100所有的值都紀錄在data裡
只要四行就能代入100個變數,有這種方便的功能可以幫你節省很多設定時間
------------------------------------------------------------------
另外用
製作一個新組數上會比直接指定index要來的方便,例:
再舉例
再舉例
當隊員的等級>50時,隊員id就被寫進data1裡
當隊員的等級<=50時,隊員id就被寫進data2裡
以上範例能夠很簡單的5~6行就能將以往用變數代的半死的指令完全搞定
是不是很歡樂呢?
------------------------------------------------------------------
◆◆2.組數判斷◆◆
有了用組數收集資料的本事之後,接下來就得學會用組數去判讀出你想要的結果
否則只會拼組數卻不會實戰也沒用...
------------------------------------------------------------------
判斷最大與最小值
例:
------------------------------------------------------------------
數值上下限的限制
我們可以在Game_Battler中發現大量類似的語句:
設定hp加減值:
假設hp這個值是3000,角色的maxhp=2000
由於[hp, maxhp].min會抓出最小值(等同於[3000,2000].min)=2000
結果就變成[2000,0].max=2000(最大值是2000)
假設hp這個值是-1000,角色的maxhp=2000
由於[hp, maxhp].min會抓出最小值(等同於[-1000,2000].min)=-1000
結果就變成[-1000,0].max=0(最大值是0)
這樣一來就能保證角色hp增加時不會超過最大hp,hp減少時不會低於0
------------------------------------------------------------------
判斷組數是否存在某值
例:
再舉例:
本身也是一個組數型態,所以我們可以用include?去判讀出帶頭角色是否學會
ID=10的特技,若有的話將開關1打開
------------------------------------------------------------------
判斷組數的資料數量
例:
再舉例:
本身也是一個組數型態,所以我們可以用size去判讀出帶頭角色身上的狀態數量
如果大於3時就將開關1打開
再舉例(取出亂數):
data[rand(data.size)]等同於data[rand(6)]
假設rand(6)=3 a = data[3]結果就是6
假設rand(6)=2 a = data[2]結果就是8....
用這個方法就能輕鬆的從組數資料裡挑出隨機數
◆◆3.組數資料整理◆◆
以下說明一些常用到的資料整理技巧,可以讓你更方便的去控制這些資料參數
------------------------------------------------------------------
刪除組數中的資料
例:
當i可以被2整除時(餘2為0時)就將組數中的該筆資料刪除
最後我們就能得到一個內容完全為奇數的組數
------------------------------------------------------------------
拷貝組數
若你用變數去定義一個組數
例:
別害怕這不是程式本身的bug,而是組數的特有特性,但我要暫存data改變前的值那
要怎麼做呢?
再舉例:
在事件中使用腳本指令:
從ID為1的武器(青銅劍)拷貝到weapon($data_weapons本身就是組數型態)
weapon的ID就是資料庫武器數上限數+1
weapon的名字加個改,攻擊力直接+10
獲得這個新武器1隻
職業ID=1的職業(戰士)添加可以裝備的新武器ID
這樣你執行事件後打開道具欄就會發現多了一隻青銅劍改,攻擊力比青銅劍高10
這就是衝武器的簡單範例
如果你不用clone方法可是會把原先的青銅劍也改掉了喔
------------------------------------------------------------------
從尾部依序刪除組數
例
------------------------------------------------------------------
從頭部刪除組數
例
------------------------------------------------------------------
從小到大進行組數排列
例
------------------------------------------------------------------
組數逆排列
例
◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆end◆◆◆◆◆◆◆◆◆◆◆◆◆
以上就是常用到的組數運用法,雖然都是很基本的東西
部份新手雖然知道有些全域變數代表的意義,但是卻不知要如何去運算數字
和整理製作資料庫來寫系統,學習基本的組數運用是個入門的好方法
這樣總比用變數在那邊代來代去寫一堆條件分歧來的有效率多了
今天要講的是Array(組數)的運用,內容我盡量寫的白話基本簡單,
組數在做系統是非常重要的一個環節....
裡頭有運用迴圈和一些基本語法觀念,請參閱精華區RMXP基礎教學,此處就不再贅述
◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆Begin◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆
一般做系統我們都會用到很多"變數"去比較來比較去,但是用內建的事件做實在是有
夠麻煩,代來代去代到自己都眼花了@@,此時我們可以用Array來幫我們解決這些麻煩
◆◆1.組數設定方法◆◆
data = [1,2,3,4,5,6,7,8,9,10]
這樣就是設定一個組數的方法,內容可以是數字,也可以是字串,所以他的實際用途
是十分廣泛的,不過大家看了這麼簡單的東西還要說明?其實這樣的組數是可以做出
很多種變化的,請繼續耐心的看下去
------------------------------------------------------------------
push這個指令是將()內的資料依序添加到數組結尾
例:
- 代碼:
a = [10]
a.push(2)
p a # a = [10,2]
例:
- 代碼:
b = [1]
b.push([10,2])
b.push("rmxp")
p b # b = [1,[10,2],"rmxp"]
組數做成資料庫的實際做法如下
- 代碼:
data = []
for i in 1..100
data.push($game_variables[i])
end
p data
將i從1循環到100
這樣在p data的時候你就會看到[0,0,2,5,16,55,33,48,77.......]
裡頭有100筆資料,就是從變數1~100所有的值都紀錄在data裡
只要四行就能代入100個變數,有這種方便的功能可以幫你節省很多設定時間
------------------------------------------------------------------
另外用
- 代碼:
data = []
for i in 1..100
data[i] = $game_variables[i]
end
製作一個新組數上會比直接指定index要來的方便,例:
- 代碼:
data = []
for weapon in $data_weapons
if weapon.atk > 125
data.push(weapon.id)
end
end
p data # data = [10,15,16,17,18,19]
再舉例
- 代碼:
data = []
for armor in $data_armors
if $game_party.actors[0].equippable?(armor)
data.push(armor.id)
end
end
p data # data = [20,25,26,27,28,29]
再舉例
- 代碼:
data1 = []
data2 = []
for actor in $game_actors
if actor.level > 50
data1.push(actor.id)
else
data2.push(actor.id)
end
end
p data1 # data1 = [1,3,4,5]
p data2 # data2 = [2,6]
當隊員的等級>50時,隊員id就被寫進data1裡
當隊員的等級<=50時,隊員id就被寫進data2裡
以上範例能夠很簡單的5~6行就能將以往用變數代的半死的指令完全搞定
是不是很歡樂呢?
------------------------------------------------------------------
◆◆2.組數判斷◆◆
有了用組數收集資料的本事之後,接下來就得學會用組數去判讀出你想要的結果
否則只會拼組數卻不會實戰也沒用...
------------------------------------------------------------------
判斷最大與最小值
例:
- 代碼:
data = [5,8,6,3,1,5,9,11]
a = data.max
b = data.min
p a # a = 11
p b # b = 1
------------------------------------------------------------------
數值上下限的限制
我們可以在Game_Battler中發現大量類似的語句:
設定hp加減值:
- 代碼:
def hp=(hp)
@hp = [[hp, maxhp].min, 0].max
......下略
假設hp這個值是3000,角色的maxhp=2000
由於[hp, maxhp].min會抓出最小值(等同於[3000,2000].min)=2000
結果就變成[2000,0].max=2000(最大值是2000)
假設hp這個值是-1000,角色的maxhp=2000
由於[hp, maxhp].min會抓出最小值(等同於[-1000,2000].min)=-1000
結果就變成[-1000,0].max=0(最大值是0)
這樣一來就能保證角色hp增加時不會超過最大hp,hp減少時不會低於0
------------------------------------------------------------------
判斷組數是否存在某值
例:
- 代碼:
data = [3,4,6,8,10]
if data.include?(8)
p "yes"
end
再舉例:
- 代碼:
if $game_party.actors[0].skills.include?(10)
$game_switches[1] = true
end
本身也是一個組數型態,所以我們可以用include?去判讀出帶頭角色是否學會
ID=10的特技,若有的話將開關1打開
------------------------------------------------------------------
判斷組數的資料數量
例:
- 代碼:
data = [2,5,5,3]
p data.size # 4
再舉例:
- 代碼:
if $game_party.actors[0].states.size > 3
$game_switches[1] = true
end
本身也是一個組數型態,所以我們可以用size去判讀出帶頭角色身上的狀態數量
如果大於3時就將開關1打開
再舉例(取出亂數):
- 代碼:
data = [1,4,8,6,2,17]
a = data[rand(data.size)]
p a # a = 組數內隨機亂數
data[rand(data.size)]等同於data[rand(6)]
假設rand(6)=3 a = data[3]結果就是6
假設rand(6)=2 a = data[2]結果就是8....
用這個方法就能輕鬆的從組數資料裡挑出隨機數
◆◆3.組數資料整理◆◆
以下說明一些常用到的資料整理技巧,可以讓你更方便的去控制這些資料參數
------------------------------------------------------------------
刪除組數中的資料
例:
- 代碼:
data = [1,2,3,4,5,6,7,8]
for i in data
if i % 2 == 0
data.delete(i)
end
end
p data # data = [1,3,5,7]
當i可以被2整除時(餘2為0時)就將組數中的該筆資料刪除
最後我們就能得到一個內容完全為奇數的組數
------------------------------------------------------------------
拷貝組數
若你用變數去定義一個組數
例:
- 代碼:
data = [2,3]
a = data
data = []
p a # a = []
別害怕這不是程式本身的bug,而是組數的特有特性,但我要暫存data改變前的值那
要怎麼做呢?
- 代碼:
data = [2,3]
a = data.clone
data = []
p a # a = [2,3]
再舉例:
在事件中使用腳本指令:
- 代碼:
weapon = $data_weapons[1].clone
weapon.id = $data_weapons.size
weapon.name += "改"
weapon.atk += 10
$data_weapons.push(weapon)
b = $data_weapons.size-1
$game_party.gain_weapon(b,1)
$data_classes[1].weapon_set.push(b)
從ID為1的武器(青銅劍)拷貝到weapon($data_weapons本身就是組數型態)
weapon的ID就是資料庫武器數上限數+1
weapon的名字加個改,攻擊力直接+10
獲得這個新武器1隻
職業ID=1的職業(戰士)添加可以裝備的新武器ID
這樣你執行事件後打開道具欄就會發現多了一隻青銅劍改,攻擊力比青銅劍高10
這就是衝武器的簡單範例
如果你不用clone方法可是會把原先的青銅劍也改掉了喔
------------------------------------------------------------------
從尾部依序刪除組數
例
- 代碼:
data = [1,2,3,4,5,6]
for i in 0..2
data.pop
end
p data # data = [1,2,3]
------------------------------------------------------------------
從頭部刪除組數
例
- 代碼:
data = [1,2,3,4,5,6]
for i in 0..2
data.shift
end
p data # data = [4,5,6]
------------------------------------------------------------------
從小到大進行組數排列
例
- 代碼:
data = [9,6,5,7,3]
data.sort!
p data # data = [3,5,6,7,9]
------------------------------------------------------------------
組數逆排列
例
- 代碼:
data = [1,2,3,4,5]
data.reverse!
p data # data = [5,4,3,2,1]
◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆end◆◆◆◆◆◆◆◆◆◆◆◆◆
以上就是常用到的組數運用法,雖然都是很基本的東西
部份新手雖然知道有些全域變數代表的意義,但是卻不知要如何去運算數字
和整理製作資料庫來寫系統,學習基本的組數運用是個入門的好方法
這樣總比用變數在那邊代來代去寫一堆條件分歧來的有效率多了
愚零鬥武多- 不正常人類研究中心自慰隊員
- 文章數 : 421
注冊日期 : 2008-04-06
回復: RGSS之Array(組數)的運用
如果我可以看懂的話...
我想這功能應該會很方便吧..0.0||
雖然不知道此功能可以套用在哪方面..XD ~~~ 謎:明明就不懂!!飛踢 =0)) @ 0 @) ;.:':";.
我想這功能應該會很方便吧..0.0||
雖然不知道此功能可以套用在哪方面..XD ~~~ 謎:明明就不懂!!飛踢 =0)) @ 0 @) ;.:':";.
或許我太笨了...
看不懂...
最大問題是有些剛好看懂,
但是不會應用在實際的RGSS裡面!
例如:有一個提到1..100
也不知道RGSS能用在哪邊...
最大問題是有些剛好看懂,
但是不會應用在實際的RGSS裡面!
例如:有一個提到1..100
也不知道RGSS能用在哪邊...
★暒星☆- 拿著木劍的戰士
- 文章數 : 28
注冊日期 : 2008-08-28
年齡 : 31
回復: RGSS之Array(組數)的運用
★暒星☆ 寫到:看不懂...
最大問題是有些剛好看懂,
但是不會應用在實際的RGSS裡面!
例如:有一個提到1..100
也不知道RGSS能用在哪邊...
很多地方都要用到Game_Screen類就有用到
內建的模組裡也有用到
假裝你要一次做好幾個相同的物件(譬如說你說的100個)
你就可以用
@object_arr = []
for i in 1..100
@object_arr[i] = class.new
end
要更新的話
for i in @object_arr
i.update
end
雲的彼方- 拿著木劍的戰士
- 文章數 : 48
注冊日期 : 2008-08-09
回復: RGSS之Array(組數)的運用
看過Ruby的書籍,有介紹破壞性的方法,他是在執行動作(不知形容對不對)後加驚嘆號(!)
如以下愚大寫的範例,不知道有加驚嘆號和沒加的差別在哪?
data = [9,6,5,7,3]
data.sort! ←這個
p data # data = [3,5,6,7,9]
------------------------------------------------------------------
data = [1,2,3,4,5]
data.reverse! ←這個
p data # data = [5,4,3,2,1]
如以下愚大寫的範例,不知道有加驚嘆號和沒加的差別在哪?
data = [9,6,5,7,3]
data.sort! ←這個
p data # data = [3,5,6,7,9]
------------------------------------------------------------------
data = [1,2,3,4,5]
data.reverse! ←這個
p data # data = [5,4,3,2,1]
這個論壇的權限:
您 無法 在這個版面回復文章
|
|