3 กันยายน 2562

Ren'Py พื้นฐาน | บทที่ 9 แจกจ่ายเกมที่เสร็จแล้ว

บทนี้เป็นบทสุดท้ายของบทความชุด Ren'Py พื้นฐาน สิ่งสุดท้ายที่จะเรียนคือการแจกจ่ายเกม เกมที่สร้างด้วยโปรแกรม Ren'Py ในบทที่ผ่านมาเป็นเพียงการทดสอบเกมเท่านั้น ต้องใช้โปรแกรม Ren'Py ทุกครั้งที่เปิดเกม เพราะต้องคอมไพล์ (Compile) ไฟล์สคริปต์แทบทุกครั้งไป เมื่อเราสร้างเกมเสร็จแล้วและต้องการเผยแพร่เกม เราต้องทำให้เกมเป็นเวอร์ชันแจกจ่าย ซึ่งเหมาะสำหรับผู้เล่นทั่วไปและไม่ต้องใช้โปรแกรม Ren'Py ในการเล่น


แจกจ่ายเกม

1. เปิดโปรแกรม Ren'Py
2. เลือกโปรเจ็กต์ที่ต้องการแจกจ่ายตรงด้านซ้ายของโปรแกรม แล้วคลิก Build Distributions ดังรูปที่ 9.1
รูปที่ 9.1 การเลือกโปรเจ็กต์ที่ต้องการแจกจ่าย

27 สิงหาคม 2562

Ren'Py พื้นฐาน | บทที่ 8 Animation and Transformation Language (ATL)

จากบทที่แล้วเราได้เรียนการแสดงรูปและวิดีโอเบื้องตันแล้ว ในบทนี้จะมาใส่ลูกเล่นให้รูปมากขึ้นกว่าเดิม การใส่ลูกเล่นขั้นสูงต้องใช้ ATL (Animation and Transformation Language) ATL คือส่วนขยายจากคำสั่งอื่น อยู่ภายในบล็อกของคำสั่งอื่น คำสั่งแม่เพียงอย่างเดียวทำได้แค่ใช้งานพื้นฐานเท่านั้น สิ่งที่ขยายมาใน ATL คือลูกเล่น หรืออธิบายใหม่อย่างง่าย ๆ ว่า ATL ก็คือลูกเล่นนั่นเอง


คำสั่งแม่ของ ATL

ATL เป็นส่วนขยายของคำสั่งอื่น ต้องอยู่ภายในบล็อกของคำสั่งที่ไปขยาย คำสั่งที่ ATL สามารถขยายได้มีดังนี้

Show และ Scene

show และ scene คือคำสั่งพื้นฐานสำหรับการแสดงรูป สองคำสั่งนี้จึงรองรับลูกเล่นของรูปโดยตรง ลูกเล่นจะแสดงเมื่อใช้คำสั่งเหล่านี้ ผู้เขียนแนะนำให้ใส่ ATL ทุกอย่างในคำสั่ง show หรือ scene เนื่องจากเข้าใจและใช้งานง่าย

ตัวอย่างการใส่ ATL ในบล็อก show


Image

image คือคำสั่งสำหรับประกาศตัวแปรรูป เราสามารถใส่ ATL ไปพร้อมกับการประกาศตัวแปรรูปได้ แต่เนื่องจาก image เป็นคำสั่งประมวลผลล่วงหน้า (Preprocessor Directive) ซึ่งจะแซงคิวคำสั่งอื่น ทำให้ลูกเล่น ATL ในบล็อก image จึงแซงคิวคำสั่งอื่นตามไปด้วย

อย่าลืมว่าคำสั่ง image เป็นเพียงคำสั่งประกาศตัวแปรรูป ไม่ใช่คำสั่งแสดงรูป ถ้าต้องการแสดงรูปต้องใช้คำสั่ง show หรือ scene แล้วตามด้วยชื่อตัวแปรรูป

ตัวอย่างการใส่ ATL ในบล็อก image


Transform

transform คือคำสั่งรูปที่เกี่ยวกับตำแหน่งรูป เช่น กำหนดให้รูปอยู่ฝั่งซ้ายของหน้าจอ สามารถใส่ ATL ที่เกี่ยวกับตำแหน่งรูปได้ แต่ผู้เขียนแนะนำให้ใช้คำสั่ง show หรือ scene แทนดีกว่า เนื่องจากสามารถรองรับลูกเล่นตำแหน่งรูปได้เหมือนกัน อีกทั้งยังใช้ง่ายและหลากหลายกว่าคำสั่ง transform ด้วย

tranform เป็นคำสั่งประมวลผลล่วงหน้า (Preprocessor Directive) ซึ่งจะแซงคิวคำสั่งอื่น เหมาะสำหรับลูกเล่นที่ใช้ครั้งเดียว ถ้าไฟล์สคริปต์มีทั้งคำสั่ง image และ transform คำสั่ง transform จะทำงานก่อน เนื่องจากมีลำดับขั้นที่สูงกว่า

ตัวอย่างการใส่ ATL ในบล็อก transform


20 สิงหาคม 2562

Ren'Py พื้นฐาน | บทที่ 7 รูปภาพและวิดีโอ

โปรแกรม Ren'Py รองรับลูกเล่นกราฟฟิกมากมาย ในบทนี้จะเรียนการใส่รูปภาพและวิดีโอเบื้องต้นได้แก่แนวคิดพื้นฐาน การแสดงรูปและการเปิดวิดีโอ ส่วนลูกเล่นเพิ่มเติมต้องใช้ ATL (Animation and Transformation Language) ซึ่งจะเรียนกันในบทต่อไป


Layer: ชั้นของรูป

เลเยอร์ (Layer) คือชั้นที่รวมรูปที่กำลังแสดงอยู่ โปรแกรม Ren'Py มีหลายเลเยอร์เพื่อรองรับการแสดงรูปหลายรูปพร้อมกัน ภายในหนึ่งเลเยอร์สามารถแสดงหลายรูปพร้อมกันได้ เลเยอร์หลักที่ใช้คือเลเยอร์ Master ซึ่งแสดงรูปพื้นหลัง, รูปตัวละคร, และรูปอื่น ๆ ที่นักสร้างเกมใส่มา นอกจากนี้ท่านสามารถสร้างเลเยอร์ใหม่เองได้ แต่จะไม่อธิบายการสร้างเลเยอร์ใหม่ในบทความนี้ เนื่องจากเลเยอร์ Master ก็เพียงพอสำหรับการใช้งานทั่วไปและลูกเล่นต่าง ๆ แล้ว
รูปที่ 7.1 การจัดเรียงเลเยอร์


Tag and Attribute: แท็กและคุณสมบัติ

รูปในโปรแกรม Ren'Py แตกต่างจากเสียงซึ่งสามารถตั้งชื่อไฟล์ได้ตามใจชอบ ชื่อของรูปประกอบด้วย 2 ส่วนได้แก่แท็ก (Tag) และคุณสมบัติ (Attribute) แท็กและคุณสมบัติแบ่งด้วยการเว้นวรรคภายในชื่อไฟล์รูป ส่วนซ้ายสุดคือแท็ก นอกจากนั้นเป็นคุณสมบัติที่ขยายแท็กนั้น (อยู่ทางขวาของแท็ก) จะมีคุณสมบัติเท่าไรก็ได้หรือไม่มีเลยก็ได้
รูปที่ 7.2 การแบ่งแท็กและคุณสมบัติจากชื่อไฟล์

16 สิงหาคม 2562

[Q&A] Parameter และ Argument ต่างกันอย่างไร?

เมื่อศึกษาการเขียนโปรแกรมไปเรื่อย ๆ จะพบกับคำศัพท์ว่าพารามิเตอร์ (Parameter) และอาร์กิวเมนต์ (Argument) หลายคนสงสัยและสับสนว่าสองคำนี้ต่างกันอย่างไร ผู้เขียนจะมาอธิบายในบทความนี้ แต่ก่อนหน้านั้นท่านต้องเข้าใจแนวคิดเรื่องโปรแกรมย่อย (Subprogram)


โปรแกรมย่อย

โปรแกรมย่อยคือชุดของคำสั่งที่แยกออกมาจากส่วนหลักของโปรแกรม (เช่น ส่วนหลักในภาษา C, Java คือฟังก์ชัน main) จุดประสงค์ของการแยกชุดของคำสั่งคือเพื่อเป็นอิสระจากส่วนหลัก ทำให้สามารถแก้ไขง่าย และเรียกใช้งานซ้ำได้หลายครั้ง โดยปกติโปรแกรมหลักจะถูกทำงานเป็นลำดับแรก ส่วนโปรแกรมย่อยจะไม่ถูกทำงานเลย ยกเว้นแต่จะถูกเรียกใช้งานจากโปรแกรมหลักหรือโปรแกรมย่อยอื่นที่กำลังทำงาน โปรแกรมเมอร์มักใช้โปรแกรมย่อยเพื่อสั่งให้ทำงานบางอย่างที่เจาะจง หลายครั้งมีการส่งข้อมูลไปยังโปรแกรมย่อย และรับข้อมูลที่ได้จากโปรแกรมย่อยกลับคืนสู่โปรแกรมที่เรียกใช้

โปรแกรมย่อยแบ่งออกเป็น 2 แบบได้แก่ โปรแกรมย่อยที่ส่งค่าคืน (Return) จากโปรแกรมย่อยนั้นกลับมายังโปรแกรมที่เรียกใช้ มักถูกเรียกว่าฟังก์ชัน (Function) และโปรแกรมย่อยที่ไม่ส่งค่าคืนกลับมา มีหลายชื่อแล้วแต่ภาษา เช่น Procedure, Sub (ในภาษา C, Java จะมองโปรแกรมย่อยที่ไม่ส่งค่ากลับเป็นฟังก์ชันแบบ void) แต่ค่าในอธิบายที่กล่าวมานี้ยังไม่ใช่พารามิเตอร์และอาร์กิวเมนต์ เนื่องจากค่าที่กล่าวมาเป็นค่าที่ส่งหลังจากโปรแกรมย่อยทำงานเสร็จแล้ว


พารามิเตอร์ V.S. อาร์กิวเมนต์

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


ฟังดูเหมือนจะเป็นอย่างเดียวกัน แต่สองคำนี้ไม่ใช่อย่างเดียวกัน!? มันแค่มีข้อมูลเหมือนกันที่ไม่ใช่ค่าเดียวกัน!?!? พารามิเตอร์และอาร์กิวเมนต์ต่างกันที่มุมมองว่ามองจากมุมไหน ถ้ามองในมุมโปรแกรมย่อยจะเรียกว่าพารามิเตอร์ แต่ถ้ามองในมุมโปรแกรมที่เรียกใช้จะเรียกว่าอาร์กิวเมนต์ เปรียบเทียบเหมือนกับการส่งออกสินค้าไปยังต่างประเทศ ถ้ามองในมุมประเทศนำเข้ามันคือสินค้านำเข้า ถ้ามองในมุมประเทศส่งออกมันคือสินค้าส่งออก ทั้งที่สินค้าสองตัวนี้คือสินค้าตัวเดียวกัน

อย่าเรียกพารามิเตอร์และอาร์กิวเมนต์สลับกัน เพราะสองคำนี้ถูกเรียกจากมุมมองที่ต่างกัน โปรแกรมย่อยเป็นอิสระจากโปรแกรมที่เรียกใช้ โปรแกรมย่อยจะเป็นผู้กำหนดว่าค่าใดตัวแปรชนิดใดควรนำเข้ามา โปรแกรมที่เรียกใช้ต้องส่งอาร์กิวเมนต์ให้ถูกต้องตามที่โปรแกรมย่อยกำหนดเท่านั้น นอกจากนี้ยังมีคุณสมบัติหลายอย่าง เช่น การตั้งชื่อโปรแกรมย่อยซ้ำกันแต่มีพารามิเตอร์ต่างกัน (Overloading) หรือการตั้งค่าเริ่มต้น (Default) สำหรับพารามิเตอร์ที่ไม่ได้รับอาร์กิวเมนต์, รวมทั้งค่าของพารามิเตอร์และค่าของอาร์กิวเมนต์ถูกเก็บแยกกันเป็นตัวแปรคนละตัว เพียงแค่เป็นตัวแปรคนละตัวที่มีค่าเหมือนกัน (ยกเว้นว่าเป็นพารามิเตอร์แบบ Reference จากอาร์กิวเมนต์)
จำง่าย ๆ ว่า “ส่งออกอาร์กิวเมนต์ นำเข้าพารามิเตอร์”

13 สิงหาคม 2562

Ren'Py พื้นฐาน | บทที่ 6 เสียงประกอบเกม

5 บทก่อนหน้าเราได้เรียนการสร้างเกมแนว Visual Novel ด้วยโปรแกรม Ren'Py ได้เรียนพื้นฐานมาครบถ้วนแล้ว? ใช่ เกมที่สร้างในบทก่อนหน้าก็ดูดีแล้ว แต่รู้สึกว่าขาดอะไรไปบางอย่างหรือเปล่า? เรายังไม่ได้ใส่เสียงในเกมเลย บทนี้จะมาเรียนกันเรื่องการใส่เสียงกัน

ประเภทเสียง

ไฟล์เสียงต้องอยู่ในโฟลเดอร์โปรเจ็กต์เกม (ชื่อโปรเจ็กต์\game) ไฟล์เสียงที่โปรแกรม Ren'Py รองรับได้แก่
  • Opus (.opus)
  • Ogg Vorbis (.ogg)
  • MP3 (.mp3)
  • WAV(.wav)

เสียงในโปรแกรม Ren'Py แบ่งเป็น 3 ประเภทได้แก่ Music, Sound, และ Voice เสียงทั้ง 3 ประเภทแบ่งตามการวนซ้ำและการเริ่มต้นดังตารางข้างล่าง ไม่จำเป็นต้องเป็นเสียงตามประเภทจริง ๆ ก็ได้ เช่น ถ้าต้องการเปิดเพลงครั้งเดียวจบ ไม่วนซ้ำ สามารถเปิดเพลงนั้นด้วยคำสั่งเปิดเสียงเอฟเฟกต์ได้ โปรแกรม Ren'Py สามารถเปิดหลายเสียงพร้อมกันได้ แต่ต้องไม่ใช่เสียงประเภทเดียวกัน (เปิดได้ประเภทละ 1 เสียง รวมเป็นเปิดได้พร้อมกัน 3 เสียง)

ความแตกต่างของประเภทเสียง
ประเภทเสียงวนซ้ำเริ่มต้นระยะเวลาเปิดเสียง
Music (เสียงเพลง)เริ่มทันทีไม่สิ้นสุด
จนกว่าจะมีคำสั่งหยุดหรือเปลี่ยนเสียง
Sound (เสียงประกอบ)เริ่มทันทีเปิดจนจบครั้งเดียว
Voice (เสียงพูด)เริ่มพร้อมกล่องข้อความต่อไปเปิดจนจบครั้งเดียว
หรือเปิดจนกว่าเปลี่ยนกล่องข้อความ (ถ้ายังไม่จบ)

นอกจากนี้โปรแกรม Ren'Py ยังมีเสียงประเภทพิเศษคือ Audio จุดเด่นของเสียงประเภทนี้คือสามารถเปิดหลายเสียงพร้อมกันได้ แม้ว่ากำลังเปิดเสียง Audio อื่นอยู่ก็ตาม แต่ Audio ค่อนข้างมีข้อจำกัดมากกว่าเสียง 3 ประเภทข้างต้น เช่น ไม่สามารถต่อคิวเสียงได้ ไม่สามารถหยุดเสียงได้ ถ้าไม่จำเป็นจริง ๆ ผู้เขียนไม่แนะนำให้ใช้เสียง Audio

6 สิงหาคม 2562

Ren'Py พื้นฐาน | บทที่ 5 ตัวเลือกและทิศทางของเกม

อะไรนะ! มีเกมแนว Visual Novel ที่ไหนไม่มีตัวเลือกให้ผู้เล่นบ้าง? ก็เกมแนว Visual Novel ที่สร้างกันในบทที่แล้วน่ะสิ สำหรับผู้อ่านที่ยังไม่ได้อ่านบทความชุด "Ren'Py พื้นฐาน" ตั้งแต่บทที่ 1 ถึงบทที่ 4 ผู้เขียนแนะนำให้ท่านย้อนกลับไปก่อนอ่านบทนี้ ในบทนี้ท่านจะได้เรียนเรื่องทิศทางการทำงานของเกมด้วยวิธีต่าง ๆ ได้แก่ การข้ามการทำงาน, การตรวจเงื่อนไข, การทำงานซ้ำ, และปิดท้ายบทนี้ด้วยการสร้างตัวเลือกให้เกมแนว Visual Novel ที่ผู้เล่นคุ้นเคยกัน


Block: เว้นวรรคหน้าคำสั่ง

ก่อนเรียนเรื่องใหม่ผู้เขียนต้องอธิบายเรื่องบล็อก (Block) ให้ท่านเข้าใจก่อน จะได้ไม่ต้องมาอธิบายเรื่องนี้ซ้ำบ่อย ๆ บล็อกคือกลุ่มของคำสั่งที่อยู่ในระดับเดียวกัน ผู้อ่านที่เคยเขียนโปรแกรมด้วยภาษา C หรือ Java คงจะคุ้นเคยกับเครื่องหมาย { } ที่ครอบคำสั่งหลายตัว นั่นคือการบอกว่าคำสั่งเหล่านี้อยู่ในบล็อกเดียวกันหรือระดับเดียวกัน (เช่น กลุ่มคำสั่งที่ต่อจาก if-else, while, function)
บล็อกคืออะไร? บล็อกคือกลุ่มคำสั่งที่จะทำงานเมื่ออยู่ในเงื่อนไขที่กำหนดเท่านั้น คำสั่งที่อยู่ในบล็อกเดียวกันจะมีระดับเดียวกัน เรื่องนี้อธิบายให้มือใหม่เข้าใจยาก เอาเป็นว่าบล็อกคืออะไรช่างมันก่อน เรียนวิธีใช้บล็อกกันไปก่อน แล้วค่อยทำความรู้จักบล็อกกันในหัวข้อที่ต้องใช้บล็อกกันอีกที

ในภาษา Ren'Py ไม่ได้ใช้เครื่องหมาย { } ในการแบ่งบล็อก แต่จะใช้การเว้นวรรคหน้าคำสั่งเพื่อแบ่งบล็อก (ห้ามใช้ tab แทนการเว้นวรรค อ่านรายละเอียดใน "ข้อระวังท้ายบท" ใน Ren'Py พื้นฐาน | บทที่ 3 กล่องข้อความ) คำสั่งที่อยู่ในบล็อกเดียวกันต้องเว้นวรรคหน้าคำสั่งเท่ากัน การเว้นวรรคหน้าคำสั่งจะเว้นวรรคกี่ครั้งก็ได้ สำหรับบล็อกย่อยที่อยู่ภายในบล็อกใหญ่แล้ว บล็อกย่อยนั้นต้องมีจำนวนเว้นวรรคมากกว่าบล็อกใหญ่ ตัวอย่างเช่น


จากตัวอย่างข้างบนสังเกตว่าคำสั่งในบล็อกที่ 1 ไม่ได้เว้นวรรคหน้าคำสั่ง (หน้าบรรทัด) ถือว่าเป็นบล็อกที่ใหญ่ที่สุด บล็อกที่ 2 เป็นบล็อกย่อยที่อยู่ในบล็อกที่ 1 มีการเว้นวรรคหน้าบล็อกที่ 2 พอควร ต่อมาคือบล็อกที่ 3 เป็นบล็อกย่อยที่อยู่ในบล็อกที่ 2 อีกที สังเกตจากคำสั่งของบล็อกที่ 3 อยู่ต่อจากบล็อกที่ 2 และมีการเว้นวรรคมากกว่าบล็อกที่ 2

ถ้ามีหลายบล็อกแล้วคำสั่งที่อยู่ในบล็อกที่ใหญ่ที่สุดจะทำงานเป็นลำดับแรก (ในตัวอย่างคือบล็อกที่ 1) ทำงานจากบรรทัดบนไปยังบรรทัดล่าง ส่วนบล็อกย่อยจะทำงานเมื่อตรงตามเงื่อนไขเท่านั้น เช่น ถ้าไม่ตรงเงื่อนไขของบล็อกที่ 2 เกมจะข้ามบล็อกที่ 2 ทั้งหมด รวมทั้งบล็อกที่ 3 ซึ่งอยู่ในบล็อกที่ 2 อีกทีด้วย หมายความว่าเกมจะทำงานแค่สองบรรทัดแรกและบรรทัดสุดท้ายเท่านั้น เพราะสามบรรทัดนี้อยู่ในบล็อกที่ 1 ส่วนบรรทัดอื่นเกมจะมองเหมือนว่าไม่มีตัวตนอยู่

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

Pass

ในกรณีที่ภาษา Ren'Py บังคับให้ใส่บล็อกย่อย แต่เราไม่มีคำสั่งที่ต้องการใส่ในบล็อกย่อยนั้น ภาษา Ren'Py ไม่อนุญาตให้ปล่อยเป็นบล็อกเปล่าได้ วิธีแก้คือใส่คำสั่ง pass ในบล็อกย่อยนั้น คำสั่ง pass เป็นคำสั่งที่ไม่ทำอะไรเลย ทำหน้าที่เป็น Pseudo Statement หลอกว่าในบล็อกย่อยมีคำสั่งแล้วทั้งที่จริงไม่มีคำสั่ง ตัวอย่างการใช้คำสั่ง pass คู่กับคำสั่ง if-else เช่น


Label & Jump: กำหนดเพื่อข้าม

Label

label คือคำสั่งที่ตั้งชื่อเฉพาะให้แก่บรรทัดนั้น (ตั้งชื่อให้บรรทัดตัวเอง) คำสั่งที่ตามหลัง label จะเขียนเป็นบล็อกใหม่หรือบล็อกเดิมก็ได้ ไม่แตกต่างกัน รูปแบบของคำสั่ง label คือ


เช่น label check: หมายถึงตั้งชื่อ check ให้แก่บรรทัดนั้น (บรรทัด label check) คำสั่ง label ไม่มีประโยชน์เมื่อใช้งานเดี่ยว ๆ เพราะไม่มีความจำเป็นที่ต้องตั้งชื่อให้แก่คำสั่งที่ตั้งชื่อให้ตัวเอง เปลืองบรรทัดเปล่า ๆ คำสั่ง label จะใช้คู่กับคำสั่ง jump

start คือชื่อเฉพาะที่โปรแกรม Ren'Py สงวนไว้ เกมจะเริ่มต้นทำงานที่ label start: เป็นลำดับแรกเสมอ (เปรียบเหมือนฟังก์ชัน main ในภาษา C) ดังนั้นคำสั่งทุกอย่างในเกมต้องอยู่ต่อจากบรรทัด label start: เสมอ เพื่อให้คำสั่งเหล่านั้นสามารถทำงานในเกมได้
รูปที่ 5.1 การทำงานของคำสั่ง label และ jump

2 สิงหาคม 2562

เริ่มต้นสร้างเกม เข้าใจง่าย เรียนจบภายในบทเดียว

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



ปรับความเข้าใจ

สร้างเกมไม่ต้องเขียนโปรแกรมก็ได้

มีโปรแกรมมากมายที่สร้างเกมได้ง่ายดาย เพียงแค่คลิกและลากนิดหน่อย ไม่ต้องเขียนโปรแกรมเลยก็ได้ โปรแกรมที่ใช้สร้างเกมเรียกว่า เกมเอนจิน (Game Engine) เกมเอนจินทำให้การสร้างเกมของคุณง่ายขึ้น เพราะไม่ต้องเขียนโปรแกรมเองทั้งหมด แน่นอนว่าคุณสามารถสร้างเกมโดยการเขียนโปรแกรมล้วน ๆ ไม่ต้องพึ่งเกมเอนจินเลยก็ได้


เกมไม่ได้มีแค่ประเภทเดียว อย่ามองแค่เกมเทพ ๆ

นักสร้างเกมมือใหม่หลายคนคิดไปว่าการสร้างเกมเป็นเรื่องยาก เนื่องจากคิดว่าเกมมีแค่ประเภทเดียว โลกนี้ไม่ได้มีแค่เกมเดินยิง (FPS, TPS) หรือเกม RPG เท่านั้น ถ้ามองแบนั้นแล้วคิดว่าสร้างเกมยากก็ไม่แปลกเลย เพราะมัวแต่มองเกมหรู ๆ ดัง ๆ ลองมองโลกให้กว้างขึ้น เกมมีตั้งหลายประเภท เช่น FPS, TPS, RPG, ต่อสู้, ผจญภัย, ตะลุยด่าน, จำลองชีวิต, กีฬา, วางแผนการรบ, ฯลฯ แม้แต่ XO (Tic-Tac-Toe) และเป่ายิงฉุบก็เป็นเกมได้นะ! สร้างได้ไม่ยากด้วย!


ใช้โปรแกรมอะไรไม่สำคัญ สิ่งสำคัญคือสร้างเกมให้ทำงานได้อย่างไร

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



เริ่มต้นสร้างเกม Step-by-Step

Step 1: กำหนดหัวข้อ

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

ตัวอย่างการกำหนดหัวข้อ
ชื่อเกม : Daf's Adventure Free!
ประเภท : เกมสวมบทบาท (RPG), ไขปริศนา
จำนวนผู้เล่น : 1 คน
เวลาที่ใช้เล่น : 30 - 60 นาที
ไอเดียที่คิด : พรุ่งนี้เป็นวันเกิดน้องสาว พี่ชายต้องการหาของขวัญให้น้องสาว แต่วันนี้ดันเป็นวัน April Fool's Day เสียนี่!

เกมในตัวอย่างนี้มีอยู่จริงนะ! เราแจกเกมนี้ฟรี! ไม่ล็อกเกมด้วย! เปิดให้คุณได้ศึกษาการสร้างเกมนี้เต็ม ๆ ดาวน์โหลดเล่นฟรีได้ที่ [RMVXA] Daf's Adventure Free! : สุขสันต์วัน April Fool's Day 2018


Step 2: ออกแบบเกม

เมื่อมีหัวข้อเกมแล้ว ต่อไปคือการออกแบบเกม (Game Design) การออกแบบเกมคือการกำหนดโครงเรื่อง เลือกว่าใช้โปรแกรมอะไรในการสร้าง จุดเด่นของเกมคืออะไร แต่งเนื้อเรื่องเกมให้เสร็จสมบูรณ์ กำหนดรายละเอียดเกม รายละเอียดทั้งหมดของเกมต้องเสร็จภายในขั้นตอนนี้

บทความน่าสนใจ
แนะนำโปรแกรมสร้างเกม (เกมเอนจิน)


Step 3: เขียนอัลกอริทึม

นำเนื้อเรื่องของเกมมาเขียนเป็นขั้นตอนจากต้นไปจบ ถ้าเป็นเกมที่ไม่มีเนื้อเรื่อง ให้เขียนขั้นตอนการทำงานของเกม เช่น เกมเริ่มต้นจากอะไร, ลำดับต่อไปคืออะไร, คลิกปุ่มนี้แล้วเกิดอะไรขึ้น อัลกอริทึมเป็นสิ่งสำคัญที่ต้องเขียนก่อนลงมือสร้างเกม เราจะใช้อัลกอริทึมในการสร้างเกมต่อไป ลองเขียนอัลกอริทึมในกระดาษดูสิ!

บทความน่าสนใจ
สอนออกแบบอัลกอริทึม, Flowchart, และ Pseudo Code
แบบฝึกหัดอัลกอริทึม + เฉลย | ฝึกทำเยอะ ๆ จะได้เก่ง

ตัวอย่างอัลกอริทึมของเกม Tic-Tac-Toe

เกมในตัวอย่างนี้มีอยู่จริงนะ! เราสอนสร้างเกมและแจก Source Code ของเกมนี้ในบทความ [Source Code] สร้างเกม XO หรือ Tic-Tac-Toe | ไม่มี AI (★ ระดับง่าย)


Step 4: ลงมือสร้างเกมในโปรแกรม

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


Step 5: ทดสอบและแก้ไขเกม

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



คุณต้องการอะไรอีก?

บทความนี้สอนสร้างเกมแบบเข้าใจง่าย บทเดียวจบ ก็สอนวิธีสร้างเกมไปแล้วข้างบน 5 Steps คุณยังต้องการอะไรอีก?

การสร้างเกมมีประมาณนี้ล่ะ อาจมีการวางแผนการสร้างเกมในกรณีที่เกมมีขนาดใหญ่หรือมีคนสร้างเกมหลายคน อาจมีเรื่องการจ้าง outsource ช่วยสร้างเกม มีการเผยแพร่และโฆษณาเกม แต่นั่นไม่ใช่สิ่งจำเป็นสำหรับทุกเกม


ทำไมไม่สอนใช้โปรแกรมสร้างเกม?

บทความนี้เขียนมาเพื่อสอนสร้างเกม ไม่ใช่สอนใช้โปรแกรม ไม่ใช่รีวิวโปรแกรมสร้างเกม การสร้างเกมกับโปรแกรมสร้างเกมเป็นคนละเรื่องกัน โปรแกรมสร้างเกมเป็นเพียงเครื่องมือในการช่วยสร้างเกมเท่านั้น และไม่จำเป็นต้องใช้โปรแกรมสร้างเกมใด ๆ ในการสร้างเกมเลยก็ได้ (เขียนโปรแกรมล้วน ๆ) คุณต้องศึกษาวิธีใช้โปรแกรมสร้างเกมเพิ่มเติมเอง

บทความน่าสนใจ
RPG Maker MV โปรแกรมสร้างเกมยอดนิยม
สร้างเกม Visual Novel ด้วยโปรแกรม Ren'Py


ลงลึกกว่านี้หน่อยได้ไหม?

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

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


เรียนเพิ่มเติมได้จากที่ไหน?

มีหนังสือเยอะแยะที่สอนสร้างเกม บางเล่มเป็นหนังสือภาษาอังกฤษ ใช้อินเทอร์เน็ตให้เป็นประโยชน์ สมัยนี้เว็บภาษาไทยมีสอนสร้างเกมเยอะไป ถ้าอยากไปให้สุดในการสร้างเกมก็ควรเขียนโปรแกรมเป็นบ้าง

ในบล็อกนี้ Planila Game Developer สอนสร้างเกมตั้งแต่มือใหม่จนถึงขั้นสูง มีบทความสอนสร้างเกมมากมายในบล็อกนี้ มีทั้งสอนสร้างเกมจริง ๆ, สอนอัลกอริทึม, สอนใช้โปรแกรมสร้างเกม, แจก source code ของเกมพร้อมอธิบายการสร้าง, แจกเกมฟรี, และวิธีแก้ปัญหาต่าง ๆ ในการสร้างเกม นอกจากนี้เรายังมีเพจ Facebook ชื่อเพจว่า Planila Game Developer กด Like และกดติดตามเพจของเรา เพื่อรับข่าวใหม่จากเราได้ก่อนใคร นอกจากนี้ยังสามารถพูดคุยและขอความช่วยเหลือจากเราได้ที่เพจ


สรุปการสร้างเกม

ขั้นตอนการสร้างเกมมี 5 ขั้นตอนได้แก่ กำหนดหัวข้อ, ออกแบบเกม, เขียนอัลกอริทึม, ลงมือสร้างเกมในโปรแกรม, และทดสอบและแก้ไขเกม การสร้างเกมไม่จำเป็นต้องเขียนโปรแกรม จะเลือกใช้โปรแกรมอะไรไม่สำคัญ สิ่งสำคัญคือไอเดียและอัลกอริทึม เขียนขั้นตอนการทำงานของเกม แบ่งเป็นข้อ ๆ จากต้นไปจบ การสร้างเกมกับโปรแกรมสร้างเกมเป็นคนละเรื่องกัน อย่านำมาปนกัน ถ้าสนใจสายสร้างเกมจริง ๆ ทักษะการเขียนโปรแกรมเป็นสิ่งสำคัญที่ช่วยได้มาก

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


ปุ่มแชร์บทความอยู่ตรงนี้แล้ว กดเลย!


คลิกที่รูปภาพเพื่อเปิดเพจของเรา

30 กรกฎาคม 2562

Ren'Py พื้นฐาน | บทที่ 4 ตัวแปรและตัวดำเนินการ

บทนี้จะเป็นเนื้อหาเกี่ยวกับการเขียนโปรแกรม ผู้อ่านที่ไม่เคยเขียนโปรแกรมมาก่อนไม่ต้องกังวลไป โปรแกรม Ren'Py ใช้รูปแบบเดียวกับภาษา Python ซึ่งเข้าใจง่ายกว่าภาษาคอมพิวเตอร์หลายตัว (เช่น C, Java) จุดประสงค์ของบทนี้คือเพื่อให้ผู้อ่านใช้งานตัวแปรเบื้องต้นได้ ไม่ได้สอนภาษา Python เต็มตัว ผู้เขียนละเนื้อหาเชิงเทคนิคที่ซับซ้อนไว้ เพื่อให้นักสร้างเกมที่ไม่เคยเขียนโปรแกรมสามารถเข้าใจได้ง่าย ๆ สำหรับผู้อ่านที่ต้องการเขียนโปรแกรมเต็มตัวให้ศึกษาภาษา Python จากตำราสอนเขียนโปรแกรม

คำสั่งของโปรแกรม Ren'Py ไม่มีตัวแปรใด ๆ เลย นั่นหมายความว่าเราไม่สามารถเก็บข้อมูลลงหน่วยความจำได้ แต่เกมแนว Visual Novel หลายเกมจำเป็นต้องเก็บข้อมูล เช่น เก็บค่าความรักของนางเอก, หรือเก็บตัวเลือกที่ผู้เล่นเคยเลือก เพื่อนำไปสู่ฉากจบที่แตกต่างกัน กรณีที่ต้องใช้ตัวแปรหรือเก็บข้อมูลแบบนี้ ถึงคราวที่ต้องใช้ภาษา Python แล้วล่ะ!

เนื้อหาในบทนี้จะเป็นเนื้อหาทฤษฎี เราจะนำเนื้อหาในบทนี้ไปต่อยอด และลงมือปฏิบัติจริงกันในบทต่อไป


ประเภทของตัวแปร

ตัวแปร (Variable) คือสิ่งที่เก็บข้อมูล เมื่อเกมหรือโปรแกรมทำงานบางครั้งมีข้อมูลที่ต้องใช้งานต่อในอนาคต เราต้องเก็บข้อมูลนั้นไว้ สิ่งที่เก็บข้อมูลก็คือตัวแปร เมื่อถึงเวลาที่ต้องการก็เรียกใช้ข้อมูลจากตัวแปรนั้น
(เชิงเทคนิค : ในทางทฤษฎีตัวแปรเป็นเพียงสิ่งที่สมมติขึ้น เพื่อใช้อ้างอิงตำแหน่งที่เก็บข้อมูลในหน่วยความจำ ตัวแปรไม่ได้เก็บข้อมูลจริง ๆ แต่ตามตำรามักสอนว่าตัวแปรเก็บข้อมูล เพื่อให้คนที่เพิ่งเรียนเขียนโปรแกรมเข้าใจง่าย)

ตัวแปรที่ควรทราบในภาษา Python มี 2 ประเภทได้แก่
  • ตัวแปรตัวเลข (Number) เก็บข้อมูลที่เป็นจำนวนเต็ม (Integer) หรือทศนิยม (Floating-Point) เช่น 0, -5, 91, -12.67
  • ตัวแปรข้อความ (String) เก็บข้อมูลที่เป็นตัวอักษรหรือข้อความ เช่น "A", "Planila Game Developer", 'Visual Novel'

ภาษา Python แตกต่างจากหลายภาษา (เช่น C, Java) ตรงที่ตัวแปรจะถูกประกาศทันทีที่ใช้งาน ไม่ต้องประกาศตัวแปรล่วงหน้า และไม่ต้องระบุประเภทของตัวแปร วิธีใช้ตัวแปรเพียงแค่ใส่ชื่อของตัวแปร (Identifier) และกำหนดค่าให้ตัวแปร ถ้าตัวแปรนั้นไม่เคยมีมาก่อนจะถือว่าเป็นการประกาศตัวแปรโดยอัตโนมัติ และโปรแกรมจะเลือกประเภทของตัวแปรให้โดยอัตโนมัติ ตัวอย่างเช่น


ตัวแปรตัวเลขแบ่งย่อยเป็นตัวแปรจำนวนเต็ม (Integer) และตัวแปรทศนิยม (Floating-Point) ความแตกต่างคือการเก็บค่าทศนิยม เช่น x = 1 เป็นตัวแปรจำนวนเต็ม, แต่ y = 1.0 เป็นตัวแปรทศนิยม (สังเกตจากการใส่จุดทศนิยม ไม่สนใจว่าเลขหลังทศนิยมคือเลขอะไร)

ข้อความหรือตัวอักษรที่ใส่ในตัวแปรข้อความต้องอยู่ในเครื่องหมาย ' ' หรือ " " เช่น name = 'Planila' หรือ name = "Planila" ก็มีค่าเหมือนกัน ภาษา Python ไม่มีตัวแปรตัวอักษร (Character) โดยเฉพาะเหมือนภาษา C ดังนั้นตัวแปรที่เก็บตัวอักษรเพียงตัวเดียวจะถูกจัดอยู่ในตัวแปรข้อความ

Boolean คือส่วนหนึ่งของ Integer

ภาษา Python ไม่มีตัวแปรตรรกศาสตร์ (Boolean) โดยเฉพาะเหมือนภาษา C หรือ Java แต่สามารถเก็บค่าทางตรรกศาสตร์ลงในตัวแปรจำนวนเต็มได้ (Boolean เป็นส่วนหนึ่งของ Integer) ผลลัพธ์ทางตรรกศาสตร์ในภาษา Python ได้แก่ 0 (และ 0.0) คือเท็จ (False) และนอกจากนั้นคือจริง (True) แต่โดยทั่วไปมักกำหนดให้จริงเท่ากับ 1 การกำหนดค่าตรรกศาสตร์ต้องใส่เป็นตัวเลขเท่านั้น เช่น love = 1 ไม่สามารถใส่เป็น True หรือ False ได้

นอกจากนี้ภาษา Python ยังมีตัวแปรประเภทอื่น เช่น Lists, Tuple, Set ตัวแปรเหล่านี้สามารถใช้ในโปรแกรม Ren'Py ได้ แต่ผู้เขียนจะไม่สอนในบทความนี้ เนื่องจากเป็นเนื้อหาที่ลึกและไม่จำเป็นสำหรับนักสร้างเกมมือใหม่

23 กรกฎาคม 2562

Ren'Py พื้นฐาน | บทที่ 3 กล่องข้อความ

กล่องข้อความคือส่วนสำคัญในเกมแนว Visual Novel เนื่องจากเป็นส่วนที่แสดงคำพูดของตัวละคร โปรแกรมเกมเอนจิน Ren'Py มีลูกเล่นเกี่ยวกับกล่องข้อความมากมาย นักสร้างเกมสามารถสร้างกล่องข้อความสวย ๆ ได้อย่างง่ายดาย สำหรับผู้อ่านที่ต้องการใช้ภาษาไทยในโปรแกรม Ren'Py ให้ท่านเปลี่ยนฟอนต์ก่อนทดสอบเกม อ่านเพิ่มเติมได้ในหัวข้อ "เปลี่ยนฟอนต์ ขนาด และสีตัวอักษร (ทั้งเกม)"
กล่องข้อความในเกมที่สร้างด้วยโปรแกรม Ren'Py แบ่งเป็น 3 ส่วนดังรูปที่ 3.1 ได้แก่
  • ส่วนที่ 1 ชื่อตัวละคร
  • ส่วนที่ 2 ข้อความหรือคำพูดตัวละคร
  • ส่วนที่ 3 พื้นหลังกล่องข้อความ
รูปที่ 3.1 กล่องข้อความในเกมที่สร้างด้วยโปรแกรม Ren'Py

คำสั่งที่แสดงข้อความในกล่องข้อความมี 2 รูปแบบ รูปแบบแรกมีสองส่วนคือส่วนชื่อตัวละครและส่วนคำพูดตัวละคร แต่ละส่วนอยู่ภายในเครื่องหมาย " " รูปแบบนี้เหมาะสำหรับคำพูดทั่วไป

รูปแบบที่สองมีเพียงส่วนเดียวคือส่วนคำพูดตัวละครที่อยู่ในเครื่องหมาย " " คำสั่งรูปแบบนี้จะแสดงเฉพาะคำพูดตัวละคร ไม่แสดงชื่อตัวละคร รูปแบบนี้เหมาะสำหรับประโยคที่ตัวละครคิดในใจ หรือข้อความแจ้งเตือนจากเกม


ตัวอย่างคำสั่งที่ใช้แสดงข้อความในรูปที่ 3.1 คือ



ประกาศตัวแปรเก็บชื่อตัวละคร

ก่อนเรียนเรื่องการใช้กล่องข้อความต่อ ผู้เขียนมีเทคนิคการใส่คำสั่งให้สั้นลง เกมแนว Visual Novel ต้องแสดงข้อความหรือคำพูดจำนวนมาก จึงต้องแสดงชื่อตัวละครเดิมซ้ำกันหลายครั้ง โปรแกรม Ren'Py มีเทคนิคที่จัดการกับชื่อตัวละคร แทนที่จะใส่ชื่อตัวละครเดิมซ้ำกันทุกครั้ง เราสามารถประกาศตัวแปรและใส่ชื่อตัวละครลงในตัวแปรแทนได้ในรูปแบบดังนี้

ตัวอย่างเช่น ประกาศตัวแปร a แล้วใส่ชื่อตัวละคร Aiya ลงในตัวแปร a คำสั่งแสดงข้อความไม่ต้องใส่เครื่องหมาย " " ในส่วนชื่อตัวละครที่เป็นตัวแปร (ถ้าส่วนชื่อตัวละครไม่ใช่ตัวแปรจะต้องใส่เครื่องหมาย " " ทุกครั้ง) เราสามารถแสดงข้อความดังรูปที่ 3.1 ด้วยเทคนิคตัวแปรดังนี้


จากตัวอย่างข้างบนจะเห็นว่าใช้ตัวอักษรเพียงตัวเดียวคือ a เพื่อแสดงชื่อตัวละคร Aiya ซึ่งมีสี่ตัวอักษร ความสะดวกนี้จะเห็นได้ชัดเจนขึ้นเมื่อตัวละครมีชื่อยาว เช่น เก็บชื่อตัวละคร Princess Sofia de Lupier ลงตัวแปรชื่อ s แล้วเรียกใช้ชื่อตัวละครผ่านตัวแปร s ทำให้ไม่ต้องพิมพ์ชื่อยาว ๆ ทุกครั้งที่ใส่คำสั่งแสดงข้อความ การประกาศตัวแปรให้ประกาศเพียงครั้งเดียวก่อนใช้ จากนั้นสามารถใช้ตัวแปรนั้นได้ตลอดทั้งเกมโดยไม่ต้องประกาศตัวแปรใหม่ ถ้ามีตัวแปรที่เก็บชื่อตัวละครหลายตัวแปร ตัวแปรแต่ละตัวต้องมีชื่อที่ไม่ซ้ำกัน

16 กรกฎาคม 2562

Ren'Py พื้นฐาน | บทที่ 2 เริ่มต้นกับ Ren'Py

นักสร้างเกมหลายคนอยากสร้างเกมแรกเร็ว ๆ ผู้เขียนจึงพยายามยัดพื้นฐานการสร้างเกมด้วย Ren'Py ภายในบทเดียว เมื่ออ่านบทนี้จนจบผู้อ่านจะสามารถสร้างเกมอย่างง่ายด้วยโปรแกรม Ren'Py ได้ ในบทนี้เราจะเรียนกันเรื่องการสร้างโปรเจ็กต์ใหม่ การทดสอบเกม การแสดงคำพูด การแสดงรูปพื้นหลัง การแสดงรูปตัวละคร และการใส่คอมเมนต์


สร้างโปรเจ็กต์ใหม่ และทดสอบเกม

หัวข้อนี้จะเรียนการสร้างโปรเจ็กต์เกมใหม่และการทดสอบเกม สาเหตุที่นำสองอย่างนี้มารวมในหัวข้อเดียวกันเพราะเป็นสิ่งที่ต้องใช้โปรแกรม Ren'Py จริง นอกจากนั้นจะเป็นการใส่คำสั่งด้วยโปรแกรมประเภท Text Editor นี่ฟังดูแปลก ถึงจะบอกว่าเป็นการสร้างเกมด้วยโปรแกรม Ren'Py แต่ส่วนใหญ่กลับไม่ได้ใช้โปรแกรม Ren'Py ในการสร้างเกม
รูปที่ 2.1 หน้าต่างโปรแกรม Ren'Py

การสร้างโปรเจ็กต์ใหม่

1. คลิก Create New Project ด้านซ้ายของโปรแกรม (ดูรูปที่ 2.1)
2. โปรแกรมจะแสดงข้อความ Information ให้คลิก Continue
3. ตั้งชื่อโปรเจ็กต์ (ตัวอักษรอังกฤษหรือตัวเลขเท่านั้น) จากนั้นคลิก Continue
4. เลือกขนาดหน้าต่างเกม แนะนำให้เลือกขนาด 1280 x 720 จากนั้นคลิก Continue
5. เลือกสีหลักของเกม การแสดงแบบเต็มจอหรือหน้าต่าง และความเร็วตัวอักษรในเกม จากนั้นคลิก Continue
รูปที่ 2.2 เลือกสีและตั้งค่าได้ตามใจชอบ

5 วิธีแก้ไขปัญหา Not Responding ที่ต้นเหตุ

Not responding เป็นปัญหาโลกแตกที่หลายคนเจอ พอเด้งขึ้นมาแต่ละทีก็ทำใจหายไปหมด ยิ่งถ้ายังไม่ได้กดบันทึกแล้วความน่ากลัวจะเพิ่มขึ้นมหาศาล เล่นเกมมาตั้งนาน ปั่นงานมาเกือบเสร็จ ต้องเริ่มต้นใหม่เลยเหรอเนี่ย!

เจ้า not responding นี่เป็นอาการครอบจักรวาลเสียด้วย ถ้าเปรียบเทียบกับมนุษย์แล้ว not responding ก็คืออาการปวดหัวนั่นล่ะ เป็นอาการเบื้องต้นที่เกิดได้จากหลายสาเหตุมาก วิธีแก้ไขปัญหา not responding มี 2 ทาง วิธีแรกคือแก้ไขปัญหาตามอาการ รักษาตามที่เห็นภายนอก และอีกวิธีคือแก้ไขปัญหาที่ต้นเหตุ ซึ่งยากกว่ากันเยอะและอาจแก้ด้วยตัวเองไม่ได้เลย

CAUSE: โปรแกรมยังทำงานไม่เสร็จ

สาเหตุปลายทางของอาการ not responding คือโปรแกรมนั้นยังทำงานไม่เสร็จ ไม่ว่าจะทำงานไม่เสร็จด้วยสาเหตุใดก็ตาม ถ้าโปรแกรมยังทำงานไม่เสร็จและเราพยายามให้โปรแกรมนั้นทำงานเพิ่ม (แม้แต่การคลิกบนโปรแกรมนั้นเฉย ๆ ก็ถือว่าเป็นการทำงานเพิ่มด้วย เพราะโปรแกรมต้องทำงานว่าจะตอบสนองกับการคลิกอย่างไร) โปรแกรมจะไม่ตอบสนองต่อคำสั่งใหม่ของเรา เพราะการทำงานเก่ายังไม่เสร็จ อธิบายง่าย ๆ คือโปรแกรมแบบนี้ทำงานได้ทีละอย่างเท่านั้น ถ้ากำลังทำงานอยู่ก็ไม่ว่างตอบสนองกับเรา พอโปรแกรมไม่สามารถตอบสนองกับเราด้วยตัวเองได้ ระบบปฏิบัติการจะตอบสนองแทนว่า "โปรแกรมไม่ตอบสนอง (Not Responding)" ระบบปฏิบัติการเองก็ไม่รู้เหมือนกันว่าโปรแกรมกำลังทำงานอะไรอยู่ จึงไม่สามารถให้รายละเอียดได้

โปรแกรมทำงานไม่เสร็จเป็นแค่สาเหตุปลายทางเท่านั้น ถ้าจะแก้ไขปัญหา not responding จริง ๆ ต้องแก้ไขที่สาเหตุต้นทาง อะไรที่ทำให้โปรแกรมทำงานไม่เสร็จก็แก้ที่ตรงนั้น สาเหตุต้นทางของปัญหานี้มีมากมาย ผู้เขียนรวบรวมสาเหตุต้นทางและวิธีแก้ไขมาไว้ในบทความนี้

9 กรกฎาคม 2562

Ren'Py พื้นฐาน | บทที่ 1 สร้างเกม Visual Novel ด้วย Ren'Py

เกมแนว Visual Novel หรือที่คุ้นเคยว่าเกมจีบสาว/เกมจีบหนุ่มเป็นเกมอีกแนวที่ได้รับความนิยม ตัวเกมแนว Visual Novel สร้างง่ายกว่าเกมแนวอื่น เพียงแค่ใส่ภาพ เสียง และตัวอักษรก็ได้เป็นเกมแล้ว จริง ๆ แล้วเกม Visual Novel ไม่จำเป็นต้องเป็นเกมจีบสาวหรือเกมจีบหนุ่มเท่านั้น แนวคิดของเกม Visual Novel คือนิยายที่นำเสนอออกมาเป็นภาพให้ผู้อ่านเข้าใจเนื้อเรื่องได้ จะเป็นนิยายต่อสู้ แฟนตาซี หรือว่าอะไรก็ได้ เพียงแค่นิยายจีบสาวหรือจีบหนุ่มได้รับความนิยมสร้างเป็นเกม Visual Novel มากกว่าเนื้อเรื่องแบบอื่นเท่านั้นเอง

บทความ "Ren'Py พื้นฐาน" ชุดนี้จะสอนสร้างเกมแนว Visual Novel ด้วยโปรแกรมเกมเอนจิน Ren'Py ผู้เขียนแนะนำให้ใช้โปรแกรม Ren'Py เนื่องจากเป็นโปรแกรมฟรี คุณภาพดี ได้รับความนิยม และมีเกม Visual Novel หลายเกมที่สร้างด้วยโปรแกรม Ren'Py ส่วนโปรแกรมเกมเอนจินตัวอื่นที่เสียเงินซื้อผู้เขียนลองดูแล้วสามารถสร้างเกม Visual Novel ได้ไม่แตกต่างจากเกมที่สร้างด้วย Ren'Py นักเท่าไร คงเป็นเพราะเกมแนว Visual Novel ไม่ได้มีลูกเล่นอะไรมากอยู่แล้ว ดังนั้นผู้เขียนจึงแนะนำให้ใช้โปรแกรม Ren'Py ซึ่งเป็นโปรแกรมฟรีจะดีกว่า
รูปที่ 1.1 เกมแนว Visual Novel ที่สร้างด้วยโปรแกรม Ren'Py

บทความที่เกี่ยวข้อง
เกมเอนจิน (Game Engine) คืออะไร?


แนะนำโปรแกรม Ren'Py

Ren'Py คือโปรแกรมเกมเอนจินสำหรับสร้างเกมแนว Visual Novel (VN) วิธีสร้างเกมด้วยโปรแกรม Ren'Py คือการใส่คำสั่ง (Code) ลงในไฟล์สคริปต์ของเกมด้วยโปรแกรมประเภท Text Editor (เช่น Notepad) จากนั้นจึงแปลคำสั่ง (Compile) ด้วยโปรแกรม Ren'Py เพื่อให้ได้ออกมาเป็นเกม

โปรแกรม Ren'Py แตกต่างจากโปรแกรมเกมเอนจินสำหรับสร้าง Visual Novel ตัวอื่นตรงที่ต้องใช้งานคู่กับโปรแกรมอื่น (ซึ่งหมายถึง Text Editor) ไม่ได้สร้างเกมด้วยการคลิกปุ่มต่าง ๆ จนออกมาเป็นเกม ส่วนนี้อาจทำให้นักสร้างเกมที่ไม่ชอบการเขียนโปรแกรมไม่ชอบโปรแกรมนี้ แต่ไม่ต้องกังวลไป ถ้าเทียบกับการเขียนโปรแกรมอย่าง Java หรือ Visual Basic แล้ว คำสั่งของโปรแกรม Ren'Py นั้นเข้าใจง่ายและเรียนรู้ง่ายกว่ากันเยอะเลย ผู้เขียนได้เลือกโปรแกรมมาให้เหมาะสำหรับนักสร้างเกมมือใหม่แล้ว
รูปที่ 1.2 โปรแกรม Ren'Py

19 มิถุนายน 2562

อักษรไทยเป็นสี่เหลี่ยม สัญลักษณ์แปลก ๆ | สาเหตุและวิธีแก้ปัญหา

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


วิธีที่ 1 ตั้งภูมิภาคเป็นไทย

แต่ละประเทศใช้รูปแบบบางอย่างไม่เหมือนกัน เช่น การเขียนวันที่ (วัน/เดือน/ปี, เดือน/วัน/ปี ฯลฯ) การเขียนเวลา (แบบ 12 ชั่วโมง, แบบ 24 ชั่วโมง) ภูมิภาคที่ตั้งไว้จะถูกใช้เป็นค่าเริ่มต้นสำหรับโปรแกรมต่าง ๆ ถ้าโปรแกรมแสดงผลภาษาไทยและใช้ค่าเริ่มต้น แต่เราไม่ได้ตั้งภูมิภาคไว้เป็นไทยไว้ โปรแกรมจะใช้รูปแบบตามที่ตั้งไว้มาแสดงผลภาษาไทย ทำให้ตัวอักษรไทยอาจผิดเพี้ยนไปจากปกติได้ ปัญหานี้พบเจอบ่อยในโปรแกรมเก่าบางโปรแกรม ส่วนโปรแกรมใหม่ไม่ค่อยเจอปัญหานี้แล้ว ถึงอย่างนั้นวิธีนี้เป็นวิธีที่อยากให้เริ่มต้นลองก่อนวิธีอื่น ถ้าวิธีนี้แก้ปัญหาไม่ได้อย่างน้อยก็ได้ตั้งค่ารูปแบบให้เป็นแบบที่คนไทยคุ้นเคย

รูปประกอบข้างล่างเป็นรูปจาก Windows 10 สำหรับ Windows อื่นอาจแตกต่างไปเล็กน้อย

1. เข้า Control Panel จากนั้นคลิกดังนี้
  • สำหรับ Windows 8, 8.1, 10 คลิก Region
  • สำหรับ Windows 7 คลิก Region and Language
  • สำหรับ Windows XP คลิก Regional and Language Options

15 มิถุนายน 2562

[Source Code] สร้างเกม XO หรือ Tic-Tac-Toe | ไม่มี AI (★ ระดับง่าย)

ติดตามและพูดคุยกับเราได้ที่เพจ https://www.facebook.com/PlanilaGameDeveloper

นักสร้างเกมมือใหม่หลายคนศึกษาวิธีสร้างเกมมากมาย อ่านมาหลายตำราหลายทฤษฎี แต่กลับพบว่าหลายคนยังสร้างเกมด้วยตนเองไม่ได้สักที ถ้าคิดว่าแค่อ่านตำราให้มากเพียงอย่างเดียวแล้วจะสร้างเกมเป็น ผลลัพธ์ก็ออกมาให้เห็นแล้วว่าไม่จริง การสร้างเกมรวมทั้งการเขียนโปรแกรมมีฐานเป็นสองเสาหลักได้แก่การใช้งาน (ความรู้ด้านภาษาคอมพิวเตอร์, ความรู้ด้านการใช้โปรแกรม, ทฤษฎีต่าง ๆ ฯลฯ) และอัลกอริทึม ถ้าไม่สามารถแปลงความคิดในหัวให้เป็นอัลกอริทึมได้ก็ไม่สามารถสร้างเกมได้อย่างที่ต้องการ ผู้เขียนแนะนำให้นักสร้างเกมมือใหม่ฝึกเรื่องการออกแบบอัลกอริทึมให้คล่อง สำหรับบทความในชุดนี้ไม่ได้เขียนมาเพื่อสอนพื้นฐานหรือฝึกอัลกอริทึมของผู้อ่าน จุดประสงค์ของบทความชุดนี้คือการอธิบายอัลกอริทึมจาก source code จริงของเกมต่าง ๆ ผู้อ่าน

บทความแนะนำ
[สอนสร้างเกม] เรียนสร้างเกมกับมิกิจัง : บทที่ 3 อัลกอรึทึม (Algorithm)
[อัลกอริทึม] แบบฝึกหัดอัลกอริทึม + เฉลย ชุดที่ 1


ไฟล์ TicTacToe.zip (ลิงค์ดาวน์โหลดอยู่ท้ายบทความ) ประกอบด้วย source code 3 ชุดได้แก่
  • Java
  • Visual Basic (VB)
  • RPG Maker VX Ace (RMVXA)
Source code ทั้งสามชุดมีอัลกอริทึมเหมือนกัน ต่างกันเพียงความสามารถของแต่ละภาษาหรือโปรแกรม ผู้อ่านสามารถเลือก source code ใดก็ได้


ภาพรวมอัลกอริทึม

30 พฤษภาคม 2562

[พูดคุย] ธีมใหม่ของบล็อกเป็นอย่างไรบ้าง?

วันนี้เขียนบทความใหม่ลงบล็อกหลังจากห่างหายไปนาน พอดูภาพรวมแล้วรู้สึกว่าธีมบล็อกมันเฉยไปหน่อย สมัยนี้หลายเว็บหันมาใส่กราฟฟิกในเว็บมากขึ้น จึงพยายามพัฒนาให้เข้ากับยุคสมัยบ้าง


ประวัติธีมของบล็อกนี้

บล็อกนี้มีธีมใหญ่ ๆ ที่เคยใช้อยู่ 3 แบบ เปลี่ยนธีมไป 2 ครั้ง

ธีมแรก เรียบง่ายสีเหลืองส้ม - เป็นธีมแรกที่ใช้ตั้งแต่ตอนสร้างบล็อกใหม่ ๆ เมื่อสองปีก่อน ลักษณะคล้ายบล็อกที่ไม่ตกแต่งอะไรที่มีพื้นหลังเป็นสีเหลืองส้ม บล็อกแบ่งเป็นสองส่วนตามแนวตั้งได้แก่ส่วนเนื้อหาอยู่ด้านซ้ายประมาณ 70% ของพื้นที่ ส่วนด้านขวาเป็นแถบเมนูที่ยัดลูกเล่นทุกอย่างไว้ทั้งหมด ด้านบนกับด้านล่างของเนื้อหาไม่ใส่อะไรเป็นพิเศษ เพราะไปหนักที่ด้านขวาหมดแล้ว ธีมนี้เน้นความเรียบง่ายเพราะตอนนั้นยังเป็นมือใหม่อยู่ ยังตกแต่งบล็อกไม่ค่อยเป็นและยังไม่รู้กลุ่มผู้อ่านที่เข้าบล็อก

[RMMV] |【ท่าไม้ตาย】 แก้ปัญหาภาษาไทยใน RPG Maker MV | เปลี่ยนฟอนต์ - จบปัญหาเก่า


เจอปัญหาภาษาใน RPG Maker MV อีกแล้ว! วรรณยุกต์ทับกับสระจนอ่านยาก ขอวิธีแก้หน่อยได้ไหม?

สำหรับเรื่องนี้เราเคยเขียนวิธีแก้ปัญหาไปตั้งแต่เมื่อ 2 ปีที่แล้ว (Planila Game Developer, 2017) บทความนั้นได้รับความนิยมมากจนติดท็อปบทความยอดนิยมในบล็อกของเรา เพจของเรา เว็บบอร์ดอื่น มีคนคัดลอกบทความของเราไปเผยแพร่ต่อ ไปจนถึงติดอันดับต้น ๆ ของการค้นหาด้วย Google เลยทีเดียว เราพบว่าวิธีแก้ปัญหาที่เราเคยเผยแพร่เป็นวิธีแก้ปัญหาภาษาไทยใน RPG Maker MV ได้ครอบคลุมที่สุดเท่าที่มีมา

เราพยายามทดสอบกับฟอนต์ต่าง ๆ และปรับปรุงให้ดีขึ้นกว่าเดิม แต่ก็พบว่ามีบางคนที่ไม่สามารถแก้ปัญหาภาษาไทยด้วยวิธีนั้นได้ กลุ่มของเราและผู้มีความสามารถคนอื่นได้พยายามหาทางช่วยเหลือมาตลอด แต่ก็ยังพบว่าไม่สามารถแก้ปัญหาได้ เราจึงตัดสินใจเขียนบทความนี้เพื่อแก้ปัญหาให้กับคนที่ไม่สามารถแก้ปัญหาภาษาไทยด้วยวิธีที่เคยเผยแพร่ในบทความเก่าได้

ถ้าคุณยังไม่เคยลองวิธีเก่า เราแนะนำให้คุณลองวิธีเก่าก่อน คลิกอ่านที่ลิงค์ข้างล่าง
[RMMV] มาแก้ปัญหาภาษาไทยใน RPG Maker MV กันเถอะ (วรรณยุกต์ซ้อน, ปัญหาสระอำ, ญ/ฐ+สระอู)


【ท่าไม้ตาย】 เปลี่ยนฟอนต์ - จบปัญหาเก่า

"แก้ปัญหายากนัก ซ่อนปัญหาซะเลย"