30 มีนาคม 2560

[สอนสร้างเกม] เรียนสร้างเกมกับมิกิจัง : บทที่ 1 ปฐมบท - เกม (Game)

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

มีความฝันอยากสร้างเกมเป็นของตัวเอง แต่ไม่รู้ว่าต้องทำอย่างไร ที่นี่มีคำตอบ......


เกมคืออะไร?

ก่อนจะสร้างคิดจะสร้างเกมสักเกม ต้องตอบคำถามนี้ให้ได้ก่อนว่า "เกมคืออะไร?" เพื่อที่จะได้สร้างเกมได้ตรงตามความหมายและความต้องการของเรา ผู้เขียนเชื่อว่าคนที่เข้ามาอ่านบทความนี้ทุกคนเคยเล่นเกมมาก่อน ว่าแต่เกมคืออะไรกันนะ? ด้านล่างนี้คือตัวอย่างนิยามของคำว่าเกม (Game)

"(N.) An activity that one engages in for amusement or fun." - Oxford Dictionary
"กิจกรรมที่สร้างความบันเทิงหรือความสนุกสนาน"
"(N.) an entertaining activity or sport, especially one played by children, or the equipment needed for such an activity: a board game, indoor/computer games" - Cambridge Dictionary
"กิจกรรมบันเทิงหรือกีฬา, มักถูกเล่นโดยเด็ก, หรืออุปกรณ์ที่ใช้ในการทำกิจกรรม เช่น เกมกระดาน, เกมในร่ม, เกมคอมพิวเตอร์"
"น. การแข่งขันที่มีกติกากำหนด เช่น เกมกีฬา, การเล่นเพื่อความสนุก เช่น เกมคอมพิวเตอร์, การแสดงเพื่อสาธิตกิจกรรม เช่น เกมการบริหาร, โดยปริยายหมายถึงการแสดงที่ใช้กลวิธีหรือเล่ห์เหลี่ยมเพื่อหักล้างกัน เช่น เกมการเมือง, ลักษณนามเรียกการแข่งขันหรือการเล่นที่จบลงด้วยการแพ้ชนะกันครั้งหนึ่ง ๆ เช่น เล่นแบดมินตัน ๓ เกม. (อ. game)." - พจนานุกรมฉบับราชบัณฑิตสถาน พ.ศ.2554
"กิจกรรมที่สร้างความสนุกสนานให้กับผู้เข้าร่วมกิจกรรม" - ผู้เขียน

จากตัวอย่างด้านบนจะเห็นว่า เกมมีคำนิยามที่ค่อนข้างกว้างมาก มีหลายสิ่งหลายอย่างที่สามารถเรียกว่าเกมได้ เช่น เกมกีฬา เกมกระดาน เกมไพ่ เกมคอมพิวเตอร์ แล้วสิ่งที่เรากำลังกล่าวถึงล่ะคือเกมประเภทไหน? "วิดีโอเกม (Video Game)" คือเกมที่เล่นบนอุปกรณ์อิเล็กทรอนิกส์ ซึ่งมีความหมายกว้างกว่าเกมคอมพิวเตอร์ (Computer Game) เพราะรวมไปถึงเกมโทรศัพท์ (Mobile Game) เกมคอนโซล (Console Game) และเกมบนอุปกรณ์อิเล็กทรอนิกส์อื่น ๆ ด้วย เกมที่เรากล่าวถึงในบทความนี้ก็คือวิดีโอเกมนั่นเอง

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


เกมทำงานได้อย่างไร?

ก่อนที่จะศึกษาวิธีสร้างเกม เราต้องรู้หลักการทำงานของเกมก่อนว่า "เกมทำงานได้อย่างไร?"

เกมถือว่าเป็นแอปพลิเคชัน (Application) รูปแบบหนึ่ง ข้อมูลและคำสั่ง (Code) ในเกมจะถูกบันทึกเป็นภาษาเครื่อง (Machine Code) ซึ่งใช้สัญลักษณ์แทนด้วยเลขฐานสอง (Binary) เมื่อเราเปิดแอปพลิเคชันขึ้นมาอุปกรณ์จะอ่านคำสั่งออกมาทีละคำสั่ง แล้วดำเนินการตามคำสั่งนั้น ๆ เช่น เกม zyx มีคำสั่งดังต่อไปนี้



ลำดับการทำงานของเกม zyx จะเป็นดังนี้
  • เมื่อเริ่มเปิดเกมอุปกรณ์จะอ่านคำสั่งบรรทัดที่ 1 เพียงบรรทัดเดียวก่อน อุปกรณ์จะทำการแสดงหน้าจอ Title ของเกม แต่ยังไม่เล่นเพลงประกอบ abc.def และยังไม่ตรวจจับการกดคีย์บอร์ด
  • เมื่ออุปกรณ์แสดงหน้าจอ Title ของเกมเสร็จแล้วก็จะอ่านคำสั่งบรรทัดที่ 2 เพียงบรรทัดเดียวคือเล่นเพลงประกอบ abc.def ยังไม่ตรวจจับการกดคีย์บอร์ด ส่วนหน้าจอ Title ของเกมจะยังคงแสดงอยู่ เนื่องจากยังไม่มีคำสั่งลบหรือเปลี่ยนหน้าจอใหม่
  • เมื่ออุปกรณ์เล่นเพลงประกอบ abc.def แล้วก็จะอ่านคำสั่งบรรทัดที่ 3 เพียงบรรทัดเดียวคือตรวจจับการกดคีย์บอร์ด คำสั่งบรรทัดนี้จะทำหน้าที่แค่ตรวจจับการกดคีย์บอร์ดเพียงอย่างเดียวเท่านั้น ยังไม่มีการดำเนินการตอบสนองต่อการกดคีย์บอร์ดแต่อย่างใด
  • เมื่ออุปกรณ์ตรวจจับการกดคีย์บอร์ดแล้วก็จะอ่านคำสั่งบรรทัดที่ 4 เพียงบรรทัดเดียวคือถ้ามีการกดปุ่ม Enter ให้แสดงหน้าจอ New Game แทนหน้าจอ Title คำสั่งบรรทัดนี้เป็นคำสั่งที่ทำงานต่อมาจากคำสั่งบรรทัดที่ 3 เพื่อตอบสนองต่อการกดคีย์บอร์ด โดยจะใช้ค่าที่ได้จากบรรทัดที่ 3 เท่านั้น บรรทัดที่ 4 จะไม่มีการตรวจจับการกดคีย์บอร์ดเอง และถ้าปุ่มที่ถูกกดไม่ใช่ปุ่ม Enter ก็จะไม่มีการตอบสนองใด ๆ

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


อยากสร้างเกมต้องทำอย่างไร?

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

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

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


จะสร้างเกมต้องเขียนโปรแกรมเป็นด้วยไหม?

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


เกมแรกของฉันจะเป็นแบบไหน?

หลายคนมีความฝันอยากสร้างเกมเป็นของตัวเอง เพราะเห็นเกมฟอร์มยักษ์ที่วางขายตามตลาดอย่างเกมแนว 3D, FPS แล้วอยากสร้างเกมแบบนั้นเป็นของตัวเองบ้าง ผู้เขียนขอบอกเลยว่าอีกนานหลายปีกว่ามือใหม่จะพัฒนาตัวเองให้สร้างเกมฟอร์มยักษ์แบบนั้นได้ หนึ่งปีแรกที่เริ่มศึกษาผู้อ่านไม่มีทางสร้างเกมใหญ่โตขนาดนั้นได้ทันทีเลยหรอก สิ่งนี้เองเป็นสิ่งที่ทำให้มือใหม่ที่อยากสร้างเกมถอดใจกันไปหลายคน เพราะตั้งความฝันไว้สูงแต่ไม่มีความพยายามไปให้ถึง ถ้าผู้อ่านเป็นหนึ่งในมือใหม่ที่มีความฝันอยากจะสร้างเกมฟอร์มยักษ์เหมือนอย่างเกมดัง ๆ บ้าง ผู้เขียนขอบอกไว้ตั้งแต่ตอนนี้เลยว่า ผู้อ่านจะได้สร้างเกมฟอร์มยักษ์แบบนั้นได้เป็นอันดับท้าย ๆ เลย กว่าจะเริ่มต้นสร้างเกมฟอร์มยักษ์จริงก็คงตั้งรออีกหลายปีข้างหน้า ระหว่างทางตามล่าความฝันนี้ผู้อ่านจะต้องผ่านบททดสอบด้วยการสร้างเกมหลากหลายเกม เพื่อเป็นสิ่งพิสูจน์ว่าผู้อ่านมีความรู้ ความสามารถ และความพยายามมากพอจริง ๆ ที่จะสร้างเกมฟอร์มยักษ์แบบนั้นได้ ถ้าผู้อ่านมีความพยายามมากพอจริง ๆ ผู้เขียนก็ขอเป็นกำลังใจให้ประสบความสำเร็จ

มาถึงคำถามที่ว่า "เกมแรกของฉันจะเป็นแบบไหน?" คำตอบก็คือเกมง่าย ๆ เล็ก ๆ อย่างเกม TicTacToe หรือเกมเป่ายิงฉุบ ตอนแรกเริ่มจากสร้างให้เล่นสองคนก่อน แล้วค่อยพัฒนาระบบ AI ให้สามารถเล่นคนเดียวกับอุปกรณ์ได้ เมื่อพัฒนาจนชำนาญช่ำชองแล้วก็ลองสร้างเกมหมากฮอสดูบ้าง แล้วก็ค่อย ๆ เพิ่มระดับความยากและความซับซ้อนขึ้นไปเรื่อย ๆ ตอนแรกอาจฟังดูแล้วท้อใจที่ต้องสร้างแต่เกมเล็ก ๆ แต่พื้นฐานจากเกมเล็ก ๆ เหล่านี้นี่ล่ะที่จะเป็นสิ่งสำคัญที่สามารถสร้างเกมใหญ่ ๆ ได้


สุดท้ายนี้ผู้เขียนขอให้ผู้อ่านมีความพยายามอย่างสม่ำเสมอในการศึกษาหาความรู้ ท้อได้แต่อย่าถอย แล้วเจอกันในบทต่อไปค่ะ


"Many of life's failures are people who did not realize how close they were to success when they gave up." - Thomas A. Edison
"คนที่ล้มเหลวในชีวิตไม่รู้ว่าตัวเองเข้าใกล้ความสำเร็จมากแค่ไหนในยามที่เขาถอดใจ"



คำศัพท์ที่ควรรู้ท้ายบท

แอปพลิเคชัน (Application) VS โปรแกรม (Program)
"โปรแกรม" หมายถึง ชุดของคำสั่ง (Code) ที่รวมกันเพื่อทำหน้าที่ใดหน้าที่หนึ่งอย่างเฉพาะเจาะจง
"แอปพลิเคชัน" หมายถึง ชุดของโปรแกรมที่ทำหน้าที่ร่วมกันเพื่อจุดประสงค์ใด ๆ

"แอปพลิเคชัน" หนึ่งจะมี "โปรแกรม" หนึ่งตัวหรือหลายตัวก็ได้ ยกตัวอย่างเช่น แอปพลิเคชันเบราเซอร์หนึ่งตัวจะมีหลายโปรแกรมย่อยภายใน เช่น โปรแกรมติดตั้งและถอนการติดตั้ง (Installer & Uninstaller), โปรแกรมอ่านหน้าเว็บ html, โปรแกรมปลั๊กอิน (Plug-In) เป็นต้น ดังนั้นคำว่า "แอปพลิเคชัน" จะมีความหมายกว้างกว่าคำว่า "โปรแกรม"

สร้าง (Make/Create) VS พัฒนา (Develop)
คำว่า "สร้าง" กับคำว่า "พัฒนา" ในทางซอฟต์แวร์ (Software) มีความหมายเหมือนกัน คือการทำให้เกิดซอฟต์แวร์ตัวใหม่ขึ้น ข้อแตกต่างอยู่ตรงที่คำว่า "สร้าง" เป็นคำที่เป็นภาษาพูดทั่วไป ในขณะที่คำว่า "พัฒนา" เป็นคำศัพท์ทางวิชาการ ในบทนี้ผู้เขียนได้ใช้คำว่า "สร้างเกม" เพื่อให้ผู้อ่านเข้าใจได้ง่าย แต่ในบทต่อ ๆ ไปผู้เขียนจะใช้คำว่า "พัฒนาเกม" แทนเพื่อให้มีความเป็นเนื้อหาทางวิชาการมากขึ้น

การเขียนโปรแกรม (Programming) VS การพัฒนาโปรแกรม (Program Development)
"การเขียนโปรแกรม" หมายถึง การใส่ชุดของคำสั่งให้โปรแกรม
"การพัฒนาโปรแกรม" หมายถึง การทำให้เกิดซอฟต์แวร์ตัวใหม่ขึ้นทั้งหมด ตั้งแต่การออกแบบโปรแกรม การเตรียมกราฟฟิกและเสียง การเขียนโปรแกรม การทดสอบโปรแกรม การแจกจ่ายและโฆษณาโปรแกรม ฯลฯ ซึ่งมีความหมายกว้างกว่า "การเขียนโปรแกรม" เพียงอย่างเดียว


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

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

ไม่มีความคิดเห็น:

แสดงความคิดเห็น