創作內容

7 GP

【RGSS/Ruby】判斷句,true/false/nil,及函式

作者:解凍豬腳│RPG 製作大師│2011-02-26 15:39:57│巴幣:13│人氣:1267
ㄤ骯

所謂RGSS

是RPG Maker XP中,

使用的腳本系統。(Ruby Game Scripting System)

因為我現在是發在小屋,

所以以上就是簡單介紹一下囉。



看到很多人都不知道該怎麼改/寫RGSS

常常出問題都只能問別人

我想要推廣這個觀念...

「給他魚吃,不如教他怎麼釣魚!」

今天就要講一些簡單、基本的RGSS囉!


一、判斷句

判斷句在RGSS中是非常重要的一環,

如果連這個都不會,

你就不用妄想要會RGSS了!

判斷句中,常用的有

if判斷句、unless判斷句 和 case判斷句,

那我就先從最簡單的if判斷句開始講囉。
(1)判斷句《if判斷句》

先來個示範吧:

if @a == 3
    print "@a的值與三相等"
end

以上這段的翻譯如下:

如果局部變數@a
# 局部變數是在同個腳本內可共用,到其他腳本就不行,局部變數名前面是@
# 另有一個"全局變數",所有腳本可以共用,開頭是$
與3相等的話,

就彈出一個msgbox,    # msgbox是一般寫程式的人對通知視窗的通稱

並在msgbox內顯示"@a的值與三相等"

這是最簡單的一個判斷句。

再來要加深了哦!

if @a == 3
    print "@a的值與三相等"
elsif @a == 4 and @b == 5
    print "@a的值是四,而且@b等於五"
elsif @a == 5
    print "@a和五相等"
else
    print "@a的值不三不四,也不是五"
end

接下來當然就是翻譯囉~

如果局部變數@a

與3相等的話,

就彈出一個msgbox,

並在msgbox內顯示"@a的值與三相等"
  
如果以上條件沒達到,且@a等於4、@b等於五的話,

就彈出"@a的值是四"的msgbox

如果以上條件都沒達到的話

就彈出"@a的值不三不四,也不是五"的msgbox(不三不四...?!)

上面的elsif是可以依照需求再延伸的,

所以你不必擔心說如果if判斷句要判斷多個條件時,該怎麼辦!

else必須寫在elsif之下,

如果elsif的條件跟else的條件都有達成,

那就只把elsif那段腳本執行完就直接跳到end了。
(2)判斷句《unless判斷句》

其實unless判斷句跟if判斷句一樣簡單

我這裡只概述一下就好。

unless @a == 3
    print "@a的值不等於3"
end

看出來是什麼意思了嗎?

其實unless就是if的相反,

我通常把它解釋作「如果沒有」。

(官方說明unless的方式太爛了,居然解釋作「除非」,這誰看得懂啊...)
(3)判斷句《case判斷句》

case判斷句很簡單,是個if判斷句偵測數值的簡約版,

case @variable01
when 1
    print "@variable01的值與一相等"
when 2
    print "@variable01的值是二"
else
    print "@variable01的值不是一,也不是二"
end

我對以上腳本的解釋是這樣的(這裡我逐句翻譯,比較好懂):

取得@variable01的值
如果它等於 1
    彈出"@variable01的值與一相等"的msgbox
如果它等於 2
    彈出"@variable01的值是二"的msgbox
如果都不是
    彈出"@variable01的值不是一,也不是二"的msgbox
結束分歧



二、true、false與nil

truefalse分別解釋作"真"與"假",

都是一個常數(常數:為無法改變的一個值,像是1、2、3、圓周率等等)

通常我們在事件裡的開關會看到ON/OFF,

其實ON跟OFF跟系統裡面,分別是用truefalse進行讀取。

truefalse可以用來檢視系統的各個狀況,以維持腳本的完整性。

比如說有個Window_Base視窗@window001,

@window001.disposed?

像是這個值就是用來取得"@window001"是否已經"被釋放",

(註:"釋放"是把一個變數清空,使其成為nil,而nil這個東西,在後面會講到。)

如果已經被釋放,就返回真(true)

(註:「返回」可解作「把整個值當作」,
像是@window001.disposed?這時候在系統裡就是true
因為@window001已經是被釋放的狀態。)

這就是"真"(true)的定義及例子,false則與true的意義相反。



接下來要說的是nil這個東西,

nil在拉丁文中的意義是 "零",但是nil在這裡,實際上並不等於0,

而是"無"的意思,

nilfalse在某種程度上是相等的東西,

如果聽不懂的話就把nilfalse分開用就好。


三、函式

函式也是不可或缺的一部分,

首先來說一下函式是什麼吧,

如果你國一下的數學沒有認真讀的話,

你不會知道函式是什麼東西的

函式示意:
原料→函式→成品

也就是說,

你往函式輸入一個東西之後,

經過函式的處理及計算,會有一個成品出現。

比如,f(x) = y = 3x+2

意思就是說,

如果你把一個值x丟入f(x)的這個函式,

就會將x乘以三、再加上2,之後"返回"計算結果,

像是f(3)經過處理之後,就會等於11。

而在程式的世界中,

函式是可以一次丟一堆東西進去,

而且不見得一定要丟數字!

函式在程式的世界裡面,

通常被拿來"處理東西",

而不是純粹計算。

現在就直接切入主題,講基礎的定義方法吧!

def f(x)
    return 3*x+2
end

上面這段就相當於我剛剛說的f(x)=3x+2的函式。

返回3和x相乘,再加上2而得出來的值。

其中的def就是"定義函式"的意思,

return就是"返回",

返回3x+2之後,f(3)得到的就會是11,

比如說定義完成之後執行:

print f(3)+2000

這時候就會跳出寫著2011的一個視窗。

但是以上都只是數學式的函式!

如果我想定義一個偵測值而處理東西的函式,

可以像以下一樣:

def function(var)
    if var > 100
        print "var大於100"
    else
        print "var不大於100"
    end
end

將這個函式定義完之後,我們只要執行

function(10000)

就會彈出"var大於100"的msgbox,

當然如果我執行

function(70)

就會彈出"var不大於100"的msgbox,

以上就是函式的基本定義方法,

至於要如何靈活運用,寫出一個好的函式,

就是寫RGSS的重點所在。



基本上都學會了嗎?

我希望我寫了快兩個小時的教學,你們能認真看完。

還有不懂的,就先自己摸索看看,

如果還是沒有頭緒,直接問我就行。

今天就先講到這裡了,如果反應熱烈,

我就會寫更多教學文章給大家看,謝謝觀賞

引用網址:https://home.gamer.com.tw/TrackBack.php?sn=1243450
Some rights reserved. 姓名標示-非商業性 2.5 台灣

相關創作

同標籤作品搜尋:RPG|RM|RGSS|腳本|劇本|教學|函式|判斷|RPG 製作大師

留言共 10 篇留言

175278
這個跟VB哪個難0..0 還是很不同所以難比較
不然我也想嘗試看看呵呵

02-26 19:22

解凍豬腳
你碰過RMXP嗎?RGSS其實比VB還簡單...但是RGSS的程式碼要分大小寫...哭了02-26 19:23
若蟬
對我確實有用
感謝

03-21 16:26

解凍豬腳
[e16]03-22 09:23
你有罪死刑
你好厲害喔

04-02 01:14

解凍豬腳
[e5]04-02 14:54
爪孟爪
看不懂[e21]

06-29 17:40

解凍豬腳
那就要自己去摸索了[e16]06-29 17:57
TEST001
要如何利用RGSS作遊戲壓 我看的懂你說的這些數學 但還是沒有頭緒如果製作小遊戲@@"

08-05 09:07

解凍豬腳
RPG Maker XP是必要工具08-05 15:05
TEST001
我有了 但我是簡體的 繁化補丁找不到 @@"

08-05 22:14

解凍豬腳
別討論盜版的東西了。08-05 22:20
TEST001

08-05 22:38

Cats Eye
請問一下
if @a == 3
print "@a的值不等於三"
end


這樣子不就不需要unless了嗎?

10-21 18:07

解凍豬腳
print隨便你打說要顯示什麼都行
條件判斷那行 是「實際上」
print輸出那行 是「由程式告訴使用者」
並不會因為你print出來的東西不一樣就造成@a的實際值有所改變10-21 18:11
Cats Eye
那麼這樣的意思不就和unless一樣

if @a == 3
print "@a的值等於3"
else
Print"@a的值不等於3"

end

10-21 18:21

解凍豬腳
10-21 18:55
Cats Eye
好ㄅ, 我知道了

10-21 18:22

我要留言提醒:您尚未登入,請先登入再留言

7喜歡★johnny860726 可決定是否刪除您的留言,請勿發表違反站規文字。

前一篇:【VB.NET】巴哈姆特... 後一篇:簽名檔徵台詞...

追蹤私訊切換新版閱覽

作品資料夾

------------------ (0)

豬腳生活 (1)
日常雜談、巴哈大小事 (193)
煞氣a國中生 (7)
高中生活日誌 (55)
大學生活日誌 (34)
冬令營回憶錄 (19)
也許藏有一些小祕密吧? (3)
各式各樣的開箱文 (11)
貓科動物時間 (15)

------------------ (0)

繪圖創作 (1)
電繪插圖、草稿 (199)
短篇漫畫、單幅標語 (61)
上課太無聊的手繪塗鴉 (8)
不知道該怎麼分類的綜合作品 (18)

文字創作 (1)
草莓兵的國軍紀實 (14)
我與らい的點點滴滴 (12)
那些榮耀的時刻與心跳加速的瞬間 (60)
有感而發的隨筆之作、無法分類的短文 (17)

------------------ (0)

語言學習 (1)
日語:天気がいいから (5)
粵語:唔好再淨係識講粗口喇 (6)
英語:Hey, you! (1)

程式設計及電腦網路 (1)
系列文:跟著豬腳 C 起來 (10)
系列文:論壇網站運作原理 (3)
Go(Golang) (11)
Ruby / RGSS (7)
Visual Basic (13)
JavaScript (1)
各種原理 (17)

思想:多思考一下,世界會更不一樣 (1)
網路經驗、社會觀察 (23)
檸檬庫 (21)

數學:我來拯救你的期中考了 (1)
各類基礎觀念 (5)
國中生也能懂的微積分 (9)
微分方程 (0)

小說:用筆鋒劃出新世界的入口 (1)

繪圖:我也想畫出私巴拉西的美圖 (10)

------------------ (0)

施工中 (22)

不堪回首的痕跡、雜物堆放 (31)

------------------ (0)

未分類 (1)

ilove487奇幻小說連載中
《克蘇魯的黎明》0667.掉到海裡要先救誰?看更多我要大聲說5小時前


face基於日前微軟官方表示 Internet Explorer 不再支援新的網路標準,可能無法使用新的應用程式來呈現網站內容,在瀏覽器支援度及網站安全性的雙重考量下,為了讓巴友們有更好的使用體驗,巴哈姆特即將於 2019年9月2日 停止支援 Internet Explorer 瀏覽器的頁面呈現和功能。
屆時建議您使用下述瀏覽器來瀏覽巴哈姆特:
。Google Chrome(推薦)
。Mozilla Firefox
。Microsoft Edge(Windows10以上的作業系統版本才可使用)

face我們了解您不想看到廣告的心情⋯ 若您願意支持巴哈姆特永續經營,請將 gamer.com.tw 加入廣告阻擋工具的白名單中,謝謝 !【教學】