ติดตามเราได้ที่ Facebook ชื่อเพจ Planila Game Developer
จากบทที่แล้ว บทที่ 2 เกมเอนจิน (Game Engine) เราได้เรียนรู้ว่า "เกมเอนจินคืออะไร?" และผู้อ่านคงได้เลือกเกมเอนจินที่ตนเองสนใจแล้ว ผู้อ่านทราบแล้วว่าการพัฒนาเกมได้จะต้องป้อนคำสั่งให้กับอุปกรณ์ และในการพัฒนาเกมผู้อ่านคงมีความคิดอยู่แล้วว่าอยากจะให้เกมเป็นแบบไหน อยากให้เกมมีรูปร่างหน้าตาอย่างไร แต่ติดปัญหาตรงที่ว่า "เราจะเปลี่ยนความคิดเหล่านั้นเป็นคำสั่งในเกมได้อย่างไร?" ในบทนี้เราจะมาเรียนวิธีการเปลี่ยนความคิดต่าง ๆ ให้เป็นอัลกอริทึมกัน
อัลกอริทึมคืออะไร?
อัลกอริทึม (Algorithm) หมายถึงวิธีการแก้ปัญหาแบบเป็นลำดับขั้นตอน โดยลำดับขั้นตอนนั้นจะต้องมีความละเอียด ชัดเจน และสามารถตีความได้อย่างเดียวเท่านั้น ถ้าลองเปิดหนังสือสอนทำอาหาร ส่วนที่เป็นอัลกอรึทึมคือวิธีการทำอาหาร ในการพัฒนาเกมส่วนที่เป็นอัลกอริทึมคือวิธีการทำงานของเกม จากที่ได้เรียนไปในบทที่ 1 ว่า "อุปกรณ์จะทำงานโดยการอ่านคำสั่ง" ดังนั้นอัลกอริทึมของเกมก็คือวิธีการป้อนคำสั่งให้กับอุปกรณ์นั่นเอง
ทำไมต้องเขียนอัลกอริทึม?
จากที่ได้กล่าวไปตั้งแต่บทที่ 1 แล้วว่า "อุปกรณ์จะทำงานโดยการอ่านคำสั่งทีละบรรทัด" และอัลกอริทึมคือลำดับขั้นตอนในการดำเนินการที่ต้องเขียนเป็นข้อ ๆ ทีละบรรทัด ดังนั้นการเขียนอัลกอริทึมทำให้เราสามารถป้อนคำสั่งให้กับอุปกรณ์ทีละบรรทัดได้อย่างถูกต้อง ถ้าผู้อ่านเขียนอัลกอริทึมไม่ได้ ผู้อ่านก็ป้อนคำสั่งให้กับอุปกรณ์ไม่ได้ เมื่อผู้อ่านป้อนคำสั่งให้กับอุปกรณ์ไม่ได้ ผู้อ่านก็พัฒนาเกมเป็นของตนเองไม่ได้ ต่อให้ผู้อ่านใช้เกมเอนจินที่ใช้งานง่ายแค่ไหนก็ตาม แต่ถ้าผู้อ่านเขียนอัลกอริทึมไม่ได้ ผู้อ่านก็พัฒนาเกมไม่ได้ ดังนั้นอัลกอริทึมจึงเป็นสิ่งสำคัญมากในการพัฒนาเกม
อัลกอริทึมเป็นหนี่งในสองสิ่งสำคัญในการเขียนโปรแกรมและการพัฒนาเกม สิ่งสำคัญอีกอย่างคือความรู้เกี่ยวกับภาษาอุปกรณ์หรือเกมเอนจินที่ใช้ ในการเขียนโปรแกรมและการพัฒนาเกมไม่จำเป็นต้องมีความรู้ลึกมากก็ได้ แค่มีความรู้พื้นฐานที่สำคัญ และสามารถเปลี่ยนความคิดในหัวเป็นอัลกอริทึมได้ก็เพียงพอแล้ว เกมบางตัวใช้แค่คำสั่งพื้นฐานแต่ก็สามารถเป็นเกมฟอร์มยักษ์ได้ เพราะผู้ที่พัฒนาเกมนั้นรู้จักนำความรู้พื้นฐานมาประยุกต์ใช้ โดยการเขียนอัลกอริทึมที่มีความซับซ้อนจากคำสั่งพื้นฐานที่แม้แต่นักพัฒนาเกมมือใหม่ก็ยังทราบ
ผู้อ่านที่ไม่เคยเขียนอัลกอริทึมมาก่อนอาจรู้สึกว่าการเขียนอัลกอริทึมเป็นสิ่งที่ยาก เนื่องจากการเขียนอัลกอริทึมต้องเขียนเป็นลำดับทีละข้อ แต่ละข้อต้องละเอียด ไม่กำกวม ไม่คลุมเครือ ตีความได้อย่างเดียวเท่านั้น ยกตัวอย่างเช่น เราสั่งให้เพื่อนที่เป็นมนุษย์ต้มบะหมี่กึ่งสำเร็จรูป เราแค่บอกว่า "ต้มบะหมี่กึ่งสำเร็จรูปให้หน่อย" แค่นี้เพื่อนก็สามารถทำตามความต้องการของเราได้อย่างถูกต้องแล้ว แต่ถ้าใช้คำสั่ง "ต้มบะหมี่กึ่งสำเร็จรูปให้หน่อย" กับหุ่นยนต์ หุ่นยนต์บางตัวอาจงงทำอะไรไม่ถูกกับคำสั่งของเรา หุ่นยนต์บางตัวอาจต้มบะหมี่กึ่งสำเร็จรูปไปทั้งที่ยังไม่ได้ฉีกซองเลย หุ่นยนต์บางตัวอาจใช้นมในการต้มแทนน้ำ หุ่นยนต์บางตัวอาจใช้กระทะในการต้มแทนหม้อ ปัญหาเหล่านี้เกิดจากการใช้คำสั่งที่ไม่ละเอียดและสามารถตีความได้หลายอย่าง ในการเขียนอัลกอริทึมต้องเขียนคำสั่งให้ละเอียด ตีความได้เพียงอย่างเดียว เขียนทุกขั้นตอน ทุกคำสั่ง และต้องเขียนให้คนโง่ที่สุดในโลกก็สามารถทำตามความต้องการของเราได้อย่างถูกต้อง 100%
เขียนอัลกอริทึมได้อย่างไร?
การเขียนอัลกอริทึมสามารถทำได้ 3 แบบ ได้แก่
1. การเขียนอัลกอริทึมแบบความเรียง วิธีนี้คือการเขียนเป็นข้อความปกติ วิธีนี้เหมาะกับอัลกอริทึมที่มีขนาดเล็กและมีความซับซ้อนน้อย
ตัวอย่างความเรียงที่อธิบายวิธีการทำไข่ดาว
2. การเขียนอัลกอริทึมแบบ Flowchart วิธีนี้คือการใช้รูปภาพในการสื่อความหมาย ทำให้เห็นลำดับขั้นตอนต่าง ๆ ได้ง่ายและชัดเจน รูปภาพที่นำมาใช้จะต้องเป็นรูปภาพสากลที่ทุกคนเข้าใจได้ตรงกัน วิธีนี้เหมาะกับอัลกอริทึมที่มีความซับซ้อนมาก แต่ไม่เหมาะกับอัลกอริทึมที่มีขนาดใหญ่ เนื่องจาก Flowchart ใช้พื้นที่ในการเขียนค่อนข้างมาก
รูปภาพพื้นฐานที่ควรทราบ ได้แก่
ตัวอย่าง Flowchart ที่อธิบายวิธีการหุงข้าว
......
นี่เพิ่งแค่ 30% ของบทความนี้เท่านั้น บทความฉบับเต็มมีเยอะกว่านี้อีก!
เนื่องจากติดปัญหาเรื่องนโยบายการเผยแพร่บทความ ทำให้เราไม่สามารถเผยแพร่บทความฉบับเต็มลงในเว็บนี้ได้ อ่านฉบับเต็มได้ที่บทความต้นฉบับ (ไม่มีค่าใช้จ่าย)
บทความต้นฉบับ https://planila.blogspot.com/2017/04/3-algorithm.html
จากบทที่แล้ว บทที่ 2 เกมเอนจิน (Game Engine) เราได้เรียนรู้ว่า "เกมเอนจินคืออะไร?" และผู้อ่านคงได้เลือกเกมเอนจินที่ตนเองสนใจแล้ว ผู้อ่านทราบแล้วว่าการพัฒนาเกมได้จะต้องป้อนคำสั่งให้กับอุปกรณ์ และในการพัฒนาเกมผู้อ่านคงมีความคิดอยู่แล้วว่าอยากจะให้เกมเป็นแบบไหน อยากให้เกมมีรูปร่างหน้าตาอย่างไร แต่ติดปัญหาตรงที่ว่า "เราจะเปลี่ยนความคิดเหล่านั้นเป็นคำสั่งในเกมได้อย่างไร?" ในบทนี้เราจะมาเรียนวิธีการเปลี่ยนความคิดต่าง ๆ ให้เป็นอัลกอริทึมกัน
อัลกอริทึมคืออะไร?
อัลกอริทึม (Algorithm) หมายถึงวิธีการแก้ปัญหาแบบเป็นลำดับขั้นตอน โดยลำดับขั้นตอนนั้นจะต้องมีความละเอียด ชัดเจน และสามารถตีความได้อย่างเดียวเท่านั้น ถ้าลองเปิดหนังสือสอนทำอาหาร ส่วนที่เป็นอัลกอรึทึมคือวิธีการทำอาหาร ในการพัฒนาเกมส่วนที่เป็นอัลกอริทึมคือวิธีการทำงานของเกม จากที่ได้เรียนไปในบทที่ 1 ว่า "อุปกรณ์จะทำงานโดยการอ่านคำสั่ง" ดังนั้นอัลกอริทึมของเกมก็คือวิธีการป้อนคำสั่งให้กับอุปกรณ์นั่นเอง
ทำไมต้องเขียนอัลกอริทึม?
จากที่ได้กล่าวไปตั้งแต่บทที่ 1 แล้วว่า "อุปกรณ์จะทำงานโดยการอ่านคำสั่งทีละบรรทัด" และอัลกอริทึมคือลำดับขั้นตอนในการดำเนินการที่ต้องเขียนเป็นข้อ ๆ ทีละบรรทัด ดังนั้นการเขียนอัลกอริทึมทำให้เราสามารถป้อนคำสั่งให้กับอุปกรณ์ทีละบรรทัดได้อย่างถูกต้อง ถ้าผู้อ่านเขียนอัลกอริทึมไม่ได้ ผู้อ่านก็ป้อนคำสั่งให้กับอุปกรณ์ไม่ได้ เมื่อผู้อ่านป้อนคำสั่งให้กับอุปกรณ์ไม่ได้ ผู้อ่านก็พัฒนาเกมเป็นของตนเองไม่ได้ ต่อให้ผู้อ่านใช้เกมเอนจินที่ใช้งานง่ายแค่ไหนก็ตาม แต่ถ้าผู้อ่านเขียนอัลกอริทึมไม่ได้ ผู้อ่านก็พัฒนาเกมไม่ได้ ดังนั้นอัลกอริทึมจึงเป็นสิ่งสำคัญมากในการพัฒนาเกม
อัลกอริทึมเป็นหนี่งในสองสิ่งสำคัญในการเขียนโปรแกรมและการพัฒนาเกม สิ่งสำคัญอีกอย่างคือความรู้เกี่ยวกับภาษาอุปกรณ์หรือเกมเอนจินที่ใช้ ในการเขียนโปรแกรมและการพัฒนาเกมไม่จำเป็นต้องมีความรู้ลึกมากก็ได้ แค่มีความรู้พื้นฐานที่สำคัญ และสามารถเปลี่ยนความคิดในหัวเป็นอัลกอริทึมได้ก็เพียงพอแล้ว เกมบางตัวใช้แค่คำสั่งพื้นฐานแต่ก็สามารถเป็นเกมฟอร์มยักษ์ได้ เพราะผู้ที่พัฒนาเกมนั้นรู้จักนำความรู้พื้นฐานมาประยุกต์ใช้ โดยการเขียนอัลกอริทึมที่มีความซับซ้อนจากคำสั่งพื้นฐานที่แม้แต่นักพัฒนาเกมมือใหม่ก็ยังทราบ
ผู้อ่านที่ไม่เคยเขียนอัลกอริทึมมาก่อนอาจรู้สึกว่าการเขียนอัลกอริทึมเป็นสิ่งที่ยาก เนื่องจากการเขียนอัลกอริทึมต้องเขียนเป็นลำดับทีละข้อ แต่ละข้อต้องละเอียด ไม่กำกวม ไม่คลุมเครือ ตีความได้อย่างเดียวเท่านั้น ยกตัวอย่างเช่น เราสั่งให้เพื่อนที่เป็นมนุษย์ต้มบะหมี่กึ่งสำเร็จรูป เราแค่บอกว่า "ต้มบะหมี่กึ่งสำเร็จรูปให้หน่อย" แค่นี้เพื่อนก็สามารถทำตามความต้องการของเราได้อย่างถูกต้องแล้ว แต่ถ้าใช้คำสั่ง "ต้มบะหมี่กึ่งสำเร็จรูปให้หน่อย" กับหุ่นยนต์ หุ่นยนต์บางตัวอาจงงทำอะไรไม่ถูกกับคำสั่งของเรา หุ่นยนต์บางตัวอาจต้มบะหมี่กึ่งสำเร็จรูปไปทั้งที่ยังไม่ได้ฉีกซองเลย หุ่นยนต์บางตัวอาจใช้นมในการต้มแทนน้ำ หุ่นยนต์บางตัวอาจใช้กระทะในการต้มแทนหม้อ ปัญหาเหล่านี้เกิดจากการใช้คำสั่งที่ไม่ละเอียดและสามารถตีความได้หลายอย่าง ในการเขียนอัลกอริทึมต้องเขียนคำสั่งให้ละเอียด ตีความได้เพียงอย่างเดียว เขียนทุกขั้นตอน ทุกคำสั่ง และต้องเขียนให้คนโง่ที่สุดในโลกก็สามารถทำตามความต้องการของเราได้อย่างถูกต้อง 100%
เขียนอัลกอริทึมได้อย่างไร?
การเขียนอัลกอริทึมสามารถทำได้ 3 แบบ ได้แก่
1. การเขียนอัลกอริทึมแบบความเรียง วิธีนี้คือการเขียนเป็นข้อความปกติ วิธีนี้เหมาะกับอัลกอริทึมที่มีขนาดเล็กและมีความซับซ้อนน้อย
ตัวอย่างความเรียงที่อธิบายวิธีการทำไข่ดาว
Quote:นำกระทะไปวางบนเตาแก๊ส เปิดเตาแก๊ส เทน้ำมันพืชลงไปในกระทะ 30 มิลลิลิตร แล้วรอจนกว่าน้ำมันเดือด เมื่อน้ำมันเดือดแล้ว ตอกไข่ไก่ 1 ฟอง แล้วใส่ไข่ขาวกับไข่แดงลงในกระทะ ส่วนเปลือกไข่นั้นให้ทิ้งลงในถังขยะ เสร็จแล้วรอจนกว่าไข่ขาวและไข่แดงเริ่มแข็งตัว เมื่อไข่ขาวและไข่แดงเริ่มแข็งตัวแล้ว ใช้ตะหลิวพลิกไข่ขาวและไข่แดงแล้ววางไว้บนกระทะเหมือนเดิม เมื่อไข่ขาวและไข่แดงสุกแล้ว นำตะหลิวตักไข่ขาวและไข่แดงมาวางไว้บนจาน ปิดเตาแก๊ส เพียงเท่านี้ก็ทำไข่ดาวเสร็จแล้ว
2. การเขียนอัลกอริทึมแบบ Flowchart วิธีนี้คือการใช้รูปภาพในการสื่อความหมาย ทำให้เห็นลำดับขั้นตอนต่าง ๆ ได้ง่ายและชัดเจน รูปภาพที่นำมาใช้จะต้องเป็นรูปภาพสากลที่ทุกคนเข้าใจได้ตรงกัน วิธีนี้เหมาะกับอัลกอริทึมที่มีความซับซ้อนมาก แต่ไม่เหมาะกับอัลกอริทึมที่มีขนาดใหญ่ เนื่องจาก Flowchart ใช้พื้นที่ในการเขียนค่อนข้างมาก
รูปภาพพื้นฐานที่ควรทราบ ได้แก่
รูปภาพ
| ความหมาย
| วิธีใช้
|
---|---|---|
![]() | ดำเนินการทั่วไป (Process) | ใช้กับการดำเนินการทั่วไป เช่น การประกาศตัวแปร การคำนวณ เป็นต้น |
![]() | ตรวจสอบเงื่อนไข (Decision) | ใช้ตรวจสอบด้วยเงื่อนไข "ถ้า...แล้ว... (If...Then...)" ลูกศรที่ออกจากรูปภาพนี้ต้องมีสองเส้น เส้นหนึ่งเขียนกำกับว่า "จริง (True)" อีกเส้นหนึ่งเขียนกำกับว่า "เท็จ (False)" |
![]() | แสดงลำดับขั้นตอน (Arrow) | ใช้บอกลำดับการทำงาน เชื่อมรูปภาพหนึ่งกับอีกรูปภาพหนึ่ง โดยให้ฝั่งหัวลูกศรคือลำดับการทำงานต่อไป รูปภาพหนึ่งจะมีลูกศรออกมาได้แค่ 1 เส้นเท่านั้น ยกเว้นรูปภาพตรวจสอบเงื่อนไขที่มีลูกศรออกมา 2 เส้น |
![]() | จุดเริ่มต้นหรือจุดสิ้นสุด (Start/End) | ใช้เพื่อกำหนดจุดเริ่มต้นและจุดสิ้นสุด Flowchart ทั้งหมดต้องมีรูปภาพนี้ 2 รูปเสมอ รูปหนึ่งคือจุดเริ่มต้น อีกรูปหนึ่งคือจุดสิ้นสุด |
![]() | รับข้อมูลหรือแสดงผลแบบไม่เจาะจง (Input/Output) | ใช้เพื่อรับข้อมูลหรือแสดงผลแบบไม่เจาะจงอุปกรณ์ในการรับข้อมูลหรือแสดงผล |
![]() | จุดเชื่อมต่อภายในหน้าเดียวกัน (On-Page Reference) | ใช้เชื่อมบริเวณที่มีลูกศรหลายเส้นชี้มารวมกัน เช่น บริเวณหลังจากการตรวจสอบเงื่อนไขอาจจะมีลูกศรชี้มาที่ตำแหน่งเดียวกันหลายเส้น เราจะใช้รูปภาพนี้เพื่อรวมลูกศรเหล่านั้นให้เหลือเพียงเส้นเดียว |
![]() | จุดเชื่อมต่อระหว่างหน้า (Off-Page Reference) | ใช้เชื่อมการทำงานที่เขียนอยู่คนละหน้ากัน (ในกรณีที่เขียน Flowchart หลายหน้า) |
ตัวอย่าง Flowchart ที่อธิบายวิธีการหุงข้าว
......
นี่เพิ่งแค่ 30% ของบทความนี้เท่านั้น บทความฉบับเต็มมีเยอะกว่านี้อีก!
เนื่องจากติดปัญหาเรื่องนโยบายการเผยแพร่บทความ ทำให้เราไม่สามารถเผยแพร่บทความฉบับเต็มลงในเว็บนี้ได้ อ่านฉบับเต็มได้ที่บทความต้นฉบับ (ไม่มีค่าใช้จ่าย)
บทความต้นฉบับ https://planila.blogspot.com/2017/04/3-algorithm.html
![[Image: %25E0%25B8%259A%25E0%25B8%2597%25E0%25B8...9%2588.png]](https://1.bp.blogspot.com/-_c9ZVu7xIrY/XTENAwClQsI/AAAAAAAAAcQ/0-BqKQzGcPsYp9iSfpf1VfFizjZqVv-swCLcBGAs/s1600/%25E0%25B8%259A%25E0%25B8%2597%25E0%25B8%2584%25E0%25B8%25A7%25E0%25B8%25B2%25E0%25B8%25A1%25E0%25B8%2599%25E0%25B8%25B5%25E0%25B9%2589%25E0%25B8%2596%25E0%25B8%25B9%25E0%25B8%2581%25E0%25B8%2588%25E0%25B8%25B3%25E0%25B8%2581%25E0%25B8%25B1%25E0%25B8%2594%25E0%25B8%2581%25E0%25B8%25B2%25E0%25B8%25A3%25E0%25B9%2580%25E0%25B8%259C%25E0%25B8%25A2%25E0%25B9%2581%25E0%25B8%259E%25E0%25B8%25A3%25E0%25B9%2588.png)
ติดตามเราได้ที่ Facebook ชื่อเพจ Planila Game Developer
อ่านบทความสอนสร้างเกมได้ที่ https://planila.blogspot.com
อ่านบทความสอนสร้างเกมได้ที่ https://planila.blogspot.com
![[Image: banner-ads.png]](https://1.bp.blogspot.com/-PTfKtYmrjos/XSPq4C0dWRI/AAAAAAAAAXE/cIjeL6DbSdMQen2LeHMZwJpaUieSlw-9gCLcBGAs/s1600/banner-ads.png)