RGSS & Ruby Lesson - Chapter 1
หน้า 1 จาก 1
RGSS & Ruby Lesson - Chapter 1
RGSS & Ruby Lesson - Chapter 1
*
ในบทความนี้จะขอกล่าวถึงภาษา Ruby ในส่วนของ RGSS ที่นำมาใช้ในโปรแกรม
Rpgmaker XP เท่านั้น ดังนั้น หัวข้อที่ 1และ2
ของต้นฉบับเดิมจะถูกตัดออกไป หากผู้ใดสนใจ
สามารถหาบทความต้นฉบับมาดูได้ที่ www.dubealex.com โดยหัวข้อที่ตัดไปมีดังนี้
1. What is Ruby? – รูบี้คืออะไร
2. History of Ruby – ประวัติความเป็นมาของภาษารูบี้
ด้วยเหตุนี้ หัวข้อที่ 1 ในบทความนี้ จะเริ่มต้นจากหัวข้อที่ 3 ของต้นฉบับจริง
3- What Is "Object Oriented" or OO ? – อะไรคือ “Object Oriented” หรือ “OO”?
ภาษา
โปรแกรมแบบ Object-Oriented หรือ ชื่อย่อคือ OO นั้น
เป็นการเขียนโปรแกรมโดยที่ทุกสิ่งที่ผู้เขียนโปรแกรมควบคุมนั้น
จะถูกเรียกว่า “Object” (อ็อบเจ็คท์)
(หมายเหตุ : ภาษาโปรแกรมหมายถึง
รูปแบบไวยการณ์ คำ ประโยคต่างๆที่ใช้ในการเขียนโปรแกรม C++, Java, Peal,
PHP และ Ruby ล้วนแล้วแต่เป็นภาษาโปรแกรมทั้งสิ้น)
ภาษา OO นั้นจะมีสิ่งที่เหมือนกันอยู่อย่างหนึ่งก็คือพื้นฐานการจัดการโครงสร้างต่างๆของโปรแกรม ดังต่อไปนี้
-Class
-Methods
-Messages
-Arguments
-Variables/Constants
อธิบายแผนภาพ
- ใน Class นั้นจะบรรจุค่าของ variables และ method อยู่
- ใน method จะบรรจุค่าของ variables และ code อยู่
- ใน message อาจมี argument อยู่ได้
- Object เป็นส่วนหนึ่งของ class
- Object จะทำงานผ่าน Message และ Argument
ตัวอย่างของ Object
เรา
มาลองมอง Class ให้เป็นโรงงานผลิตรถยนต์ ดังนั้น Object
ก็คือรถที่ผลิตออกมาจากโรงงาน และในโรงงานนั้นก็จะมี “function”
ต่างๆที่ช่วยให้การผลิตรถออกมาง่ายขึ้น
โดยรถแต่ละคันนั้นก็จะออกมาไม่เหมือนกัน รถแต่ละคันนั้นคือ object ต่างๆ
ที่สามารถแก้ไขแต่ละคันได้โดยไม่มีผลกระทบต่อคันอื่นแต่อย่างใด
ดังนั้นเมื่อเราสร้างโรงงานผลิตรถยนต์ขึ้นมา(Class)
การจะสร้างรถคันใหม่(Object) ก็ไม่ใช่เรื่องยาก
ตัวอย่างการทำงานและ คุณสมบัติของ Object
การ
ที่เราจะควบคุมคุณสมบัติต่างๆของ Object นั้น เราจำเป็นต้องส่งข้อความไปยัง
Object นั้นเสียก่อน เช่นใน Rpgmaker XP
ฮีโร่ของเรามีหลายคุณสมบัติให้เราได้ควบคุม ไม่ว่าจะเป็น ชื่อ พลังชีวิต
หรือ
เลเว่ลเวลาเล่นเกมเราอาจเห็นคุณสมบัติเหล่านี้แสดงขึ้นมาบนหน้าจอเมนเมนู
แต่ความจริงแล้วโปรแกรมที่ทำงานอยู่เบื้องหลังนั้นได้ส่งข้อความต่างๆไปยัง
Object ของ hero เพื่อขอข้อมูลเหล่านี้มาต่างหาก
Method
คือตัวที่กำหนดข้อความที่ object จะได้รับ
และข้อความนั้นจะส่งผลให้เกิดอะไรขึ้น ในกรณีนี้ object
นั้นเชื่อมกับต้นกำเนิดของมัน หรือก็คือ class ของมัน
ดังนั้นข้อความที่ส่งไปจะต้องมี method ที่อ้างอิงถึงอยู่ใน class
นั้นๆด้วย
ลองดูตัวอย่างจาก hero อีกครั้ง RPG Maker XP จะมี class
ของ hero อยู่แล้ว และใน class นั้นจะมี method
ต่างๆที่ควบคุมข้อความที่เราส่งไปยัง hero แน่นอนว่าเราจะพบ method ที่
ชื่อว่า “name” อยู่ในนั้น โดย method ที่ชื่อ name นี้จะกำหนดว่าจะเกิดอะไรขึ้นเมื่อมีข้อความ name ส่งมายัง object ของ class มัน
4- What Is RGSS ? – RGSS คืออะไร?
RGSS
ย่อมาจาก "Ruby Game Scripting System" โดย RGSS
นั้นใช้ภาษารูบี้ในการควบคุม ดังนั้นหากเราเขียนรูบี้เป็น RGSS
ก็ไม่ใช่เรื่องยากอะไร ข้อแตกต่างระหว่างรูบี้กับ RGSS
นั้นก็คือ RGSS
เป็นภาษาแบบ Scripting โดยโปรแกรม RPGMaker XP นั้น
ได้จัดการเขียนส่วนต่างๆที่เป็นพื้นฐานสำคัญๆใส่เข้าไปเรียบร้อยแล้วโดยซ่อน
ไว้ไม่ให้เราเห็น
ดังนั้นจึงไม่มีความจำเป็นที่เราต้องเขียนคำสั่งพื้นฐานเหล่านี้ใหม่จาก 0
ยกตัวอย่างเช่นการแสดงรูปภาพ ซึ่งความจริงแล้วต้องมีการโหลดไฟล์รูปภาพ
การตรวจชื่อไฟล์ และอื่นๆอีกมากมาย แต่
ใน RGSS นั้น สามารถทำได้เพียงแค่สองบรรทัดนี้
จาก
ตัวอย่าง class ของ “Sprite” นั้น RGSS ได้เตรียมมาให้เราไว้อยู่แล้ว
นอกจากนี้เรายังใช้ module RPG ซึ่งโปรแกรมก็เตรียมเอาไว้แล้วเช่นเดียวกัน
การเขียนรูบี้ใน RGSS จึงง่าย และรวดเร็วกว่าปกติอย่างเห็นได้ชัด
ใน
เมื่อ RGSS นั้นใช้ Ruby เวอร์ชั่น 1.8.1 เป็นตัวพื้นฐาน การเขียน class
Sprite ขึ้นมาใหม่ หรือดัดแปลงของเก่าก็เป็นไปได้ หากเราไม่พอใจกับ Sprite
ที่โปรแกรมเตรียมให้มา จะเห็น
ว่า RGSS ทำให้เกมของเรามีอิสระขึ้นกว่าเดิม เป็นล้านๆเท่าตัวเลยทีเดียว
5- RPG Maker XP Script Editor – ตัวจัดการสคริปต์ใน RPG MakerXP
RPG
Maker XP มาพร้อมกับตัวจัดการสคริปต์หรือ Script Editor
ซึ่งช่วยให้คุณจัดการโค้ด หรือที่เรียกว่า สคริปต์ ได้
สคริปต์เหล่านี้นั่นเอง คือ โค้ดของ RGSS ซึ่งใช้ ภาษารูบี้เป็นรากฐาน
เราสามารถปรับแต่งหรือเพิ่มเติมคุณสมบัติต่างๆให้กับ RPG Maker XP
ได้ด้วยตนเอง เมื่อเปิดตัวจัดการสคริปต์ขึ้นมาแล้ว
เราจะเห็นว่ามีหลายสคริปต์อยู่เหมือนกันที่ถูกใส่ไว้ใน เกมเรียบร้อยแล้ว
สคริปต์เหล่านั้นคือสคริปต์พื้นฐานที่ทำให้เกมพื้นฐานจาก RPG Maker XP
เป็นอย่างที่เราเห็น ทาง Enterbrain ได้แบ่งแยกสคริปต์ตาม class
ต่างๆเพื่อความง่ายใน การค้นหาและจัดการ ทว่าเราสามารถรวมหลายๆ class
ไว้ในหน้าเดียว ก็ทำได้เช่นเดียวกัน
เราสามารถเปิดหน้าจอจัด
การสคริปต์ได้ด้วยการกดปุ่ม F11 หรือไปที่เมนู Tool ด้านบนแล้วเลือก
Script Editor หรือ คลิกที่ ไอค่อน Script Editor ใน toolbar
อธิบายภาพ
Page Name - ชื่อของหน้ากระดาษ ไม่มีผลอะไรต่อสคริปต์ทั้งสิ้น
Page List - สารบัญหน้าต่างๆของโค้ด
RGSS Code- Page View - หน้าจอแสดงโค้ด
Real Class Name - ชื่อของ Class ส่วนนี้มีผลต่อสคริปต์ ไม่ใช่ Page Name
A Method Name - ชื่อของ Method ภายใน class
จาก
ภาพจะเห็นว่า ชื่อของหน้ากระดาษด้านซ้ายล่างนั้น
เป็นเพียงชื่อที่มีไว้เพื่อให้การค้นหาและแก้ไขโค้ดที่เราต้องการได้สะดวก
ขึ้นเท่านั้น ชื่อที่สำคัญต่อโค้ดจริงๆคือ Real Class Name
ดังนั้นในหน้ากระดาษหน้านึง เราสามารถมี Class มากกว่าหนึ่ง Class
ในหน้านั้นได้
สีต่างๆของโค้ด :
สีต่างๆดังต่อไปนี้คือสีที่
โปรแกรมใช้ในการจัดการสคริปต์ เพื่อให้การอ่านสคริปต์ง่ายขึ้น
สีต่างๆเหล่านี้นั้นเหมือนกับการเขียนโปรแกรมภาษารูบี้ปกติ
The
following color code is used when editing your scripts, take note that
this color convention is almost the same as for Ruby Programming. (Some
color tag were discarded...)
น้ำเงิน:
สีน้ำเงินหมายถึงคำจำพวก def, class, end, when, if, case, อื่นๆ.
Red:
สีแดงแสดงถึงตัวเลขในโค้ดของเรา เช่น 1, 2, 3 และ 5.
ฟ้า :
สีฟ้าแสดงถึงกระบวนการต่างๆทางตรรกะและทางคณิตศาสตร์ในโค้ดของเราเช่น + - * หรือ /
เขียว
สี
เขียวแสดงถึง comment ในโค้ดของเรา comment คือความคิดเห็น หรือบันทึก
ที่มีไว้เพื่อเตือนสติว่าบรรทัดนี้โค้ดนี้จะทำอะไร ดังนั้น comment
จะไม่ถูกนับเป็นโค้ด และไม่รวมเข้าไปเมื่อทำการรันโค้ดนั้น
สีม่วง
สีม่วงแสดงถึงข้อความประเภท string หรือตัวอักษรในโค้ดของเรา รวมไปถึงที่อยู่ของโฟลเดอร์ต่างๆอีกด้วย
คุณสมบัติของ Script Editor
ตัว
จัดการสคริปต์ของ RPG Maker XP นั้น
มาพร้อมกับคุณสมบัติพื้นฐานต่างๆที่อำนวยความสะดวกอย่างยิ่งยวด เช่น
คำสั่งค้นหา แทนที่ หรือ ไปยังบรรทัดที่ต้องการ ดังจะกล่าวต่อไปนี้
คุณสมบัติของการดูโค้ด
(คลิกขวาที่หน้าจอแสดงโค้ด เพื่อใช้งานคุณสมบัติเหล่านี้)
-> สามารถ ตัด/คัดลอก/วาง ข้อความได้ตามปกติ
-> ค้นหา (Control+F)
-> แทนที่ (Control + H)
-> ไปยังบรรทัดที่ต้องการ (Control + G)
-> ซูมเข้าซูมออก Control+Mouse Wheel
คุณสมบัติของรายชื่อหน้ากระดาษโค้ด:
(คลิกขวาที่หน้าจอแสดงรายชื่อกระดาษ เพื่อใช้งานคุณสมบัติเหล่านี้)
-> สามารถ ตัด/คัดลอก/วาง ข้อความได้ตามปกติ
-> เพิ่มหน้า (Insert)
-> ลบหน้ากระดาษ (Delete)
-> ค้นหา (Control + F)
นอก
จากนี้คุณยังสามารถจัดการเรียงตัวอักษร หรือใช้ตัวอักษรได้ด้วย
โดยตัวอักษรจะถูกเซ็ทเป็น Unicode อันเนื่องมาจาก โปรแกรม RPG Maker XP
เป็นผลผลิตของประเทศญี่ปุ่น
6- Basic vocabulary and syntax - ไวยากรณ์พื้นฐาน
เรา
จะเริ่มต้นจากการเขียนโปรแกรมที่ง่ายที่สุด
เพื่อสร้างพื้นฐานและให้คุ้นเคยกับการเขียนโปรแกรมเสียก่อน
โปรแกรมที่เราจะเขียนนี้คือ โปรแกรมที่จะแสดงคำว่า “I am therefore I’m
coded” ขึ้นมาบนหน้าจอ
สร้าง
หน้าใหม่ขึ้นมาในตัวจัดการสคริปต์ จากนั้นคัดลอก และ วางโค้ดด้านบนลงไป
อย่าลืมว่าเราจะตั้งชื่อหน้ากระดาษว่าอะไรก็ได้
แต่ควรเป็นชื่อที่มีประโยชน์และสะดวกต่อการค้น
หา
เพื่อการทำงานที่ง่ายขึ้นในภายภาคหน้า ในกรณีนี้
เราอาจตั้งชื่อหน้ากระดาษว่า Say Something เพื่อให้รู้ว่า class Say
Something นั้นอยู่ในหน้านี้ เป็นต้น
หากเราต้องการทดสอบโค้ดที่เราพึ่ง
เขียนไป เราก็ทำได้โดยแค่สร้างอีเวนท์ขึ้นมาใหม่ และใส่คำสั่ง “Call
Script” เข้าไป โดยข้างใน Call script ให้เราเขียน โค้ดนี้
เมื่อเราเล่นเกมและสำรวจอีเวนท์ที่เราเพิ่งสร้างเสร็จ หน้าจอจะปรากฏข้อความ “I think therefore I’m coded” ขึ้นมา
อธิบายบรรทัดต่อบรรทัด :
Line 1: เราสร้าง class ขึ้นมาใหม่ ชื่อว่า “Say_Something”
Line 3: เราสร้าง method ขึ้นมาใหม่ ชื่อว่า “initialize”
Line 4: เราเพิ่มโค้ดเข้าไป เพื่อบอกให้รู้ว่า initialize จะทำงานอะไรเมื่อถูกเรียกใช้
Line 5: เราปิดขอบเขตการทำงานของ “initialize” ด้วยคำว่า “END”
Line 7: เราปิดขอบเขตการทำงานของ class "Say_Something" ด้วยคำว่า "END"
method
“initialize” นั้น คำว่า initialize แปลว่า เริ่มต้น นั่นหมายถึง method
ชื่อนี้จะถูกเรียกใช้งาน เมื่อเราใช้คำสั่ง .new
ดังที่เราใส่ลงไปในคำสั่ง Call Script ของ event.
ดังนั้นในเมื่อเราเรียกใช้งานสคริปต์ที่ว่า Say_Something.new
นั่นหมายถึงเราบอกให้ RPG Maker XP สร้าง object ใหม่จาก class
Say_Something ด้วยข้อความ “new” โดย ข้อความ “new” นี้จะไป
สั่งให้ method “initialize” ทำงานนั่นเอง
นอก
จากนี้ ลองสังเกตดูจะพบว่า ทุกอย่างที่เรากำหนดไว้ตอนแรกนั้น
ต้องถูกปิดขอบเขตลงด้วยคำสั่ง END
การปิดขอบเขตหรือจบการทำงานนี้เป็นสิ่งที่จำเป็นอย่างมากในหลายๆส่วนของภาษา
รูบี้ ดังนั้นการที่เราย่นย่อหน้าเข้ามา
จะทำให้การตรวจสอบการปิดขอบเขตง่ายขึ้น ดังตัวอย่างด้านล่าง
เรา
จะเห็นว่า ในแต่ละส่วนของโค้ดนั้นจะต้องมีการเปิดและปิดอย่างเป็นระเบียบ
และเมื่อเราย่นย่อหน้าลงแล้ว
การที่เราจะเปิดและปิดโค้ดก็ง่ายขึ้นกว่าเดิมมาก
ในช่วงต้นๆ
เราบอกว่าทุกสิ่งทุกอย่างในภาษารูบี้เป็น object แต่เราเหมือนจะไม่เห็น
object ใดๆเลยระหว่างใช้งาน Say Something
ในความเป็นจริงนั้นเราได้สร้าง object ขึ้นมา แต่
object
ถูกทำลายทันทีที่ใช้งานเสร็จ ลองเขียนโค้ดด้านล่างดูใน Call Script
แล้วเราจะพบว่า มันทำงานเหมือนกับโค้ดที่แล้ว ไม่ได้ต่างกันเลย
โค้ด
นี้ทำงานได้เหมือนกัน แต่ในกรณีนี้ เราสร้างตัวแปรขึ้นมารองรับ object
ดังนั้น my_object จึงกลายเป็น object ที่ผลิตจาก class “Say_Something”
แต่ในกรณีนี้ class ของเราไม่ได้
ทำอะไรนอกจากแสดงตัวอักษร การที่จะสร้างตัวแปรมารองรับเลยออกจะดูไร้ประโยชน์ไปซักหน่อย
เรา
ลองมาปรับแต่ง “Say_Something” ของเราให้มีประโยชน์กันกว่านี้ดีกว่า
ในจุดนี้เราจะมารู้จักกับ “Arguments” กัน
นำโค้ดด้านล่างไปทับของเก่าได้เลย
จากนั้นไปที่อีเวนท์ของเก่า แล้วแก้ไข Call Script ให้เป็นดังด้านล่างนี้
จาก
นั้นเมื่อเราลองคุยกับอีเวนท์นี้ดู จะพบว่ามีหน้าต่างขึ้นมา 4 อัน
แสดงข้อความที่มีค่าต่างๆที่เราใส่ลงไป
หน้าต่างแรกจะแสดงชื่อที่เรากำหนดค่าให้กับ object “message1”
หน้าต่าง
ที่สองจะแสดงชื่อที่เรากำหนดค่าให้กับ object “message2”
ส่วนอีกสองหน้าต่างที่เหลือนั้นเป็นผลมาจากที่เราสั่งให้ object
ทั้งสองทำงานกับคำสั่ง “say” โดยใน class “Say_Something” นั้น
เราก็กำหนดการทำงานของ method ”say” เอาไว้เรียบร้อยแล้ว
นี่แสดงให้
เราเห็นว่า เราสร้าง object ขึ้นมา 2 อัน คือ “message1” และ “message2”
ซึ่งเป็นผลผลิตจาก class “Say_Something”
โดยที่เราสามารถปรับแต่งทั้งสองได้โดยไม่ทำให้อีกอัน
เสียหายแต่อย่างใด
อธิบายโค้ด บรรทัดต่อบรรทัด:
Line 1: เราสร้าง class ขึ้นมาใหม่ ชื่อว่า “Say_Something”
Line
3: เราสร้างตัวแปรประเภท ATTR ย่อมาจาก Attribute.
รูบี้นั้นทรงพลังมากด้วยสิ่งนี้ เพราะเราสามารถใช้คำสั่ง ATTR_ACCESSOR
ในการสร้าง attribute ซึ่งสามารถอ่านและ
เขียนได้ในทุกๆ object ที่ถูกสร้างขึ้นจาก class “Say_Something” โดย ATTR อันแรกของเราชื่อ "greeting".
Line 4: เราสร้าง ATTR ตัวที่สอง ชื่อ "name".
Line
6: เราสร้าง method ใหม่ขึ้นมาชื่อ “initialize” ดังที่กล่าวไว้ข้างตน
initialize จะถูกเรียกใช้งานเป็นmethod แรกสุด เมื่อ object ถูกสร้างขึ้นมา
ดังนั้นเราจึงเพิ่ม “Argument Reciever” หรือ ตัวรับ Argument เข้าไปใน
method นี้ ในกรณีนี้ค่าที่เราจะรับคือ “greeting” และ “name”
โดยค่าที่เราจะรับนี้จะถูกใส่ไว้ในวงเล็บ ข้างๆชื่อของ method
จำไว้ให้ดีว่าชื่อที่เรา
กำหนดในวงเล็บนี้เป็นชื่อประเภท recipients
หรือหมายถึง หากเราจะอ้างอิงถึงตัวแปรตัวนี้
เราต้องใช้ชื่อเหมือนกับที่เขียนไว้ในวงเล็บเท่านั้น ใน method นี้
Line
7: เราสร้างตัวแปรประเภท instance ขึ้นมาใหม่ โดยตัวแปรนี้จะเก็บค่าของ
“greeting” ตัวแปรประเภท instance สามารถสร้างขึ้นได้ด้วยการใช้ @
นำหน้าชื่อตัวแปร และถูกเรียก
ใช้งานจาก method ใดก็ได้ใน class นั้นๆ
ในกรณีนี้ เราให้โปรแกรมรับค่า “greeting” แล้วไปบรรจุใน “@greeting”
เพื่อให้เราสามารถใช้ค่า “@greeting” ได้ใน method อื่นๆ เพราะ
greeting เป็น recipients ใช้ได้แค่ใน method เดียวเท่านั้น
Line 8: ทำเหมือนบรรทัดที่เจ็ด แต่เปลี่ยนเป็นATTR “name”
Line 9: เราปิดขอบเขตการทำงานของ “initialize” ด้วยคำว่า “END”
Line 11: เราสร้าง method ใหม่ชื่อ “say”
Line
12: เราทำการเขียนโค้ดเพื่อกำหนดสิ่งที่เกิดขึ้นเมื่อข้อความ say
ถูกส่งมายัง object ใน class นี้ โดยในกรณีนี้เรากำหนดให้
โปรแกรมพิมพ์ข้อความที่บรรจุในตัวแปร “@greeting”
ตามด้วยเว้นวรรค แล้วตามด้วยข้อความที่บรรจุในตัวแปร “@name”
Line 13: เราปิดขอบเขตการทำงานของ “say” ด้วยคำว่า “END”
Line 15: เราปิดขอบเขตการทำงานของ class "Say_Something" ด้วยคำว่า "END"
อธิบายโค้ดใน Call Script บรรทัดต่อบรรทัด:
Line
1: เราสร้าง object ขึ้นมาชื่อ “message1” ซึ่งเป็นผลผลิตจาก
“Say_Something” นั่นหมายถึง เราสามารถทำอะไรก็ได้ใน object นี้
ที่เรากำหนดไว้ใน class “Say_Something” และ
เราได้เพิ่ม “Argument
Receiver” เข้าไปแล้วใน method “initialize” ดังนั้นการจะสร้าง object
ขึ้นมา เราจำเป็นต้องใส่ค่าต่างๆเหล่านั้นเช่นกัน
หรือไม่งั้นโปรแกรมจะถามหาข้อมูลเหล่านั้นและปิดตัวลง
การป้อนค่าเข้าไปนั้นก็ไม่ต่างจากตอนกำหนดค่าเพียงแค่เราใส่ค่าที่ต้องการลง
ในวงเล็บข้างๆชื่อเท่านั้น
Line 2: เราสร้าง object ขึ้นมาชื่อ “message2” ด้วยวิธีเดียวกับobject ที่แล้ว
Line
4: เราใช้คำสั่ง “print” ของ Ruby ซึ่งเป็นคำสั่งในการแสดงข้อความ
เพื่อแสดงสิ่งที่เราบรรจุไว้ใน object “message1”
จะเห็นได้ว่าการทำสิ่งเหล่านี้ไม่ใช่เรื่องยากเลย เราสามารถควบคุม object
ด้วยการใช้ชื่อที่คุณกำหนดไว้ใน ATTR ใน class ที่สร้างไว้ได้อย่างง่ายดาย
Line 5: ทำเช่นเดียวกับบรรทัดที่แล้วกับ “message2”
Line
7: เราทำการส่งข้อความไปยัง object “message1” ของเรา โดย ข้อความนั้นคือ
“say” เราอาจเรียกว่าข้อความนี้คือคำสั่งก็ได้ ง่ายๆก็คือเราบอกให้
meesage1 ทำการ say แล้ว message1 ก็จะตรวจสอบว่า say ใน class
ของมันคืออะไร ซึ่งก็คือการแสดงข้อความ ดังนั้น message1
จึงแสดงข้อความออกมา ด้วยคำสั่ง say ที่เราสั่งไป
Line 8: ทำเช่นเดียวกับบรรทัดที่แล้วกับ “message2”
7- บทสรุป
ขอบ
คุณคุณ dubealex
ที่อนุญาตให้นำบทความอันมีประโยชน์ยิ่งมาแปลและเผยแพร่ในภาษาไทย
หากผู้ใดสนใจต้นฉบับ สามารถเข้าไปดูได้ใน www.dubealex.com ค่ะ
Credit:Mako
*
ในบทความนี้จะขอกล่าวถึงภาษา Ruby ในส่วนของ RGSS ที่นำมาใช้ในโปรแกรม
Rpgmaker XP เท่านั้น ดังนั้น หัวข้อที่ 1และ2
ของต้นฉบับเดิมจะถูกตัดออกไป หากผู้ใดสนใจ
สามารถหาบทความต้นฉบับมาดูได้ที่ www.dubealex.com โดยหัวข้อที่ตัดไปมีดังนี้
1. What is Ruby? – รูบี้คืออะไร
2. History of Ruby – ประวัติความเป็นมาของภาษารูบี้
ด้วยเหตุนี้ หัวข้อที่ 1 ในบทความนี้ จะเริ่มต้นจากหัวข้อที่ 3 ของต้นฉบับจริง
3- What Is "Object Oriented" or OO ? – อะไรคือ “Object Oriented” หรือ “OO”?
ภาษา
โปรแกรมแบบ Object-Oriented หรือ ชื่อย่อคือ OO นั้น
เป็นการเขียนโปรแกรมโดยที่ทุกสิ่งที่ผู้เขียนโปรแกรมควบคุมนั้น
จะถูกเรียกว่า “Object” (อ็อบเจ็คท์)
(หมายเหตุ : ภาษาโปรแกรมหมายถึง
รูปแบบไวยการณ์ คำ ประโยคต่างๆที่ใช้ในการเขียนโปรแกรม C++, Java, Peal,
PHP และ Ruby ล้วนแล้วแต่เป็นภาษาโปรแกรมทั้งสิ้น)
ภาษา OO นั้นจะมีสิ่งที่เหมือนกันอยู่อย่างหนึ่งก็คือพื้นฐานการจัดการโครงสร้างต่างๆของโปรแกรม ดังต่อไปนี้
-Class
-Methods
-Messages
-Arguments
-Variables/Constants
อธิบายแผนภาพ
- ใน Class นั้นจะบรรจุค่าของ variables และ method อยู่
- ใน method จะบรรจุค่าของ variables และ code อยู่
- ใน message อาจมี argument อยู่ได้
- Object เป็นส่วนหนึ่งของ class
- Object จะทำงานผ่าน Message และ Argument
ตัวอย่างของ Object
เรา
มาลองมอง Class ให้เป็นโรงงานผลิตรถยนต์ ดังนั้น Object
ก็คือรถที่ผลิตออกมาจากโรงงาน และในโรงงานนั้นก็จะมี “function”
ต่างๆที่ช่วยให้การผลิตรถออกมาง่ายขึ้น
โดยรถแต่ละคันนั้นก็จะออกมาไม่เหมือนกัน รถแต่ละคันนั้นคือ object ต่างๆ
ที่สามารถแก้ไขแต่ละคันได้โดยไม่มีผลกระทบต่อคันอื่นแต่อย่างใด
ดังนั้นเมื่อเราสร้างโรงงานผลิตรถยนต์ขึ้นมา(Class)
การจะสร้างรถคันใหม่(Object) ก็ไม่ใช่เรื่องยาก
ตัวอย่างการทำงานและ คุณสมบัติของ Object
การ
ที่เราจะควบคุมคุณสมบัติต่างๆของ Object นั้น เราจำเป็นต้องส่งข้อความไปยัง
Object นั้นเสียก่อน เช่นใน Rpgmaker XP
ฮีโร่ของเรามีหลายคุณสมบัติให้เราได้ควบคุม ไม่ว่าจะเป็น ชื่อ พลังชีวิต
หรือ
เลเว่ลเวลาเล่นเกมเราอาจเห็นคุณสมบัติเหล่านี้แสดงขึ้นมาบนหน้าจอเมนเมนู
แต่ความจริงแล้วโปรแกรมที่ทำงานอยู่เบื้องหลังนั้นได้ส่งข้อความต่างๆไปยัง
Object ของ hero เพื่อขอข้อมูลเหล่านี้มาต่างหาก
Method
คือตัวที่กำหนดข้อความที่ object จะได้รับ
และข้อความนั้นจะส่งผลให้เกิดอะไรขึ้น ในกรณีนี้ object
นั้นเชื่อมกับต้นกำเนิดของมัน หรือก็คือ class ของมัน
ดังนั้นข้อความที่ส่งไปจะต้องมี method ที่อ้างอิงถึงอยู่ใน class
นั้นๆด้วย
ลองดูตัวอย่างจาก hero อีกครั้ง RPG Maker XP จะมี class
ของ hero อยู่แล้ว และใน class นั้นจะมี method
ต่างๆที่ควบคุมข้อความที่เราส่งไปยัง hero แน่นอนว่าเราจะพบ method ที่
ชื่อว่า “name” อยู่ในนั้น โดย method ที่ชื่อ name นี้จะกำหนดว่าจะเกิดอะไรขึ้นเมื่อมีข้อความ name ส่งมายัง object ของ class มัน
4- What Is RGSS ? – RGSS คืออะไร?
RGSS
ย่อมาจาก "Ruby Game Scripting System" โดย RGSS
นั้นใช้ภาษารูบี้ในการควบคุม ดังนั้นหากเราเขียนรูบี้เป็น RGSS
ก็ไม่ใช่เรื่องยากอะไร ข้อแตกต่างระหว่างรูบี้กับ RGSS
นั้นก็คือ RGSS
เป็นภาษาแบบ Scripting โดยโปรแกรม RPGMaker XP นั้น
ได้จัดการเขียนส่วนต่างๆที่เป็นพื้นฐานสำคัญๆใส่เข้าไปเรียบร้อยแล้วโดยซ่อน
ไว้ไม่ให้เราเห็น
ดังนั้นจึงไม่มีความจำเป็นที่เราต้องเขียนคำสั่งพื้นฐานเหล่านี้ใหม่จาก 0
ยกตัวอย่างเช่นการแสดงรูปภาพ ซึ่งความจริงแล้วต้องมีการโหลดไฟล์รูปภาพ
การตรวจชื่อไฟล์ และอื่นๆอีกมากมาย แต่
ใน RGSS นั้น สามารถทำได้เพียงแค่สองบรรทัดนี้
CODE |
image = Sprite.new image.bitmap = RPG::Cache.picture(name of picture) |
จาก
ตัวอย่าง class ของ “Sprite” นั้น RGSS ได้เตรียมมาให้เราไว้อยู่แล้ว
นอกจากนี้เรายังใช้ module RPG ซึ่งโปรแกรมก็เตรียมเอาไว้แล้วเช่นเดียวกัน
การเขียนรูบี้ใน RGSS จึงง่าย และรวดเร็วกว่าปกติอย่างเห็นได้ชัด
ใน
เมื่อ RGSS นั้นใช้ Ruby เวอร์ชั่น 1.8.1 เป็นตัวพื้นฐาน การเขียน class
Sprite ขึ้นมาใหม่ หรือดัดแปลงของเก่าก็เป็นไปได้ หากเราไม่พอใจกับ Sprite
ที่โปรแกรมเตรียมให้มา จะเห็น
ว่า RGSS ทำให้เกมของเรามีอิสระขึ้นกว่าเดิม เป็นล้านๆเท่าตัวเลยทีเดียว
5- RPG Maker XP Script Editor – ตัวจัดการสคริปต์ใน RPG MakerXP
RPG
Maker XP มาพร้อมกับตัวจัดการสคริปต์หรือ Script Editor
ซึ่งช่วยให้คุณจัดการโค้ด หรือที่เรียกว่า สคริปต์ ได้
สคริปต์เหล่านี้นั่นเอง คือ โค้ดของ RGSS ซึ่งใช้ ภาษารูบี้เป็นรากฐาน
เราสามารถปรับแต่งหรือเพิ่มเติมคุณสมบัติต่างๆให้กับ RPG Maker XP
ได้ด้วยตนเอง เมื่อเปิดตัวจัดการสคริปต์ขึ้นมาแล้ว
เราจะเห็นว่ามีหลายสคริปต์อยู่เหมือนกันที่ถูกใส่ไว้ใน เกมเรียบร้อยแล้ว
สคริปต์เหล่านั้นคือสคริปต์พื้นฐานที่ทำให้เกมพื้นฐานจาก RPG Maker XP
เป็นอย่างที่เราเห็น ทาง Enterbrain ได้แบ่งแยกสคริปต์ตาม class
ต่างๆเพื่อความง่ายใน การค้นหาและจัดการ ทว่าเราสามารถรวมหลายๆ class
ไว้ในหน้าเดียว ก็ทำได้เช่นเดียวกัน
เราสามารถเปิดหน้าจอจัด
การสคริปต์ได้ด้วยการกดปุ่ม F11 หรือไปที่เมนู Tool ด้านบนแล้วเลือก
Script Editor หรือ คลิกที่ ไอค่อน Script Editor ใน toolbar
อธิบายภาพ
Page Name - ชื่อของหน้ากระดาษ ไม่มีผลอะไรต่อสคริปต์ทั้งสิ้น
Page List - สารบัญหน้าต่างๆของโค้ด
RGSS Code- Page View - หน้าจอแสดงโค้ด
Real Class Name - ชื่อของ Class ส่วนนี้มีผลต่อสคริปต์ ไม่ใช่ Page Name
A Method Name - ชื่อของ Method ภายใน class
จาก
ภาพจะเห็นว่า ชื่อของหน้ากระดาษด้านซ้ายล่างนั้น
เป็นเพียงชื่อที่มีไว้เพื่อให้การค้นหาและแก้ไขโค้ดที่เราต้องการได้สะดวก
ขึ้นเท่านั้น ชื่อที่สำคัญต่อโค้ดจริงๆคือ Real Class Name
ดังนั้นในหน้ากระดาษหน้านึง เราสามารถมี Class มากกว่าหนึ่ง Class
ในหน้านั้นได้
สีต่างๆของโค้ด :
สีต่างๆดังต่อไปนี้คือสีที่
โปรแกรมใช้ในการจัดการสคริปต์ เพื่อให้การอ่านสคริปต์ง่ายขึ้น
สีต่างๆเหล่านี้นั้นเหมือนกับการเขียนโปรแกรมภาษารูบี้ปกติ
The
following color code is used when editing your scripts, take note that
this color convention is almost the same as for Ruby Programming. (Some
color tag were discarded...)
น้ำเงิน:
สีน้ำเงินหมายถึงคำจำพวก def, class, end, when, if, case, อื่นๆ.
Red:
สีแดงแสดงถึงตัวเลขในโค้ดของเรา เช่น 1, 2, 3 และ 5.
ฟ้า :
สีฟ้าแสดงถึงกระบวนการต่างๆทางตรรกะและทางคณิตศาสตร์ในโค้ดของเราเช่น + - * หรือ /
เขียว
สี
เขียวแสดงถึง comment ในโค้ดของเรา comment คือความคิดเห็น หรือบันทึก
ที่มีไว้เพื่อเตือนสติว่าบรรทัดนี้โค้ดนี้จะทำอะไร ดังนั้น comment
จะไม่ถูกนับเป็นโค้ด และไม่รวมเข้าไปเมื่อทำการรันโค้ดนั้น
สีม่วง
สีม่วงแสดงถึงข้อความประเภท string หรือตัวอักษรในโค้ดของเรา รวมไปถึงที่อยู่ของโฟลเดอร์ต่างๆอีกด้วย
คุณสมบัติของ Script Editor
ตัว
จัดการสคริปต์ของ RPG Maker XP นั้น
มาพร้อมกับคุณสมบัติพื้นฐานต่างๆที่อำนวยความสะดวกอย่างยิ่งยวด เช่น
คำสั่งค้นหา แทนที่ หรือ ไปยังบรรทัดที่ต้องการ ดังจะกล่าวต่อไปนี้
คุณสมบัติของการดูโค้ด
(คลิกขวาที่หน้าจอแสดงโค้ด เพื่อใช้งานคุณสมบัติเหล่านี้)
-> สามารถ ตัด/คัดลอก/วาง ข้อความได้ตามปกติ
-> ค้นหา (Control+F)
-> แทนที่ (Control + H)
-> ไปยังบรรทัดที่ต้องการ (Control + G)
-> ซูมเข้าซูมออก Control+Mouse Wheel
คุณสมบัติของรายชื่อหน้ากระดาษโค้ด:
(คลิกขวาที่หน้าจอแสดงรายชื่อกระดาษ เพื่อใช้งานคุณสมบัติเหล่านี้)
-> สามารถ ตัด/คัดลอก/วาง ข้อความได้ตามปกติ
-> เพิ่มหน้า (Insert)
-> ลบหน้ากระดาษ (Delete)
-> ค้นหา (Control + F)
นอก
จากนี้คุณยังสามารถจัดการเรียงตัวอักษร หรือใช้ตัวอักษรได้ด้วย
โดยตัวอักษรจะถูกเซ็ทเป็น Unicode อันเนื่องมาจาก โปรแกรม RPG Maker XP
เป็นผลผลิตของประเทศญี่ปุ่น
6- Basic vocabulary and syntax - ไวยากรณ์พื้นฐาน
เรา
จะเริ่มต้นจากการเขียนโปรแกรมที่ง่ายที่สุด
เพื่อสร้างพื้นฐานและให้คุ้นเคยกับการเขียนโปรแกรมเสียก่อน
โปรแกรมที่เราจะเขียนนี้คือ โปรแกรมที่จะแสดงคำว่า “I am therefore I’m
coded” ขึ้นมาบนหน้าจอ
CODE |
CODE class Say_Something def initialize print "I am therefore I'm coded" end end |
สร้าง
หน้าใหม่ขึ้นมาในตัวจัดการสคริปต์ จากนั้นคัดลอก และ วางโค้ดด้านบนลงไป
อย่าลืมว่าเราจะตั้งชื่อหน้ากระดาษว่าอะไรก็ได้
แต่ควรเป็นชื่อที่มีประโยชน์และสะดวกต่อการค้น
หา
เพื่อการทำงานที่ง่ายขึ้นในภายภาคหน้า ในกรณีนี้
เราอาจตั้งชื่อหน้ากระดาษว่า Say Something เพื่อให้รู้ว่า class Say
Something นั้นอยู่ในหน้านี้ เป็นต้น
หากเราต้องการทดสอบโค้ดที่เราพึ่ง
เขียนไป เราก็ทำได้โดยแค่สร้างอีเวนท์ขึ้นมาใหม่ และใส่คำสั่ง “Call
Script” เข้าไป โดยข้างใน Call script ให้เราเขียน โค้ดนี้
CODE |
Say_Something.new |
เมื่อเราเล่นเกมและสำรวจอีเวนท์ที่เราเพิ่งสร้างเสร็จ หน้าจอจะปรากฏข้อความ “I think therefore I’m coded” ขึ้นมา
อธิบายบรรทัดต่อบรรทัด :
CODE |
CODE 1 class Say_Something 2 3 def initialize 4 print "I am therefore I'm coded" 5 end 6 7 end |
Line 1: เราสร้าง class ขึ้นมาใหม่ ชื่อว่า “Say_Something”
Line 3: เราสร้าง method ขึ้นมาใหม่ ชื่อว่า “initialize”
Line 4: เราเพิ่มโค้ดเข้าไป เพื่อบอกให้รู้ว่า initialize จะทำงานอะไรเมื่อถูกเรียกใช้
Line 5: เราปิดขอบเขตการทำงานของ “initialize” ด้วยคำว่า “END”
Line 7: เราปิดขอบเขตการทำงานของ class "Say_Something" ด้วยคำว่า "END"
method
“initialize” นั้น คำว่า initialize แปลว่า เริ่มต้น นั่นหมายถึง method
ชื่อนี้จะถูกเรียกใช้งาน เมื่อเราใช้คำสั่ง .new
ดังที่เราใส่ลงไปในคำสั่ง Call Script ของ event.
ดังนั้นในเมื่อเราเรียกใช้งานสคริปต์ที่ว่า Say_Something.new
นั่นหมายถึงเราบอกให้ RPG Maker XP สร้าง object ใหม่จาก class
Say_Something ด้วยข้อความ “new” โดย ข้อความ “new” นี้จะไป
สั่งให้ method “initialize” ทำงานนั่นเอง
นอก
จากนี้ ลองสังเกตดูจะพบว่า ทุกอย่างที่เรากำหนดไว้ตอนแรกนั้น
ต้องถูกปิดขอบเขตลงด้วยคำสั่ง END
การปิดขอบเขตหรือจบการทำงานนี้เป็นสิ่งที่จำเป็นอย่างมากในหลายๆส่วนของภาษา
รูบี้ ดังนั้นการที่เราย่นย่อหน้าเข้ามา
จะทำให้การตรวจสอบการปิดขอบเขตง่ายขึ้น ดังตัวอย่างด้านล่าง
เรา
จะเห็นว่า ในแต่ละส่วนของโค้ดนั้นจะต้องมีการเปิดและปิดอย่างเป็นระเบียบ
และเมื่อเราย่นย่อหน้าลงแล้ว
การที่เราจะเปิดและปิดโค้ดก็ง่ายขึ้นกว่าเดิมมาก
ในช่วงต้นๆ
เราบอกว่าทุกสิ่งทุกอย่างในภาษารูบี้เป็น object แต่เราเหมือนจะไม่เห็น
object ใดๆเลยระหว่างใช้งาน Say Something
ในความเป็นจริงนั้นเราได้สร้าง object ขึ้นมา แต่
object
ถูกทำลายทันทีที่ใช้งานเสร็จ ลองเขียนโค้ดด้านล่างดูใน Call Script
แล้วเราจะพบว่า มันทำงานเหมือนกับโค้ดที่แล้ว ไม่ได้ต่างกันเลย
CODE |
CODE my_object = Say_Something.new |
โค้ด
นี้ทำงานได้เหมือนกัน แต่ในกรณีนี้ เราสร้างตัวแปรขึ้นมารองรับ object
ดังนั้น my_object จึงกลายเป็น object ที่ผลิตจาก class “Say_Something”
แต่ในกรณีนี้ class ของเราไม่ได้
ทำอะไรนอกจากแสดงตัวอักษร การที่จะสร้างตัวแปรมารองรับเลยออกจะดูไร้ประโยชน์ไปซักหน่อย
เรา
ลองมาปรับแต่ง “Say_Something” ของเราให้มีประโยชน์กันกว่านี้ดีกว่า
ในจุดนี้เราจะมารู้จักกับ “Arguments” กัน
นำโค้ดด้านล่างไปทับของเก่าได้เลย
CODE |
CODE class Say_Something attr_accessor :greeting attr_accessor :name def initialize(greeting, name) @greeting=greeting @name=name end def say print @greeting + " " + @name end end |
จากนั้นไปที่อีเวนท์ของเก่า แล้วแก้ไข Call Script ให้เป็นดังด้านล่างนี้
CODE |
CODE message1=Say_Something.new("Hello", "Alex") message2=Say_Something.new("Hello", "Peter") print message1.name print message2.name message1.say message2.say |
จาก
นั้นเมื่อเราลองคุยกับอีเวนท์นี้ดู จะพบว่ามีหน้าต่างขึ้นมา 4 อัน
แสดงข้อความที่มีค่าต่างๆที่เราใส่ลงไป
หน้าต่างแรกจะแสดงชื่อที่เรากำหนดค่าให้กับ object “message1”
หน้าต่าง
ที่สองจะแสดงชื่อที่เรากำหนดค่าให้กับ object “message2”
ส่วนอีกสองหน้าต่างที่เหลือนั้นเป็นผลมาจากที่เราสั่งให้ object
ทั้งสองทำงานกับคำสั่ง “say” โดยใน class “Say_Something” นั้น
เราก็กำหนดการทำงานของ method ”say” เอาไว้เรียบร้อยแล้ว
นี่แสดงให้
เราเห็นว่า เราสร้าง object ขึ้นมา 2 อัน คือ “message1” และ “message2”
ซึ่งเป็นผลผลิตจาก class “Say_Something”
โดยที่เราสามารถปรับแต่งทั้งสองได้โดยไม่ทำให้อีกอัน
เสียหายแต่อย่างใด
อธิบายโค้ด บรรทัดต่อบรรทัด:
CODE |
CODE 01 class Say_Something 02 03 attr_accessor :greeting 04 attr_accessor :name 05 06 def initialize(greeting, name) 07 @greeting=greeting 08 @name=name 09 end 10 11 def say 12 print @greeting + " " + @name 13 end 14 15 end |
Line 1: เราสร้าง class ขึ้นมาใหม่ ชื่อว่า “Say_Something”
Line
3: เราสร้างตัวแปรประเภท ATTR ย่อมาจาก Attribute.
รูบี้นั้นทรงพลังมากด้วยสิ่งนี้ เพราะเราสามารถใช้คำสั่ง ATTR_ACCESSOR
ในการสร้าง attribute ซึ่งสามารถอ่านและ
เขียนได้ในทุกๆ object ที่ถูกสร้างขึ้นจาก class “Say_Something” โดย ATTR อันแรกของเราชื่อ "greeting".
Line 4: เราสร้าง ATTR ตัวที่สอง ชื่อ "name".
Line
6: เราสร้าง method ใหม่ขึ้นมาชื่อ “initialize” ดังที่กล่าวไว้ข้างตน
initialize จะถูกเรียกใช้งานเป็นmethod แรกสุด เมื่อ object ถูกสร้างขึ้นมา
ดังนั้นเราจึงเพิ่ม “Argument Reciever” หรือ ตัวรับ Argument เข้าไปใน
method นี้ ในกรณีนี้ค่าที่เราจะรับคือ “greeting” และ “name”
โดยค่าที่เราจะรับนี้จะถูกใส่ไว้ในวงเล็บ ข้างๆชื่อของ method
จำไว้ให้ดีว่าชื่อที่เรา
กำหนดในวงเล็บนี้เป็นชื่อประเภท recipients
หรือหมายถึง หากเราจะอ้างอิงถึงตัวแปรตัวนี้
เราต้องใช้ชื่อเหมือนกับที่เขียนไว้ในวงเล็บเท่านั้น ใน method นี้
Line
7: เราสร้างตัวแปรประเภท instance ขึ้นมาใหม่ โดยตัวแปรนี้จะเก็บค่าของ
“greeting” ตัวแปรประเภท instance สามารถสร้างขึ้นได้ด้วยการใช้ @
นำหน้าชื่อตัวแปร และถูกเรียก
ใช้งานจาก method ใดก็ได้ใน class นั้นๆ
ในกรณีนี้ เราให้โปรแกรมรับค่า “greeting” แล้วไปบรรจุใน “@greeting”
เพื่อให้เราสามารถใช้ค่า “@greeting” ได้ใน method อื่นๆ เพราะ
greeting เป็น recipients ใช้ได้แค่ใน method เดียวเท่านั้น
Line 8: ทำเหมือนบรรทัดที่เจ็ด แต่เปลี่ยนเป็นATTR “name”
Line 9: เราปิดขอบเขตการทำงานของ “initialize” ด้วยคำว่า “END”
Line 11: เราสร้าง method ใหม่ชื่อ “say”
Line
12: เราทำการเขียนโค้ดเพื่อกำหนดสิ่งที่เกิดขึ้นเมื่อข้อความ say
ถูกส่งมายัง object ใน class นี้ โดยในกรณีนี้เรากำหนดให้
โปรแกรมพิมพ์ข้อความที่บรรจุในตัวแปร “@greeting”
ตามด้วยเว้นวรรค แล้วตามด้วยข้อความที่บรรจุในตัวแปร “@name”
Line 13: เราปิดขอบเขตการทำงานของ “say” ด้วยคำว่า “END”
Line 15: เราปิดขอบเขตการทำงานของ class "Say_Something" ด้วยคำว่า "END"
อธิบายโค้ดใน Call Script บรรทัดต่อบรรทัด:
CODE |
CODE 1 message1=Say_Something.new("Hello", "Alex") 2 message2=Say_Something.new("Hello", "Peter") 3 4 print message1.name 5 print message2.name 6 7 message1.say 8 message2.say |
Line
1: เราสร้าง object ขึ้นมาชื่อ “message1” ซึ่งเป็นผลผลิตจาก
“Say_Something” นั่นหมายถึง เราสามารถทำอะไรก็ได้ใน object นี้
ที่เรากำหนดไว้ใน class “Say_Something” และ
เราได้เพิ่ม “Argument
Receiver” เข้าไปแล้วใน method “initialize” ดังนั้นการจะสร้าง object
ขึ้นมา เราจำเป็นต้องใส่ค่าต่างๆเหล่านั้นเช่นกัน
หรือไม่งั้นโปรแกรมจะถามหาข้อมูลเหล่านั้นและปิดตัวลง
การป้อนค่าเข้าไปนั้นก็ไม่ต่างจากตอนกำหนดค่าเพียงแค่เราใส่ค่าที่ต้องการลง
ในวงเล็บข้างๆชื่อเท่านั้น
Line 2: เราสร้าง object ขึ้นมาชื่อ “message2” ด้วยวิธีเดียวกับobject ที่แล้ว
Line
4: เราใช้คำสั่ง “print” ของ Ruby ซึ่งเป็นคำสั่งในการแสดงข้อความ
เพื่อแสดงสิ่งที่เราบรรจุไว้ใน object “message1”
จะเห็นได้ว่าการทำสิ่งเหล่านี้ไม่ใช่เรื่องยากเลย เราสามารถควบคุม object
ด้วยการใช้ชื่อที่คุณกำหนดไว้ใน ATTR ใน class ที่สร้างไว้ได้อย่างง่ายดาย
Line 5: ทำเช่นเดียวกับบรรทัดที่แล้วกับ “message2”
Line
7: เราทำการส่งข้อความไปยัง object “message1” ของเรา โดย ข้อความนั้นคือ
“say” เราอาจเรียกว่าข้อความนี้คือคำสั่งก็ได้ ง่ายๆก็คือเราบอกให้
meesage1 ทำการ say แล้ว message1 ก็จะตรวจสอบว่า say ใน class
ของมันคืออะไร ซึ่งก็คือการแสดงข้อความ ดังนั้น message1
จึงแสดงข้อความออกมา ด้วยคำสั่ง say ที่เราสั่งไป
Line 8: ทำเช่นเดียวกับบรรทัดที่แล้วกับ “message2”
7- บทสรุป
ขอบ
คุณคุณ dubealex
ที่อนุญาตให้นำบทความอันมีประโยชน์ยิ่งมาแปลและเผยแพร่ในภาษาไทย
หากผู้ใดสนใจต้นฉบับ สามารถเข้าไปดูได้ใน www.dubealex.com ค่ะ
Credit:Mako
Similar topics
» RGSS & Ruby Lesson - Chapter 2
» Ruby Script Creater เวอร์ชั่น Alfa 1.4 <Relese !!> โปรแกรมเขียนรูบี้สคริปครับ
» Ruby Script Creater เวอร์ชั่น Alfa 1.4 <Relese !!> โปรแกรมเขียนรูบี้สคริปครับ
หน้า 1 จาก 1
Permissions in this forum:
คุณไม่สามารถพิมพ์ตอบ