28 เมษายน 2560

[สอนสร้างเกม] เรียนสร้างเกมกับมิกิจัง : บทที่ 5 มาสร้างเกมแรกกันเถอะ

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

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


จะนำตัวอย่างเกมในบทนี้ไปสร้างจริง ๆ ได้อย่างไร?

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


ขั้นตอนการสร้างเกมคร่าว ๆ มีอะไรบ้าง?

  1. ออกแบบเกมคร่าว ๆ ว่าอยากให้เกมเป็นแบบไหน เล่นสองคนหรือเล่นคนเดียว ใช้ภาษาอุปกรณ์หรือเกมเอนจินอะไรในการสร้าง
  2. สร้างโปรเจกต์ใหม่ แล้วตั้งชื่อโปรเจกต์ตามที่ต้องการ
  3. เขียนอัลกอริทึมของเกม สำหรับมือใหม่ควรเขียนอัลกอริทึมแบบภาพรวมคร่าว ๆ ก่อน แล้วค่อยเขียนอัลกอริทึมแบบละเอียด เพื่อให้มองเห็นภาพรวมของเกมก่อน แล้วคอยเจาะรายละเอียด
  4. ใส่คำสั่งจากอัลกอริทึมแบบละเอียดลงในโปรแกรมเขียนภาษาอุปกรณ์หรือเกมเอนจินที่เลือกใช้
  5. ทดสอบเกมว่าถูกต้องตามที่เราต้องการหรือไม่ ถ้าเกมมีข้อผิดพลาดก็ต้องแก้ไขคำสั่งแล้วทดสอบใหม่
  6. เมื่อเกมเสร็จสมบูรณ์แล้ว ก็สร้างเกมเป็นไฟล์สำเร็จรูปที่ไม่ต้องเพิ่งโปรแกรมเขียนภาษาอุปกรณ์หรือเกมเอนจินอีกต่อไป (Export โปรเจกต์)


ออกแบบเกมอย่างไรดี?

การออกแบบเกมต้องกำหนดรูปแบบของเกมอย่างคร่าว ๆ ในตัวอย่างเกมนี้จะออกแบบเกม ดังนี้

ชื่อเกม : TicTacToe
จำนวนผู้เล่น : สองคน (เพื่อความง่ายในการสร้างเกม)
กติกาการเล่น : ผู้เล่นฝั่งไหนเรียงสัญลักษณ์ของตนเอง (X หรือ O) เป็นเส้นตรงได้ 3 ตัวก่อนเป็นฝ่ายชนะ
เวลาที่ใช้ในการเล่น : ประมาณ 1-2 นาที


เขียนอัลกอริทึมแบบภาพรวมอย่างไรดี?

การเขียนอัลกอริทึมแบบภาพรวมเพื่อให้ผู้สร้างเกมมองเห็นภาพรวมของเกมอย่างคร่าว ๆ ก่อนว่า "เกมของเรามีหลักการทำงานอย่างไร?" เพื่อที่จะได้นำมาเป็นแนวทางเขียนอัลกอริทึมแบบละเอียดต่อไป ถ้าผู้อ่านมือใหม่ข้ามไปเขียนอัลกอริทึมแบบละเอียดเลยตั้งแต่ทีแรก ผู้อ่านอาจงงว่าต้องเขียนอัลกอริทึมอย่างไรได้ เนื่องจากอัลกอริทึมแบบละเอียดมีความซับซ้อนสูง ในตัวอย่างเกมนี้สามารถเขียนอัลกอริทึมแบบภาพรวมได้ ดังนี้
  1. เริ่มต้นด้วยกระดานเปล่า
  2. ให้ผู้เล่นเลือกช่องที่ต้องการลงสัญลักษณ์ของตัวเอง
  3. ตรวจสอบว่าช่องที่ผู้เล่นเลือกมีสัญลักษณ์อื่นอยู่ก่อนหน้าแล้วหรือไม่ ถ้าไม่มีให้แสดงสัญลักษณ์ของผู้เล่นคนนั้นในช่องที่เลือก และบันทึกค่าลงในตัวแปรที่บันทึกกระดาน
  4. ตรวจสอบตัวแปรที่บันทึกกระดานว่ามีฝ่ายไหนเรียงสัญลักษณ์ครบ 3 ตัวก่อนหรือไม่ ถ้ามีให้แสดงข้อความว่าผู้เล่นคนนั้นเป็นฝ่ายชนะ
  5. ตรวจสอบตัวแปรที่บันทึกกระดานว่ากระดานเต็มแล้วหรือไม่ ถ้าใช่แสดงว่าเสมอ ถ้าไม่ใช่ให้กลับไปทำข้อ 2


เขียนอัลกอริทึมแบบละเอียดอย่างไรดี?

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

เนื่องจาก Pseudo Code ของเกม TicTacToe มีความยาวมาก ผู้เขียนจึงแยกไปไว้ในเอกสารประกอบบทความแทน เพื่อไม่ให้บทความมีความยาวมากจนเกินไป ผู้อ่านสามารถดาวน์โหลดเอกสารประกอบบทความได้ที่ลิงค์ด้านล่างนี้ (ถ้าลิงค์เสียกรุณาแจ้ง)

ลิงค์หลัก : Mediafire
ลิงค์สำรอง : 4shared

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


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

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

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


ผู้อ่านสามารถติดตามอ่านบทความ "เรียนสร้างเกมกับมิกิจัง" บทใหม่ได้ทุกวันศุกร์ สำหรับบทหน้าเราจะยังคงอยู่กับเกม TicTacToe อยู่เหมือนเดิม แต่จะเป็น TicTacToe ที่สามารถเล่นคนเดียวได้ เราจะมาเขียนปัญญาประดิษฐ์ (Artificial Intelligence) กัน แล้วพบกันใหม่บทหน้าค่ะ ขอบคุณค่ะ


"The best way to predict the future is to create it." - Peter Drucker
"วิธีที่ดีที่สุดในการทำนายอนาคตคือการสร้างมันขึ้นมาเอง"



แบบฝึกหัดประจำบทที่ 5

แบบฝึกหัดที่ 5 จงเขียนอัลกอริทึมแบบภาพรวมและแบบละเอียด แล้วนำมาสร้างเกมต่อไปนี้
  1. เกมทายผลการโยนเหรียญ (ง่าย)
  2. เกมเป่ายิงฉุบ แบบเล่นสองคน (ง่าย)
  3. เกมคิดเลขเร็ว บวก ลบ คูณ หาร (ปานกลาง)
  4. เกมบันไดงู แบบเล่นสี่คน การเดินทั้งหมดขึ้นอยู่กับการทอยลูกเต๋า (ปานกลาง)
  5. เกมโอเทลโล่ (Othello) แบบเล่นสองคน (ยาก)

1 ความคิดเห็น:

  1. สวัสดีครับคุณมิกิ
    ตอนนี้ผมทำโปรเจคโดยใช้Rpg Makerอยู่
    ผมอยากทราบวิธีใช้สคริปต์ที่ละเอียดกว่านี้อ่ะครับ
    ถ้าคุณมิกิสะดวก รบกวนตอบกลับมาทางอีเมล์นี้หน่อยนะครับ
    pangpond.sigsmile@gmail.com

    ตอบลบ