อัปเกรดเกมสู่ระดับมือโปร!
(เพิ่มเมนูและฉากจบ)
(เพิ่มเมนูและฉากจบ)
ยินดีต้อนรับสู่บทเรียนการอัปเกรดเกม! ตอนนี้เรามีเกมเก็บของที่เล่นได้แล้ว แต่เกมที่ดีต้องมี "จุดเริ่มต้น" และ "จุดจบ" ของเกม
ในบทนี้ เราจะทบทวนเทคนิคสำคัญที่จะเปลี่ยนโปรเจกต์ธรรมดาให้กลายเป็นเกมที่สมบูรณ์แบบ มีทั้งหน้าเมนูหลัก หน้าวิธีเล่น และฉากแพ้-ชนะ ด้วยการใช้คำสั่ง "การกระจายสาร (Broadcast)" เพื่อบอกให้ส่วนต่างๆ ของเกมรู้ว่าตอนนี้ควรแสดงผลหน้าจอไหน
ก่อนจะไปดูโค้ด เราต้องเข้าใจ 2 เรื่องนี้ก่อนครับ ถ้าเข้าใจแล้ว การสร้างเกมจะง่ายขึ้นมาก!
1. สถานะของเกม (Game States)
เกมไม่ได้มีแค่ฉากเดียว แต่มีหลาย "สถานะ" เราใช้ ฉากหลัง (Backdrops) เพื่อบอกผู้เล่นว่าตอนนี้เกมอยู่ในสถานะไหน:
🟢 สถานะรอ: หน้าเมนู (Menu), หน้าวิธีเล่น (HowTo) -> ผู้เล่นยังไม่ได้เริ่มเล่น
🟡 สถานะกำลังเล่น: ฉากในเกม (GameStage) -> ผู้เล่นกำลังบังคับตัวละคร
🔴 สถานะจบเกม: หน้าแพ้ (GameOver), หน้าชนะ (Winner) -> เกมสิ้นสุดแล้ว
2. การกระจายสาร (Broadcast) - "โทรโข่งของเกม"
นี่คือคำสั่งที่สำคัญที่สุดในบทเรียนนี้! ลองนึกภาพว่าในเกมมี "โทรโข่ง" อยู่ตรงกลาง เมื่อมีเหตุการณ์หนึ่งเกิดขึ้น (เช่น กดปุ่ม Start) โทรโข่งจะประกาศข้อความออกไป (Broadcast "StartGame")
ตัวละครทุกตัวในเกมจะได้ยินข้อความนี้พร้อมกัน
แต่ตัวละครแต่ละตัวจะมีปฏิกิริยาตอบสนองต่างกัน เช่น:
เวที (Stage): ได้ยิน "StartGame" -> เปลี่ยนฉากหลังเป็นฉากป่า
ตัวเอก (Player): ได้ยิน "StartGame" -> แสดงตัวออกมา แล้วเริ่มขยับ
📌 ขั้นตอนที่ 1: เตรียมฉากหลัง (Backdrops)
ต้องมีให้ครบ 5 ฉาก เพื่อรองรับทุกสถานะ:
Menu: หน้าแรกสุด มีชื่อเกม
HowTo: หน้าบอกวิธีเล่น
GameStage: ฉากสำหรับเล่นเกมจริง
GameOver: ฉากเมื่อแพ้ (คะแนนติดลบ)
Winner: ฉากเมื่อชนะ (คะแนนถึงเป้าหมาย)
📌 ขั้นตอนที่ 2: สร้างปุ่มและส่งสาร (Buttons & Broadcast)
ปุ่มต่างๆ มีหน้าที่แค่ "ส่งสาร" เมื่อถูกคลิก:
🔥 หน้าแรกสุด(Menu) ที่มีชื่อเกม ประกอบด้วยปุ่มดังนี้
ปุ่ม Start: เมื่อถูกคลิก -> ส่งสาร "StartGame"
ปุ่ม How To: เมื่อถูกคลิก -> ส่งสาร "ShowHowTo"
🔥 หน้าบอกวิธีเล่น(HowTo) ที่มีชื่อเกม ประกอบด้วยปุ่มดังนี้
ปุ่ม Back (ในหน้าวิธีเล่น): เมื่อถูกคลิก -> ส่งสาร "BackToMenu"
📌 ขั้นตอนที่ 3: เวทีคือผู้จัดการ (Stage Manager)
เวที (Stage) คือผู้รับสารที่ดีที่สุด เขียนโค้ดที่เวทีให้คอยฟังสารต่างๆ แล้วเปลี่ยนฉากหลังให้ตรงกัน:
เมื่อธงเขียวเริ่ม: เปลี่ยนเป็น Menu
ได้รับสาร "StartGame": เปลี่ยนเป็น GameStage
(และอื่นๆ ตามสารที่ได้รับ)
📌 ขั้นตอนที่ 4: ซ่อน/แสดง ตัวละครในเกม (Hide/Show)
ข้อควรระวัง! ตัวละครในเกม (แมว, แอปเปิ้ล, ก้อนหิน) ต้องไม่โผล่มาในหน้าเมนู
โค้ดเดิม: เมื่อธงเขียวถูกคลิก -> ทำงานเลย ❌
โค้ดใหม่:
เมื่อธงเขียวถูกคลิก -> ซ่อน (Hide) ทันที ✅
เมื่อได้รับสาร [StartGame] -> แสดง (Show) แล้วค่อยเริ่มทำงาน ✅
📌 ขั้นตอนที่ 5: กรรมการตัดสิน (Game Manager)
สร้างสไปรต์เปล่าๆ ขึ้นมา 1 ตัว เพื่อทำหน้าที่เป็นกรรมการ คอยตรวจสอบคะแนนตลอดเวลา (Forever Loop): และต้องซ่อนสไปรต์ตัวนี้ไว้
ถ้า Score < 0 -> เปลี่ยนฉากเป็น GameOver และสั่งหยุดทั้งหมด (Stop All)
ถ้า Score > 10 -> เปลี่ยนฉากเป็น Winner และสั่งหยุดทั้งหมด (Stop All)
ตั้งชื่อสารให้ชัดเจน: ใช้ชื่อที่อ่านแล้วรู้เรื่องทันที เช่น StartGame, ShowHowTo อย่าตั้งชื่อว่า message1, message2 เพราะจะงงภายหลัง
ลำดับการทำงาน: จำไว้ว่า "ธงเขียว" คือการเตรียมความพร้อม (ซ่อนตัวละคร, รีเซ็ตคะแนน, โชว์หน้าเมนู) ส่วนเกมจริงๆ จะเริ่มเมื่อได้รับสาร "StartGame" เท่านั้น