irpg Community
Ruby สู่การเขียน RGSS Part 1 - มาเริ่มต้นกันเถอะ :) - Printable Version

+- irpg Community (https://irpg.in.th)
+-- Forum: irpg Fabella RPG Maker Academia (https://irpg.in.th/forum-4.html)
+--- Forum: RPG Maker Engine School (https://irpg.in.th/forum-7.html)
+---- Forum: Scripting Academy (https://irpg.in.th/forum-12.html)
+---- Thread: Ruby สู่การเขียน RGSS Part 1 - มาเริ่มต้นกันเถอะ :) (/thread-2447.html)



Ruby สู่การเขียน RGSS Part 1 - มาเริ่มต้นกันเถอะ :) - splendith - 06-13-2015

Ruby สู่การเขียน RGSS Part 1 - มาเริ่มต้นกันเถอะ Smile

สวัสดีครับ เนื่องจากในตอนนี้ได้มีบทความเกี่ยวกับการโม script ไปบ้างแล้ว และเดี๋ยวจะมี Workshop มาลงให้ทุกท่านได้ศึกษากัน แต่เนื่องจากการโม script และการเขียน script จริงนั้น พื้นฐานการเขียน Ruby เป็นสิ่งที่ขาดไม่ได้ ซึ่งหากได้อ่านบทความการโม script ของผมแล้ว จะพบว่าในบทความนั้นเน้นไปในทางการ "เดา" โค้ด ว่าคำสั่งต่างๆ มันน่าจะทำงานยังงั้นยังงี้ ซึ่งถ้าท่านได้เรียนรู้การเขียน Ruby ระดับหนึ่งแล้ว ลองกลับไปแกะ script ใหม่อีกรอบนั้น ท่านจะเริ่มเปลี่ยนจากการ "เดา" เป็นการหา "หลักการ" มากขึ้น การ "ลองผิดลองถูก" จะเปลี่ยนเปนการ "ทำความเข้าใจ" สูงขึ้น และยิ่งเรียนรู้มากขึ้น ก็จะยิ่งเข้าใจโค้ดมากขึ้น ในอนาคตการแกะโค้ดก็ไม่ต่างอะไรกับการแกะถั่วเลยล่ะ หุหุ

สิ่งที่จำเป็นกับการฝึก
เนื่องจากสมาชิกในบอร์ดนี้น่าจะเขียนภาษา Ruby เพื่อใช้ในโปรแกรม RPG Maker XP, VX, VX Ace ดังนั้น เราจะใช้โปรแกรมดังกล่าวในการเรียนภาษา Ruby เลยครับ ใครใช้เวอร์ชันไหนให้เลือกตัวนั้นเลยจ้า

เนื้อหาในบทความนี้
  • บทนำ
  • จำเป็นต้องเป็นโปรแกรมเมอร์มาก่อนหรือไม่
  • ภาษา Ruby คืออะไร และ RGSS คืออะไร
  • เขียน RGSS เวอร์ชันไหนดี
  • การทำงานของ RGSS
  • หน้าจอ Console นั้นขาดไม่ได้!
  • อุ่นเครื่องกับการเริ่มเขียน Ruby Script อย่างง่าย

บทนำ
ในยุคของ RPG Maker ในสมัยเวอร์ชัน 95, 2000, 2003 นั้น การสร้างเกม RPG ขึ้นมาเกมหนึ่งนั้นทำได้ง่ายและสนุก ใช้เวลาฝึกฝนให้เป็นเทพได้ไม่นาน คำว่า "ใครๆ ก็สามารถสร้างเกม RPG ขึ้นมาได้" คือสโลแกนของเวอร์ชั่นที่กล่าวมา ซึ่งแน่นอนว่ามันมีข้อจำกัดต่างๆ มากมาย เพราะการตั้งค่าภายในโปรแกรม, ฐานข้อมูล, และเหตุการณ์ (event) นั้นยังมีขีดจำกัดของมันอยู่ (แต่ในสมัยนั้นคนทั่วไปทำเกมได้นี่ถือว่าอลังการแล้วนะ O_O)

ในเวลาต่อมา ก็ได้ถือกำเนิด RPG Maker XP ขึ้นมา ซึ่งเป็นการปฏิรูปวงการ RPG Maker เลยก็ว่าได้ เพราะว่ามีคุณสมบัติใหม่ที่เพิ่มเติมเข้ามา นั่นคือระบบ script editor โดยใช้ภาษา Ruby เป็นแกนหลัก ทำให้เกม RPG ที่สร้างจาก RPG Maker XP นั้นมีความยืดหยุ่นหลากหลายมาก ไม่ซ้ำซากจำเจ แต่ความยืดหยุ่นย่อมแลกมาด้วยความซับซ้อนของระบบมากยิ่งขึ้น เพราะทันทีที่กด F11 เปิด script editor ขึ้นมา ก็พบกับความงุนงง ว่าแล้วก็อย่าไปแตะต้องมันเลย เดี๋ยวเกมพัง บรึ๋ยยยยยย~~

คำว่า "ใครๆ ก็สามารถสร้างเกม RPG ขึ้นมาได้" นั้น ยังคงใช้ได้อยู่ใน RPG Maker XP แต่ "คนที่เขียน script เป็น" นั้นจะมีผลงานออกมาแตกต่าง เป็นเอกลักษณ์ และเหนือชั้น...

แน่นอนว่าผมเองก็เป็นคนหนึ่งที่กลัวหน้าจอ script editor มาก่อนเหมือนกัน ผมได้ฝึกมาระยะหนึ่ง และในวันนี้ ความกลัวได้หมดลงแล้ว เป็นความสนุก และความสุขที่ได้เขียน ซึ่งแน่นอนว่า เป้าหมายของผมก็จะทำให้ความกลัวของทุกๆ คนหมดไป และมีความสุขกับมันเช่นกัน

เชื่อผมเถอะครับ การฝึกเขียน script มันไม่ได้มีประโยชน์เฉพาะใน RPG Maker เท่านั้น หากคุณมีความฝันที่จะเขียนเกมจริงๆ จังๆ ในอนาคตแล้ว มันเป็นโอกาสที่ดีมาก และสร้างมูลค่ากับตนเองขึ้นไปอีกระดับหนึ่งทีเดียวครับ Big Grin

เกมที่สมบูรณ์แบบ ย่อมไม่พ้นการเขียนโปรแกรม เรียนเถอะครับ มีแต่กำไรกับกำไร ^^

จำเป็นต้องเป็นโปรแกรมเมอร์มาก่อนหรือไม่
ขอตอบว่าไม่จำเป็นครับ ทุกคนเริ่มฝึกฝน ณ จุดนี้ได้ ในบทความนี้จะพยายามสอนพื้นฐานที่จำเป็นในการนำไปเขียน script ครับ ดังนั้นไม่ต้องกังวลว่าท่านไม่เคยเขียนโปรแกรมมาก่อน

แต่ก็ต้องเรียนกันตรงๆ ว่า คนที่เคยเขียนโปรแกรมมาก่อน หรือเรียนด้านนี้โดยเฉพาะ จะได้เปรียบกว่าคนที่ไม่เคยเขียนอย่างมากครับ เพราะมีประสบการณ์ความรู้ด้านตรรกะ และกระบวนการแก้ปัญหามาแล้วนั่นเอง ซึ่งคนที่ไม่เคยเขียนโปรแกรมมาก่อนอาจต้องฝึกฝนในจุดนี้เพิ่มเติมด้วยครับ แต่สิ่งเหล่านี้มันเป็นเรื่องที่ต้องใช้เวลาครับ ดังนั้นไม่ต้องไปซีเรียสมาก

ภาษา Ruby คืออะไร และ RGSS คืออะไร
ภาษา Ruby เป็นภาษาคอมพิวเตอร์ภาษาหนึ่ง สร้างขึ้นโดยคนญี่ปุ่น (รายละเอียดเพิ่มเติม) ซึ่งเป็นภาษาที่มีความสละสลวย อ่านง่าย ผู้พัฒนาตั้งใจให้ทุกคนที่เขียนภาษา Ruby มีความสุข ดังนั้น หากเขียนภาษานี้เป็นแล้ว ท่านจะสนุกกับมันสุดๆ เลยล่ะ ~ ความยากในการเรียนรู้นั้น เทียบกับภาษาอื่นๆ แล้ว ขอบอกว่า ค่อนข้างยากกว่าภาษาอื่นๆ แต่ไม่ต้องห่วง เราจะค่อยๆ ไปพร้อมๆ กันครับ

ส่วน RGSS นั้น ย่อมาจาก Ruby Game Scripting System แปลตรงตัวก็คือ ระบบเขียนเกมด้วย script โดยใช้ภาษา Ruby ซึ่ง RPG Maker เป็นผู้สถาปนาระบบ RGSS ขึ้นมา ซึ่งเจ้า RGSS นั้นเปรียบได้เหมือนโครงสร้างของระบบเกมของ RPG Maker ที่เขียนขึ้นด้วยภาษา Ruby ใช้เป็นตัวกลางควบคุมทุกสิ่งอย่าง ไม่ว่าจะเป็นตัวละคร ไอเท็ม มอนสเตอร์ ฉากต่างๆ การดำเนินเรื่อง เหตุการณ์ ฯลฯ ซึ่งวาดแผนผังออกมาน่าจะมีกระบวนการดังนี้

เขียน RGSS เวอร์ชันไหนดี
คิดว่าทุกๆ ท่านในที่นี้ (และหลายๆ คนบนโลกนี้) น่าจะแบ่งการใช้งาน RPG Maker เป็น 2 ฝั่ง ใหญ่ๆ นั่นคือ RPG Maker XP และ RPG Maker VX Ace (ที่เป็นตัวพัฒนาจาก VX) เพราะมีเอกลักษณ์แตกต่างกันพอสมควร มีข้อดีข้อเสีย จุดเด่น จุดด้อย แตกต่างกันไป ทั้งนี้ขึ้นกับความชอบของแต่ละคน

แต่ถ้าหากพูดในแง่การเขียน script แล้ว ใน RPG Maker XP นั้นใช้ RGSS เวอร์ชั่น 1 และ RPG Maker VX Ace นั้นใช้ RGSS เวอร์ชัน 3

ซึ่งจากประสบการณ์ที่ผมได้เรียนรู้ทั้งสองเวอร์ชั่นนั้น RGSS 3 นั้นได้ปรับปรุงพัฒนาไปตามยุคสมัย ซึ่งดีกว่า RGSS 1 ในทุกๆ ด้าน ทั้งมีรูปแบบโครงสร้างที่อ่านเข้าใจง่ายกว่า มีการจัดว่างแบ่งไฟล์ได้เหมาะสมและเป็นหมวดหมู่กว่า แนวคิดและวิธีการเขียนโปรแกรมนั้นเป็นระบบกว่ามากๆ และที่สำคัญที่สุดคือ ใช้ Ruby เวอร์ชันใหม่กว่าซึ่งมีประสิทธิภาพสูงกว่าพอสมควร (เวอร์ชันห่างกันเกือบ 10 ปีนะเธอว์)

ดังนั้น ในแง่การเขียน script ถ้าให้ผมแนะนำ ผมขอแนะนำให้ท่านเริ่มเขียน RGSS 3 บน RPG Maker VX Ace ไปเลยดีกว่าครับ ได้ผลดีกว่าในระยะยาว แต่ถ้าท่านไม่ชอบเจ้า Ace จริงๆ หรือว่าไม่มีโปรแกรม หรือว่ายึดติด XP ไปแล้ว ก็ไม่มีปัญหาครับ เพราะบทความซีรีส์นี้ของผมนั้นสอนเขียน Ruby เป็นหลักครับ ไม่ได้สอนเขียน RGSS

การทำงานของ RGSS
เคยสังเกตไหมครับ ว่า โฟลเดอร์ชื่อว่า Data ที่อยู่ในโปรเจกต์ มันคืออะไร... (โปรเจกต์ที่ยังไม่ Encrypt นะครับ)

มันคือไฟล์ข้อมูลที่ใช้อ่านตอนอยู่ในเกมนั่นเอง ซึ่งเมื่อเราใช้ RPG Maker แล้วกด Ctrl+S ปุ๊บ ไฟล์เหล่านั้นก็จะทำการอัพเดตใหม่ตามข้อมูลที่เราแก้ในเกมทั้งหมด ซึ่งถ้าลองดูเผินๆ แล้ว มันจะมีไฟล์ที่น่าจะอยู่ใน database (F9) ของเกม ส่วนแผนที่และเหตุการณ์ (event) ทั้งหลายที่เรายัดๆ แก้ๆ นั้น จะถูกเก็บอยู่ในไฟล์ MapXXX.r-data- (r-data- คือ rxdata หรือ rvdata2 ขึ้นกับเวอร์ชัน) ดังนั้น ไม่ว่าเราจะแก้ไขแผนที่ อีเวนต์ หรือฐานข้อมูลเกม ข้อมูลทุกอย่างล้วนยัดอยู่ในโฟลเดอร์ Data

ซึ่งเมื่อเรากดรันเกมปุ๊บ ระบบก็จะทำการดึงข้อมูลต่างๆ ที่อยู่ในโฟลเดอร์ดังกล่าว ไปประมวลผลเป็นเกมที่เราเห็นนั่นเอง ซึ่งการดึงข้อมูลนั้น เป็นหน้าที่ของไฟล์ที่ชื่อว่า Scripts.r-data- ซึ่งเป็นไฟล์ เก็บ script ในหน้าจอ script editor (F11)

กล่าวคือ script เป็นตัวที่ทำให้ข้อมูลทั้งหมดในเกมเกิดขึ้นมา ซึ่งขับเคลื่อนโดย RGSS นั่นเอง
หลักการของการรันก็คือ

เมื่อกดรันเกม -> เกมไปอ่านไฟล์ Scripts.r-data- (RGSS) -> RGSS ทำการควบคุม จัดการเกมโดยอ่านข้อมูลไฟล์อื่นๆ ในโฟลเดอร์ Data และนำมาแสดงผล -> ออกมาเป็นเกมที่เห็น

ทีนี้ผมอยากให้ท่านลองเปิดโปรแกรมแล้วกด F11 เพื่อแสดงหน้าจอ script editor ขึ้นมาครับ ให้สังเกตฝั่งซ้ายที่เป็นรายการ script ต่างๆ ในการอ่านไฟล์ Scripts.r-data- นั้น มันจะไล่อ่านโค้ดทั้งหมดเรียงจากบนลงล่างในทุกๆ ไฟล์เลยครับ ดังนั้นถ้าผมเพิ่มไฟล์ลงไป มันก็จะอ่านไฟล์ที่ผมเพิ่มด้วย ซึ่งเดี๋ยวเราจะมาเพิ่มไฟล์เพื่อฝึกเขียนภาษา Ruby กันครับ แต่ก่อนจะมาเริ่มเขียนนั้น ผมขอให้ทุกท่านอ่านหัวข้อถัดไปก่อน

หน้าจอ Console นั้นขาดไม่ได้!
ถ้าท่านใช้ RPG Maker VX Ace ให้ลองไปที่ Game -> Show Console
[Image: 66untitled.png]

แล้วลองกดรันเกมดู พบว่าจะมีจอดำๆ ประหลาดๆ โผล่มา เราเรียกมันว่าหน้าจอ console

[Image: 6capture.jpg]

จอนี้ใช้ทำการ log ข้อมูลออกมาดู ซึ่งสำคัญมากกกกก หากท่านเขียนสคริปต์ที่ซับซ้อนในภายหลัง แล้วต้องการให้มันแสดงสถานะอะไรบางอย่างออกมา การมีจอนี้ทำให้การ Debug โค้ดนั้นง่ายกว่าเดิมสุดๆ ไม่ว่าจะเป็นการโม script หรือเขียน script ขึ้นใหม่ จอ console จะทำให้การเขียน script ของคุณจะราบรื่นขึ้นมาก เราจะใช้จอ console นี้ตลอดทุกบทความ รวมถึงกระทู้พวก Workshop ต่างๆ ที่อาจมีขึ้นในอนาคตด้วย

สำหรับผู้ที่ใช้ RPG Maker XP, RPG Maker VX เราขอแสดงความเสียใจที่โปรแกรมนั้นไม่มีจอ console แต่โชคดีสุดๆ ที่ในเว็บบอร์ดนอกนั้นมีผู้ใจดีเขียนระบบจอ console ผ่าน script ให้ ซึ่งดาวน์โหลดได้ที่นี่เลยครับ เมื่อดาวน์โหลดมาแล้ว ให้นำไปวางไว้เหนือไฟล์ Main ในหน้าจอ script editor โดยคลิกขวาที่ Main แล้วเลือก Insert จะมีช่องเปล่าขึ้นมา ให้ตั้งชื่อว่า Console แล้วด้านขวาใส่โค้ดในเว็บนั้นลงไป ตามภาพ

[Image: 7capture.jpg]

ทีนี้ก็จะมีจอ console เหมือนกันแล้ว ^^
[Image: 9capture.jpg]

อุ่นเครื่องกับการเริ่มเขียน Ruby Script อย่างง่าย
เอาล่ะครับ กด F11 เปิด script editor แล้วทีนี้ให้ลองสร้างไฟล์ใหม่ขึ้นมา โดยใน RPG Maker VX Ace ให้ไปที่ส่วนของ Material ในฝั่งซ้าย คลิกขวาคำว่า ( Insert here ) เลือก Insert มันจะมีช่องว่างโผล่มา ให้ตั้งชื่อว่า Hello World (จริงๆ ตั้งอะไรก็ได้)

[Image: 9capture.jpg]

ส่วน RPG Maker XP ให้คลิกขวาที่ Main แล้วเลือก Insert จะมีช่องเปล่าขึ้นมา ให้ตั้งชื่อว่า Hello World เหมือนกัน

[Image: 9capture.jpg]

หลังจากที่สร้างไฟล์เสร็จแล้ว ทีนี้ให้เลือกไฟล์ Hello World ของเรา ในหน้าจอฝั่งขวาจะว่างเปล่า เพราะยังไม่ได้เขียนอะไร ให้ลองเขียนโค้ดลงไปดังนี้

[shcode=rails]
puts "Hello World!"
puts "Welcome to RPG Maker Script!"

name = "Splendith"
age = 23
color = "blue"

puts ""
puts "My name is #{name}."
puts "I am #{age} years old."
puts "My favorite color is #{color}."
[/shcode]

จากนั้นลองกดรันเกมดู

แต่นแต๊น... หน้าจอเกมยังเหมือนเดิมไม่มีอะไรเปลี่ยน
แต่ให้ลองสังเกตจอ console ของเรา

มันมีข้อความขึ้นมาใช่ไหมเอ่ย~

[Image: 6capture.jpg]

นี่แหละครับ ประโยชน์ของหน้าจอ console ครับ ซึ่งในบทเรียนภาษา Ruby ที่ผมจะสอนนั้น เราจะไม่ไปยุ่งเกี่ยวกับเกมเลยครับ กด Run ให้เกมขึ้น ปล่อยมันไป แล้วเราสนใจกันแต่จอดำ 555+

ทีนี้เมื่อเห็นผลลัพธ์ที่ออกมาแล้ว อยากให้ลองสังเกตดูครับว่าโค้ดที่เขียนไปนั้นทำงานอย่างไร จึงจะได้ผลลัพธ์ดังกล่าว ซึ่งไม่ยากใช่ไหมครับ

คำสั่ง puts เป็นคำสั่งใช้ในการแสดงข้อความออกทางหน้าจอ console โดยการพิมพ์ข้อความจำเป็นต้องมรเครื่องหมายฟันหนู (") คร่อม ซึ่งคำสั่งนี้จะทำการขึ้นบรรทัดใหม่ให้ด้วย

ในบรรทัดที่ 4-6 เรากำหนด name ให้มีค่า "Splendith" กำหนด age ให้มีค่า 23 และกำหนด color ให้มีค่า "blue" ซึ่งเจ้า name, age, color ในทางการเขียนโปรแกรมเราจะเรียกมันว่า "ตัวแปร" ซึ่งใช้ในการกำหนดค่าไปใช้ในอนาคตได้ครับ และสังเกตว่าถ้าใส่ข้อความ ต้องมีฟันหนู (") คร่อม เช่นเดิม แต่ข้อมูลตัวเลข (23) นั้นไม่จำเป็นต้องมี
บรรทัดที่ 8 ทำการ puts ข้อความเปล่า นั่นก็คือต้องการเว้นช่อง 1 บรรทัดในหน้าจอแสดงผล
ส่วนบรรทัดที่ 9-11 เราได้ทำการแทนค่าในตัวแปรลงไปในข้อความ ด้วยการเขียน #{ } คร่อมตัวแปรของเรา ลงในข้อความ ค่าของตัวแปรก็จะถูกนำไปแสดงในข้อความนั่นเอง

ทีนี้ลองเปลี่ยนข้อมูลในตัวแปรเป็นชื่อ อายุ และสีที่ชอบเป็นข้อมูลตัวท่านดู แล้วลองรันใหม่ สังเกตผลลัพธ์

สรุป
เป็นยังไงกันบ้างครับ พอจะเข้าใจกระบวนการทำงานของ RGSS และรู้สึกสนุกและตื่นเต้นกับการเขียน script หรือเปล่าครับ หากเริ่มสนุกกับมันแล้วล่ะก็ บทความต่อไปเราจะมาเข้มข้น เน้นการเขียน Ruby แบบจะๆ กันครับ ส่วนบทความนี้อาจจะมีการบรรยายมากไปหน่อย ถ้าเบื่อหรือง่วงก็ขออภัยครับ

บทความนี้สรุปไม่ยาวมาก ยังไงก็ขอให้มีความสุขกับการเขียน script นะครับ ^^


RE: Ruby สู่การเขียน RGSS Part 1 - มาเริ่มต้นกันเถอะ :) - Muge9thD - 06-13-2015

อูว ทริกคอนโซลเยี่ยมมากๆเลยฮับ ส่วนตัวใช้แต่ xp ไม่คิดว่า vxace จะซ่อนความสามารถล้ำลึกขนาดนี้ไว้ แถมยังมีสคริป console ของ xp อีก เยี่ยมไปเลย


RE: Ruby สู่การเขียน RGSS Part 1 - มาเริ่มต้นกันเถอะ :) - jin - 06-13-2015

ละเอียดดีมาก ผมไม่รู้ ยังอ่านเข้าใจได้ขอบคุณมากสำหรับบทความดีๆครับ splendith


RE: Ruby สู่การเขียน RGSS Part 1 - มาเริ่มต้นกันเถอะ :) - เนสสึ - 06-13-2015

ว้าว! ในที่สุดก็มีซะที ดีจัย


RE: Ruby สู่การเขียน RGSS Part 1 - มาเริ่มต้นกันเถอะ :) - OngkrubG - 06-13-2015

สุดยอดดดด สั่งคอนโซลได้ด้วย ไม่รู้มาก่อนเลยนะเนี่ย /เฮือก4