You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Web-Dev-For-Beginners/translations/th/6-space-game/1-introduction/assignment.md

10 KiB

สร้างเกมจำลอง: ใช้รูปแบบการออกแบบ

ภาพรวมของงาน

นำความรู้ใหม่เกี่ยวกับรูปแบบการออกแบบมาใช้โดยการสร้างต้นแบบเกมง่ายๆ! งานนี้จะช่วยให้คุณฝึกฝนทั้งรูปแบบสถาปัตยกรรม (การสืบทอดหรือการประกอบ) และระบบการสื่อสาร pub/sub ที่คุณได้เรียนรู้ในบทเรียน

คำแนะนำ

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

ข้อกำหนด

เลือกแบบสถาปัตยกรรมของคุณ:

  • ตัวเลือก A: ใช้การสืบทอดแบบคลาส (เช่นตัวอย่าง GameObjectMovableHero)
  • ตัวเลือก B: ใช้การประกอบ (เช่นวิธีการฟังก์ชันโรงงานที่มีพฤติกรรมผสม)

การสื่อสาร:

  • รวม คลาส EventEmitter สำหรับการส่งข้อความแบบ pub/sub
  • ตั้งค่า ประเภทข้อความอย่างน้อย 2-3 ประเภท (เช่น PLAYER_MOVE, ENEMY_SPAWN, SCORE_UPDATE)
  • เชื่อมต่อ การป้อนข้อมูลของผู้ใช้ (คีย์บอร์ด/เมาส์) กับเหตุการณ์ในเกมผ่านระบบเหตุการณ์

องค์ประกอบของเกมที่ต้องมี:

  • ตัวละครที่ผู้เล่นควบคุมได้อย่างน้อยหนึ่งตัว
  • วัตถุเกมอื่นอย่างน้อยหนึ่งอย่าง (ศัตรู, สิ่งที่เก็บได้, หรือองค์ประกอบสิ่งแวดล้อม)
  • การโต้ตอบพื้นฐานระหว่างวัตถุ (การชนกัน, การเก็บ, หรือการสื่อสาร)

ไอเดียเกมที่แนะนำ

เกมง่ายๆ ที่ควรพิจารณา:

  • เกมงู \u2013 ส่วนของงูตามหัว งูจะกินอาหารที่เกิดขึ้นแบบสุ่ม
  • เกมปิงปอง \u2013 แป้นรับการป้อนข้อมูล ลูกบอลเด้งออกจากกำแพง
  • เกมเก็บของ \u2013 ผู้เล่นเคลื่อนที่ไปรอบๆ เพื่อเก็บไอเท็มและหลบหลีกสิ่งกีดขวาง
  • เกมป้องกันฐาน \u2013 หอคอยตรวจจับและยิงศัตรูที่เคลื่อนที่

แนวทางโครงสร้างโค้ด

// Example starting structure
const Messages = {
  // Define your game messages here
};

class EventEmitter {
  // Your event system implementation
}

// Choose either class-based OR composition approach
// Class-based example:
class GameObject { /* base properties */ }
class Player extends GameObject { /* player-specific behavior */ }

// OR Composition example:
const gameObject = { /* base properties */ };
const movable = { /* movement behavior */ };
function createPlayer() { /* combine behaviors */ }

การทดสอบการใช้งาน

ตรวจสอบว่าโค้ดของคุณทำงานโดย:

  • ทดสอบ ว่าวัตถุเคลื่อนที่หรือเปลี่ยนแปลงเมื่อมีการเรียกเหตุการณ์
  • ยืนยัน ว่าวัตถุหลายตัวสามารถตอบสนองต่อเหตุการณ์เดียวกันได้
  • ตรวจสอบ ว่าคุณสามารถเพิ่มพฤติกรรมใหม่ได้โดยไม่ต้องแก้ไขโค้ดที่มีอยู่
  • ตรวจสอบ ว่าการป้อนข้อมูลจากคีย์บอร์ด/เมาส์เรียกเหตุการณ์ในเกมได้อย่างถูกต้อง

แนวทางการส่งงาน

งานที่คุณส่งควรประกอบด้วย:

  1. ไฟล์ JavaScript ที่มีการใช้งานเกมของคุณ
  2. ไฟล์ HTML เพื่อรันและทดสอบเกมของคุณ (สามารถเรียบง่ายได้)
  3. ความคิดเห็น อธิบายว่าคุณเลือกใช้รูปแบบใดและเหตุผล
  4. เอกสารสั้นๆ เกี่ยวกับประเภทข้อความและสิ่งที่พวกมันทำ

เกณฑ์การให้คะแนน

เกณฑ์ ดีเยี่ยม (3 คะแนน) เพียงพอ (2 คะแนน) ต้องปรับปรุง (1 คะแนน)
รูปแบบสถาปัตยกรรม ใช้การสืบทอดหรือการประกอบอย่างถูกต้องพร้อมลำดับชั้นคลาส/วัตถุที่ชัดเจน ใช้รูปแบบที่เลือกด้วยปัญหาเล็กน้อยหรือไม่สอดคล้องกัน พยายามใช้รูปแบบแต่การใช้งานมีปัญหาสำคัญ
การใช้งาน Pub/Sub EventEmitter ทำงานได้อย่างถูกต้องกับประเภทข้อความหลายประเภทและการไหลของเหตุการณ์ที่เหมาะสม ระบบ pub/sub พื้นฐานทำงานได้พร้อมการจัดการเหตุการณ์บางส่วน ระบบเหตุการณ์มีอยู่แต่ทำงานไม่เสถียร
ฟังก์ชันการทำงานของเกม มีองค์ประกอบที่โต้ตอบได้สามอย่างขึ้นไปที่สื่อสารผ่านเหตุการณ์ มีองค์ประกอบที่โต้ตอบได้สองอย่างพร้อมการสื่อสารเหตุการณ์พื้นฐาน มีองค์ประกอบหนึ่งที่ตอบสนองต่อเหตุการณ์หรือการโต้ตอบพื้นฐาน
คุณภาพของโค้ด โค้ดสะอาด มีความคิดเห็นที่ดี พร้อมการจัดระเบียบที่มีเหตุผลและใช้ JavaScript สมัยใหม่ โค้ดจัดระเบียบได้ดีโดยทั่วไปพร้อมความคิดเห็นที่เพียงพอ โค้ดทำงานได้แต่ขาดการจัดระเบียบหรือความคิดเห็นที่ชัดเจน

คะแนนโบนัส:

  • กลไกเกมที่สร้างสรรค์ ที่แสดงให้เห็นการใช้รูปแบบที่น่าสนใจ
  • วิธีการป้อนข้อมูลหลายแบบ (เหตุการณ์คีย์บอร์ดและเมาส์)
  • สถาปัตยกรรมที่ขยายได้ ซึ่งสามารถเพิ่มฟีเจอร์ใหม่ได้ง่าย

ข้อจำกัดความรับผิดชอบ:
เอกสารนี้ได้รับการแปลโดยใช้บริการแปลภาษา AI Co-op Translator แม้ว่าเราจะพยายามให้การแปลมีความถูกต้อง แต่โปรดทราบว่าการแปลโดยอัตโนมัติอาจมีข้อผิดพลาดหรือความไม่ถูกต้อง เอกสารต้นฉบับในภาษาดั้งเดิมควรถือเป็นแหล่งข้อมูลที่เชื่อถือได้ สำหรับข้อมูลที่สำคัญ ขอแนะนำให้ใช้บริการแปลภาษามืออาชีพ เราจะไม่รับผิดชอบต่อความเข้าใจผิดหรือการตีความผิดที่เกิดจากการใช้การแปลนี้