จากบทที่แล้ว เราได้เรียนรู้วิธีการเขียนอัลกอริทึมแบบต่าง ๆ กันไปแล้ว การเขียนอัลกอริทึมส่วนใหญ่นั้นจะต้องมีการคำนวณเกิดขึ้นด้วย ดังนั้นในบทนี้เราจะมาเรียนวิธีการดำเนินการต่าง ๆ ทางคณิตศาสตร์เพื่อใช้ในการเขียนอัลกอริทึมกัน
ตัวแปรคืออะไร?
ตัวแปร (Variable) หมายถึงค่าที่ถูกเก็บไว้ในหน่วยความจำของอุปกรณ์ สามารถเปลี่ยนแปลงได้ตามที่เราต้องการ ตัวแปรสามารถใช้ประโยชน์ได้หลายอย่าง เช่น นับจำนวนครั้งที่วนลูป, คำนวณเลข, รับข้อมูลจากคีย์บอร์ด, เก็บคะแนนของผู้เล่น เป็นต้น การที่เราจะใช้ตัวแปรได้นั้นเราจะต้องประกาศตัวแปรก่อน การประกาศตัวแปร (Variable Declaration) เราต้องตั้งชื่อที่จะใช้เรียกและกำหนดประเภทของตัวแปรนั้น กฎการตั้งชื่อตัวแปรมีคร่าว ๆ ดังนี้
- ต้องไม่ซ้ำกับชื่อตัวแปรหรือชื่อเฉพาะอย่างอื่นที่มีอยู่ก่อนแล้ว
- ต้องไม่ซ้ำกับคำสงวน (Reserved Word) ของภาษาอุปกรณ์หรือเกมเอนจินนั้น
- ต้องขึ้นต้นด้วยตัวอักษรเท่านั้น (A-Z, a-z) นอกจากนั้นจะเป็นตัวอักษร ตัวเลข หรือสัญประกาศ (_) ก็ได้ แต่ต้องไม่ใช่เครื่องหมายวรรคตอนใด ๆ ยกเว้นสัญประกาศ (กฎข้อนี้อาจแตกต่างไปในแต่ละภาษาอุปกรณ์หรือเกมเอนจิน)
- ต้องไม่มีการเว้นวรรคใด ๆ
- ควรใช้ภาษาอังกฤษในการตั้งชื่อตัวแปร
- ควรตั้งชื่อตัวแปรที่สื่อความหมาย
คำสงวนหมายถึงคำที่เป็นคำสั่งของภาษาอุปกรณ์หรือเกมเอนจินตัวนั้น เช่น ในภาษา C จะใช้คำสั่ง if ในการตรวจสอบเงื่อนไข ดังนั้นคำว่า if จึงเป็นคำสงวนของภาษา C สาเหตุที่ต้องมีคำสงวนเพื่อป้องกันไม่ให้ผู้ใช้งานตั้งชื่อตัวแปรซ้ำกับคำสั่งที่มีอยู่เดิม ซึ่งจะทำให้โปรแกรมสับสนว่านี่เป็นคำสั่งหรือชื่อตัวแปรกันแน่ คำสงวนในแต่ละภาษาอุปกรณ์และเกมเอนจินก็มีแตกต่างกันออกไป ผู้อ่านต้องค้นหาเพิ่มเติมเองว่าคำสงวนของภาษาอุปกรณ์หรือเกมเอนจินที่ผู้อ่านใช้งานมีคำอะไรบ้าง
ชื่อตัวแปรที่ดีควรสื่อความหมายในตัวเอง เช่น User_Name, answer, Time เป็นต้น ไม่ควรตั้งชื่อตัวแปรมั่ว ๆ อย่าง xyz หรือ GTC3HA1 เนื่องจากตัวเราเองอาจลืมว่าตัวแปรนั้นไว้ใช้ทำอะไรเมื่อเวลาผ่านไป การตั้งชื่อตัวแปรเป็นภาษาอังกฤษมีเรื่องที่ต้องระวังอยู่อย่างหนึ่งคือเรื่องตัวพิมพ์ใหญ่และตัวพิมพ์เล็ก ภาษาอุปกรณ์และเกมเอนจินส่วนใหญ่มักมองว่าตัวพิมพ์ใหญ่และตัวพิมพ์เล็กนั้นแตกต่างกัน (Case Sensitive) เช่น hello, Hello, HELLO โปรแกรมจะมองสามชื่อนี้เป็นคนละชื่อกัน และหมายถึงตัวแปรคนละตัวกัน แต่ก็พอมีบางภาษาอุปกรณ์และเกมเอนจินที่มองตัวพิมพ์ใหญ่และตัวพิมพ์เล็กเป็นตัวเดียวกัน (Case Insensitive) โดยมองว่า world, World, WORLD เป็นชื่อเดียวกันและหมายถึงตัวแปรตัวเดียวกัน
ประเภทของตัวแปรมีอะไรบ้าง?
อย่างที่บอกไปว่า "ตัวแปรคือค่าที่ถูกเก็บไว้" ค่าที่ถูกเก็บไว้นั้นมีอยู่หลายประเภท ซึ่งแต่ละภาษาอุปกรณ์และเกมเอนจินก็แบ่งประเภทย่อยของตัวแปรแตกต่างกันออกไป มีตัวแปรให้เลือกใช้เป็นสิบกว่าแบบ แต่ประเภทใหญ่ ๆ ของตัวแปรในแต่ละภาษาอุปกรณ์และเกมเอนจินจะคล้ายคลึงกัน ประเภทใหญ่ ๆ ของตัวแปร ได้แก่
1. ตัวแปรเก็บจำนวนเต็ม (Integer Variable) ใช้เก็บจำนวนเต็มเท่านั้น มีการแบ่งย่อยอีกว่าเป็นแบบเก็บได้เฉพาะจำนวนเต็มบวกกับจำนวนเต็มศูนย์ (จำนวนเต็มตั้งแต่ศูนย์ขึ้นไป) หรือเป็นแบบเก็บจำนวนเต็มได้ทั้งหมด (รวมทั้งจำนวนเต็มลบด้วย) นอกจากนี้ยังมีการแบ่งตัวแปรประเภทนี้เป็นหลายขนาดตามขอบเขตที่สามารถเก็บได้อีกด้วย ยิ่งตัวแปรมีขนาดใหญ่มากเท่าไรก็ยิ่งเก็บค่าที่มีจำนวนหลักได้มากเท่านั้น ถ้านำตัวแปรประเภทนี้มาหารกัน ผลลัพธ์ที่ได้จะเป็นจำนวนเต็มเสมอ เช่น 11 หารด้วย 4 จะได้ผลลัพธ์เป็น 3 เนื่องจากตัวแปรประเภทนี้จะไม่คิดทศนิยม และจะปัดเศษลงเสมอ (เพราะไม่คิดทศนิยมเลยไม่รู้ว่าทศนิยมเป็นเท่าไร จึงปัดลงไว้ก่อน)
2. ตัวแปรเก็บจำนวนจริง (Floating Point Variable) ตัวแปรประเภทนี้จะสามารถเก็บข้อมูลได้มากกว่าตัวแปรประเภทแรก เพราะสามารถเก็บจำนวนที่มีทศนิยมได้ แต่ก็ต้องแลกมากับขนาดของตัวแปรที่ใหญ่มากขึ้นด้วย
3. ตัวแปรเก็บตัวอักษร (Character Variable) ใช้เก็บตัวอักษรใด ๆ ก็ได้ 1 ตัวอักษร ถ้าใช้ตัวแปรประเภทนี้เก็บค่าที่เป็นตัวเลข โปรแกรมจะมองว่าตัวเลขตัวนั้นเป็นเพียงตัวอักษรตัวหนึ่ง ไม่สามารถนำมาดำเนินการใด ๆ ทางคณิตศาสตร์ได้
4. ตัวแปรเก็บข้อความ (String Variable) ใช้เก็บตัวอักษรใด ๆ ก็ได้ ไม่จำกัดจำนวนตัวอักษร บางภาษาอุปกรณ์หรือเกมเอนจินอาจไม่มีตัวแปรประเภทนี้ เนื่องจากตัวแปรประเภทนี้ไม่ได้เป็นตัวแปรแบบเก็บค่าจริง ๆ (Value Variable) แต่เป็นตัวแปรแบบอ้างอิงค่าอื่น (Reference Variable) ตัวแปรประเภทนี้เกิดจากการนำตัวแปรเก็บตัวอักษรมาสร้างเป็นอาร์เรย์ (Array) (เป็นการนำตัวแปรประเภทที่ 3 มาเรียงต่อกันเป็นชุด ไม่ได้เป็นตัวแปรประเภทใหม่จริง ๆ)
5. ตัวแปรเก็บค่าความจริง (Boolean Variable) ใช้เก็บค่าความจริงทางตรรกศาสตร์ ค่าที่เก็บได้มีอยู่ 2 ค่าคือ "จริง (True)" และ "เท็จ (False)" เท่านั้น ตัวแปรประเภทนี้มีอยู่แบบเดียว ไม่สามารถแบ่งประเภทย่อยได้อีก ตัวแปรประเภทนี้มีเพียงขนาดเดียวคือมีขนาด 1 bit ในทุก ๆ ภาษาอุปกรณ์และเกมเอนจิน
นิพจน์คืออะไร?
นิพจน์ (Expression) หมายถึงข้อความทางคณิตศาสตร์ ประกอบไปด้วยค่าคงที่ ตัวแปร และตัวดำเนินการ นิพจน์เรียกเป็นภาษาไทยได้อีกอย่างว่า "ประโยคสัญลักษณ์" ตัวอย่างนิพจน์ เช่น 42 ÷ 7 = 6, 3n + 2 = 1 , x² + 4x + 7 < 0 เป็นต้น
นิพจน์ในทางอุปกรณ์จะมีลักษณะแตกต่างจากนิพจน์ในทางคณิตศาสตร์อยู่นิดหน่อย อย่างที่ได้เกริ่นไปแล้วในบทที่ 3 นิพจน์ในทางอุปกรณ์ที่มีเครื่องหมายเท่ากับ (=) จะเป็นการนำค่าที่อยู่ฝั่งขวาของเครื่องหมายเท่ากับมาไว้ในค่าที่อยู่ฝั่งซ้ายของเครื่องหมายเท่ากับ เช่น AuthorName = "Mikichan" หมายความว่าให้ตัวแปร AuthorName มีค่าเท่ากับข้อความ "Mikichan", A = B หมายความว่าให้ตัวแปร A มีค่าเท่ากับตัวแปร B โดยที่ตัวแปร B มีค่าเท่าเดิม, N = N + 1 (ปัญหาโลกแตกสำหรับมือใหม่!!!) หมายความว่าให้ตัวแปร N ค่าใหม่มีค่าเท่ากับตัวแปร N ค่าเดิมบวกด้วย 1 แล้วเก็บตัวแปร N ค่าใหม่ในหน่วยความจำ และลบตัวแปร N ค่าเดิมออกจากหน่วยความจำ (เนื่องจากตัวแปร N ค่าเดิมถูกตัวแปร N ค่าใหม่เขียนทับ) ยกตัวอย่างเช่น ตอนแรกให้ N = 3 พอถึงคำสั่ง N = N + 1 โปรแกรมจะมองว่า N = 3 + 1 ดังนั้นเมื่อโปรแกรมทำคำสั่งนี้เสร็จแล้ว ตัวแปร N ก็จะมีค่าเท่ากับ 4
บทความแนะนำสำหรับมือใหม่ (อธิบายอย่างละเอียด) : [Q&A] ทำไม x = x + 1 | คำถามที่มือใหม่หลายคนสงสัย
จากตัวอย่างด้านบนจะสังเกตได้ว่า ค่าที่อยู่ฝั่งซ้ายของเครื่องหมายเท่ากับจะต้องเป็นตัวแปรเสมอ และจะมีตัวแปรเพียงตัวเดียวเท่านั้น เนื่องจากเครื่องหมายเท่ากับคือการนำค่าฝั่งขวามาไว้ในค่าฝั่งซ้าย ดังนั้นค่าที่อยู่ฝั่งซ้ายจะต้องเป็นค่าที่สามารถเปลี่ยนแปลงเพื่อรับข้อมูลได้ ซึ่งค่าที่เปลี่ยนแปลงได้ก็คือตัวแปรนั่นเอง และสาเหตุที่ฝั่งซ้ายมีตัวแปรได้เพียงตัวเดียวก็เพื่อให้เก็บค่าลงตัวแปรได้อย่างถูกต้อง สมมติว่ามีนิพจน์หนึ่งคือ A + B = 104 ปัญหาคือโปรแกรมจะเลือกเก็บค่า 104 ไว้ที่ตัวแปร A หรือตัวแปร B ดีล่ะ ในเมื่อมีตัวแปรอยู่ฝั่งซ้ายตั้งสองตัว โปรแกรมโดยทั่วไปจะไม่เก็บค่าไว้ครึ่ง ๆ กลาง ๆ โดยยังติดตัวแปรไว้หลายตัวอย่างให้ A + B เก็บค่าเท่ากับ 104 ถ้าจะเก็บค่าก็ต้องเลือกว่าจะเก็บค่าที่ตัวแปรใดตัวแปรหนึ่งไปเลย ดังนั้นฝั่งซ้ายของเครื่องหมายเท่ากับจึงมีตัวแปรได้เพียงตัวเดียวเท่านั้น
ตัวดำเนินการคืออะไร?
ตัวดำเนินการ (Operator) หมายถึงเครื่องหมายที่ใช้ดำเนินการอย่างใดอย่างหนึ่งกับค่าคงที่หรือตัวแปรกลุ่มใดกลุ่มหนึ่ง เพื่อให้ได้ผลลัพธ์ออกมาในรูปแบบใดรูปแบบหนึ่ง ทุกนิพจน์จะต้องมีตัวดำเนินการอยู่ด้วยเสมอ ตัวอย่างตัวดำเนินการ เช่น ตัวดำเนินการบวก (+) คือการนำจำนวนสองจำนวนที่อยู่ฝั่งซ้ายและขวามารวมกัน เช่น 1 + 2 หมายถึงการนำ 1 มารวมกับ 2 ผลลัพธ์ที่ได้มีค่าเท่ากับ 3, ตัวดำเนินการคูณ (×) คือการใช้ตัวดำเนินการบวกมาดำเนินการกับจำนวนที่อยู่ฝั่งซ้ายเป็นจำนวนครั้งเท่ากับจำนวนที่อยู่ฝั่งขวาลบด้วยหนึ่ง เช่น 4 × 6 หมายถึงการนำ 4 + 4 ดำเนินการต่อเนื่องกันจำนวน 5 ครั้ง (บวกกัน 5 ครั้งหมายความว่ามีเลข 4 อยู่ทั้งหมด 6 ตัว) ผลลัพธ์ที่ได้เท่ากับ 24 เป็นต้น
ตัวดำเนินการในแต่ละภาษาอุปกรณ์และเกมเอนจินจะใช้เครื่องหมายแตกต่างกันไป แต่ตัวดำเนินการโดยทั่วไปแล้วจะใช้เครื่องหมายที่ไม่แตกต่างกันมากนัก โดยเครื่องหมายที่ใช้จะเป็นเครื่องหมายที่มีบนคีย์บอร์ด เพื่อความง่ายในการเขียนคำสั่ง ต่อไปนี้คือตัวดำเนินการพื้นฐานที่ควรทราบ
ตัวดำเนินการทางคณิตศาสตร์มีอะไรบ้าง?
ตัวดำเนินการทางคณิตศาสตร์ (Arithmetic Operator) คือตัวดำเนินการที่ใช้คำนวณตัวเลข ผลลัพธ์ที่ได้จะออกมาเป็นตัวเลข ตัวดำเนินการประเภทนี้ ได้แก่
ตัวดำเนินการ
|
คำอธิบาย
|
ตัวอย่างวิธีใช้
|
---|---|---|
+
|
บวก
| A = 3 + 6.25 ผลลัพธ์ : A มีค่าเท่ากับ 9.25 |
-
|
ลบ
| A = 21 - 17 ผลลัพธ์ : A มีค่าเท่ากับ 4 |
*
|
คูณ
| A = 8 * 2.5 ผลลัพธ์ : A มีค่าเท่ากับ 20 |
/
|
หาร (ปกติ)
| A = 7 / 5 ผลลัพธ์ : A มีค่าเท่ากับ 1.4 |
Mod
|
หารเอาเศษ
(Modulo) | A = 7 Mod 5 ผลลัพธ์ : A มีค่าเท่ากับ 2 |
^
|
ยกกำลัง
| A = 2 ^ 10 ผลลัพธ์ : A มีค่าเท่ากับ 1024 |
ตัวดำเนินการเปรียบเทียบมีอะไรบ้าง?
ตัวดำเนินการเปรียบเทียบ (Comparison Operator) คือตัวดำเนินการที่ใช้เปรียบเทียบค่าทั้งสองฝั่ง ผลลัพธ์ที่ได้จะออกมาเป็นค่าความจริง ตัวดำเนินการประเภทนี้ ได้แก่
ตัวดำเนินการ
|
คำอธิบาย
|
ตัวอย่างวิธีใช้
|
---|---|---|
==
|
เท่ากับ (เปรียบเทียบ)
| ถ้า 3 == 4 แล้ว ผลลัพธ์ : เท็จ |
!=
|
ไม่เท่ากับ
| ถ้า 12 != -14 แล้ว ผลลัพธ์ : จริง |
<
|
น้อยกว่า
| ถ้า 7 < 21 แล้ว ผลลัพธ์ : จริง |
<=
|
น้อยกว่าหรือเท่ากับ
| ถ้า 0 <= 0 แล้ว ผลลัพธ์ : จริง |
>
|
มากกว่า
| ถ้า -128 > 6 แล้ว ผลลัพธ์ : เท็จ |
>=
|
มากกว่าหรือเท่ากับ
| ถ้า 64 >= 97 แล้ว ผลลัพธ์ : เท็จ |
ตัวดำเนินการทางตรรกศาสตร์มีอะไรบ้าง?
ตัวดำเนินการทางตรรกศาสตร์ (Logical Operator) คือตัวดำเนินการที่ใช้ดำเนินการกับค่าความจริง ค่าที่ใส่เข้าไปจะเป็นนิพจน์ที่มีตัวดำเนินการเปรียบเทียบ ค่าความจริง หรือตัวแปรเก็บค่าความจริงก็ได้ ผลลัพธ์ที่ได้จะออกมาเป็นค่าความจริง ตัวดำเนินการประเภทนี้ ได้แก่
***หมายเหตุ : แทนจริงเป็น T และแทนเท็จเป็น F เพื่อความง่ายในการอ่าน***
ตัวดำเนินการ
|
คำอธิบาย
|
แจกแจงกรณี
|
ตัวอย่างวิธีใช้
|
---|---|---|---|
และ (And)
|
ผลลัพธ์จะเป็นจริงก็ต่อเมื่อค่าทุกค่าเป็นจริง
นอกจากนั้นผลลัพธ์จะเป็นเท็จ
|
T และ T: ได้ T
T และ F: ได้ F
F และ T: ได้ F
F และ F: ได้ F
| จริง และ (6 == 10) ผลลัพธ์ : เท็จ |
หรือ (Or)
|
ผลลัพธ์จะเป็นจริงก็ต่อเมื่อมีค่าอย่างน้อยหนึ่งค่าเป็นจริง
นอกจากนั้นผลลัพธ์จะเป็นเท็จ
|
T หรือ T: ได้ T
T หรือ F: ได้ T
F หรือ T: ได้ T
F หรือ F: ได้ F
| (2 >= -3) หรือ (1.59 > 1.61) ผลลัพธ์ : จริง |
นิเสธ (Not)
|
ทำให้ค่าความจริงเป็นตรงกันข้าม
|
นิเสธ T: ได้ F
นิเสธ F: ได้ T
| ให้ A = จริง; A = นิเสธ A ผลลัพธ์ : เท็จ |
ลำดับของตัวดำเนินการเรียงอย่างไร?
เมื่อมีตัวดำเนินการหลายตัวอยู่ในนิพจน์เดียวกัน เราต้องทำตามลำดับของตัวดำเนินการ (Operator Precedence) โดยเริ่มทำจากตัวดำเนินการที่มีลำดับสูงไปหาตัวดำเนินการที่มีลำดับต่ำ ถ้ามีตัวดำเนินการที่อยู่ในลำดับเดียวกันหลายตัว ให้ทำจากซ้ายไปขวา ลำดับของตัวดำเนินการเหล่านี้เป็นลำดับสากลที่เหมือนกันในทุกภาษาอุปกรณ์และเกมเอนจิน เพื่อให้ได้ผลลัพธ์ที่เหมือนกัน แต่ในทางปฏิบัติการเขียนนิพจน์ที่มีตัวดำเนินการหลายตัว ผู้อ่านควรเขียนวงเล็บกำกับตัวดำเนินการที่ทำก่อน เพื่อความสะดวกในการอ่านนิพจน์ ลำดับของตัวดำเนินการเรียงจากสูงไปต่ำ ดังนี้
ลำดับที่
|
ตัวดำเนินการ
|
คำอธิบาย
|
---|---|---|
1 (สูงที่สุด)
|
() []
|
วงเล็บ (เราจะไม่ใช้เครื่องหมาย {} เป็นตัวดำเนินการ)
|
2
|
นิเสธ - (Unary)
|
ตัวดำเนินการตรงข้าม ได้แก่ "นิเสธ" และเครื่องหมาย "-" หน้าตัวเลข เช่น -3, -10 (จำนวนลบ)
|
3
|
^ Root
|
ยกกำลัง ถอดราก
|
4
|
* / Mod
|
คูณ หาร หารเอาเศษ
|
5
|
+ -
|
บวก ลบ
|
6
|
< <= > >=
|
ตัวดำเนินการเปรียบเทียบ น้อยกว่า มากกว่า
|
7
|
== !=
|
ตัวดำเนินการเปรียบเทียบ เท่ากับ ไม่เท่ากับ
|
8
|
และ
|
และ
|
9
|
หรือ
|
หรือ
|
10 (ต่ำที่สุด)
|
=
|
เท่ากับ นำค่าที่อยู่ฝั่งขวาไปไว้ในฝั่งซ้าย
|
ตัวอย่างที่ 1: A = 13 + 6 * 10 / 2
วิธีคิด : A = [13 + ((6 * 10) / 2)]
A = [13 + (60 / 2)]
A = [13 + 30]
ผลลัพธ์ : A = 43
ตัวอย่างที่ 2: B = 14 * (6 + 3 - 1) / 2
วิธีคิด : B = [14 * ((6 + 3) - 1)] / 2
B = [14 * (9 - 1)] / 2
B = [14 * 8] / 2
B = 112 / 2
ผลลัพธ์ : B = 56
ตัวอย่างที่ 3: C = 45.12 < 56.07 และ N == N หรือ 8 * 4 ^ -2 >= 7 + 9 และ X - 6 > X
วิธีคิด : C = [[(45.12 < 56.07) และ (N == N)] หรือ [(8 * (4 ^ (-2)) >= (7 - 9)) และ ((X - 6) > X)]
C = [[(45.12 < 56.07) และ (N == N)] หรือ [((8 * 0.0625) >= (-2)) และ ((X - 6) > X)]
C = [[(45.12 < 56.07) และ (N == N)] หรือ [(0.5 >= (-2)) และ ((X - 6) > X)]
C = [[จริง และ จริง] หรือ [เท็จ และ เท็จ]
C = [จริง หรือ เท็จ
ผลลัพธ์ : C = จริง
ในบทนี้เราได้เรียนรู้เกี่ยวกับตัวแปร นิพจน์ และตัวดำเนินการพื้นฐานที่จำเป็นต้องทราบในการเขียนอัลกอริทึมกันแล้ว สำหรับผู้อ่านที่ไม่ชอบวิชาคณิตศาสตร์อาจรู้สึกเบื่อกับเนื้อหาในบทนี้ ผู้เขียนขอบอกเลยว่าเนื้อหาในบทนี้เป็นเนื้อหาสำคัญมากที่จะใช้ในการพัฒนาเกม ผู้อ่านต้องอดทนทำความเข้าใจกับเนื้อหาในบทนี้ให้ได้ อย่างในบทที่แล้วเราได้มีการใช้ตัวแปรและนิพจน์อย่างง่าย ๆ กันไปบ้างแล้ว เช่น ใช้นิพจน์ในเงื่อนไขการวนลูป, ใช้ตัวแปรนับจำนวนครั้งที่วนลูป, ใช้ตัวแปรรับข้อมูลจากคีย์บอร์ด, ใช้ตัวแปรคำนวณเลข เนื้อหาในบทนี้จึงเป็นเนื้อหาอย่างละเอียดเกี่ยวกับตัวแปร นิพจน์ และตัวดำเนินการที่สำคัญที่จะใช้เขียนอัลกอริทึม
เครื่องหมายที่ใช้แทนตัวดำเนินการในแต่ละภาษาอุปกรณ์และเกมเอนจินอาจแตกต่างกันออกไป และในภาษาอุปกรณ์หรือเกมเอนจินจริง ๆ อาจมีตัวแปรและตัวดำเนินการแบบอื่นอีก เช่น ตัวแปรแบบค่าคงที่ ตัวแปรแบบอาร์เรย์ ตัวดำเนินการแบบบิต เป็นต้น เนื้อหาในบทความบทนี้จะสอนเพียงแค่ตัวแปร นิพจน์ และตัวดำเนินการพื้นฐานที่จำเป็นในการพัฒนาเกมเท่านั้น สำหรับเนื้อหาที่ลึกกว่านี้ผู้อ่านต้องไปศึกษาเพิ่มเติมจากบทความที่สอนภาษาอุปกรณ์หรือเกมเอนจินตัวนั้นเอง
สำหรับผู้อ่านที่ไม่ชอบวิชาคณิตศาสตร์ผู้เขียนขอบอกว่า "คณิตศาสตร์ที่ใช้ในการพัฒนาเกมมีแค่พวกบวกลบคูณหารและตรรกศาสตร์เบื้องต้นเท่านั้น" เป็นเนื้อหาง่าย ๆ ที่แม้แต่เด็กมัธยมต้นก็เข้าใจได้ไม่ยาก เนื้อหาในบทนี้เป็นเนื้อหาเชิงทฤษฎี เนื้อหาจึงอาจจะยากหน่อย นิพจน์ต่าง ๆ อาจจะดูยาวและซับซ้อน แต่เมื่อถึงเวลาปฏิบัติจริงส่วนใหญ่จะเป็นนิพจน์ง่าย ๆ เช่น A = B + C, X = X + 1 เป็นต้น นิพจน์ยาก ๆ ยาว ๆ จะไม่ค่อยได้เจอบ่อยนักเท่าไร ดังนั้นผู้อ่านไม่ต้องกังวลหรือท้อใจจนเลิกพัฒนาเกมไปก่อน แต่สำหรับผู้อ่านที่อยากจะพัฒนาเกมสามมิติแล้วล่ะก็ ขอให้ผู้อ่านทำใจเผื่อไว้ได้เลย คณิตศาสตร์กับฟิสิกส์มาเต็มแน่นอน ทั้งเมตริกซ์ เวกเตอร์ ตรีโกณมิติ แรงและการเคลื่อนที่ โมเมนตัม ฯลฯ เกมเอนจินอาจจะพอช่วยได้อยู่บ้าง แต่ก็ควรจะศึกษาเรื่องพวกนี้ไว้อยู่ดี ส่วนผู้อ่านที่อยากจะสร้างเกมสองมิตินั้นไม่ต้องกังวลไป อย่างที่บอกไปแล้วว่ามีแค่พวกบวกลบคูณหารและตรรกศาสตร์เบื้องต้นอย่าง "และ", "หรือ", "นิเสธ" เท่านั้น ไม่ได้ลงลึกอะไรมาก
ก่อนจะลาไปในบทนี้ผู้เขียนขอให้ผู้อ่านมีกำลังใจในการพัฒนาเกมต่อไป เมื่อใดที่ท้อให้นึกถึงตอนที่เราเพิ่งจะเริ่มเรียนการพัฒนาเกม นึกถึงตอนที่เราอยากพัฒนาเกมใหม่ ๆ เข้าไว้ ความฝันในตอนนั้นเปล่งประกายสวยงาม อย่าให้ความยากลำบากและความเหน็ดเหนื่อยมาทำลายความฝันของเราได้ ผู้อ่านสามารถติดตามบทความ "เรียนสร้างเกมกับมิกิจัง" บทใหม่ได้ทุกวันศุกร์ แล้วพบกันใหม่บทต่อไปค่ะ ขอบคุณค่ะ
"It is difficult to say what is impossible, for the dream of yesterday is the hope of today and the reality of tomorrow." - Robert H. Schuller
"มันเป็นสิ่งที่ยากที่จะบอกว่าอะไรเป็นไปไม่ได้ ความฝันของเมื่อวานอาจเป็นความหวังในวันนี้ และอาจเป็นความจริงได้ในวันพรุ่งนี้"
ช่างสังเกตท้ายบท
ถ้าผู้อ่านคนไหนเป็นคนช่างสังเกต อาจสงสัยว่า "ในบทก่อนหน้าผู้เขียนใช้คำว่า 'อุปกรณ์อ่านคำสั่ง' แต่ทำไมในบทนี้ถึงใช้คำว่า 'โปรแกรมอ่านคำสั่ง'?" สาเหตุที่ผู้เขียนใช้คำไม่เหมือนกันเพราะมุมมองในแต่ละบทไม่เหมือนกัน ถ้าบอกว่า "อุปกรณ์อ่านคำสั่ง" จะเป็นการมองในมุมมองของฮาร์ดแวร์ (Hardware) แต่ถ้าบอกว่า "โปรแกรมอ่านคำสั่ง" จะเป็นการมองในมุมมองของซอฟต์แวร์ (Software) ในบทที่ 1 มีเนื้อหาเกี่ยวกับเรื่องหลักการทำงานของเกม เรามองว่า "เกมทำงานบนฮาร์ดแวร์" ดังนั้นจึงใช้คำว่า "อุปกรณ์" ส่วนในบทนี้มีเนื้อหาเกี่ยวกับนิพจน์ เรามองว่า "ตัวแปร นิพจน์ และตัวดำเนินการต่าง ๆ อยู่บนซอฟต์แวร์" ซึ่งซอฟต์แวร์นั้นก็คือเกมของเรานั่นเอง ดังนั้นจึงใช้คำว่า "โปรแกรม" (ในมุมมองของซอฟต์แวร์เราจะไม่มองว่าเป็นแอพพลิเคชัน เนื่องจากเรากำลังมองชุดของคำสั่งอยู่ ซึ่งชุดของคำสั่งก็คือโปรแกรมนั่นเอง)
แบบฝึกหัดประจำบทที่ 4
แบบฝึกหัดที่ 4.1 จงบอกว่าตัวแปรที่เก็บค่าต่อไปนี้ควรเป็นตัวแปรประเภทใดจึงจะเหมาะสมที่สุด- MyName = "Mikichan"
- HisAge = 5
- HerHeight = 162.5
- YourGender = "Female"
- Do_You_Have_Children = จริง
- FavouriteCharacter = "A"
- HowManyFriendsDoYouHave = 3
- RandomOneNumber = -720.54
- WillYouMarryMe = เท็จ
- FirstCharacter_Thailand = "T"
- Answer = 7 * 6 + 12 / 3 - 1 - 2.41
- Calculate = (4 + 3) ^ 2 / 5 + (-0.75)
- Easy_One = นิเสธ (1 + 2 + 3 == 1 * 2 * 3) หรือ 10 ^ 3 < 2 ^ 10
- Beware = 48.22 / 2 < (36.11 + 14) / 2 หรือ 1 + 2 <= 6 * 2 / 4 และ B != B
- Variable = X < X + 3 และ 6 + Y * 0 == 3 + 2 + 1 หรือ Z * 1 <= Z + (-14 / 6)
ไม่มีความคิดเห็น:
แสดงความคิดเห็น