21 เมษายน 2560

[สอนสร้างเกม] เรียนสร้างเกมกับมิกิจัง : บทที่ 4 นิพจน์ (Expression)

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

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


ตัวแปรคืออะไร?

ตัวแปร (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 จงบอกว่าตัวแปรที่เก็บค่าต่อไปนี้ควรเป็นตัวแปรประเภทใดจึงจะเหมาะสมที่สุด
  1. MyName = "Mikichan"
  2. HisAge = 5
  3. HerHeight = 162.5
  4. YourGender = "Female"
  5. Do_You_Have_Children = จริง
  6. FavouriteCharacter = "A"
  7. HowManyFriendsDoYouHave = 3
  8. RandomOneNumber = -720.54
  9. WillYouMarryMe = เท็จ
  10. FirstCharacter_Thailand = "T"

แบบฝึกหัดที่ 4.2 จงบอกผลลัพธ์ของนิพจน์ต่อไปนี้
  1. Answer = 7 * 6 + 12 / 3 - 1 - 2.41
  2. Calculate = (4 + 3) ^ 2 / 5 + (-0.75)
  3. Easy_One = นิเสธ (1 + 2 + 3 == 1 * 2 * 3) หรือ 10 ^ 3 < 2 ^ 10
  4. Beware = 48.22 / 2 < (36.11 + 14) / 2 หรือ 1 + 2 <= 6 * 2 / 4 และ B != B
  5. Variable = X < X + 3 และ 6 + Y * 0 == 3 + 2 + 1 หรือ Z * 1 <= Z + (-14 / 6)

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

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