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

100 lines
10 KiB

<!--
CO_OP_TRANSLATOR_METADATA:
{
"original_hash": "c8fc39a014d08247c082878122e2ba73",
"translation_date": "2025-10-23T21:21:19+00:00",
"source_file": "6-space-game/1-introduction/assignment.md",
"language_code": "th"
}
-->
# สร้างเกมจำลอง: ใช้รูปแบบการออกแบบ
## ภาพรวมของงาน
นำความรู้ใหม่เกี่ยวกับรูปแบบการออกแบบมาใช้โดยการสร้างต้นแบบเกมง่ายๆ! งานนี้จะช่วยให้คุณฝึกฝนทั้งรูปแบบสถาปัตยกรรม (การสืบทอดหรือการประกอบ) และระบบการสื่อสาร pub/sub ที่คุณได้เรียนรู้ในบทเรียน
## คำแนะนำ
สร้างตัวแทนเกมง่ายๆ ที่แสดงให้เห็นถึงรูปแบบการออกแบบจากบทเรียนนี้ เกมของคุณควรใช้งานได้ แต่ไม่จำเป็นต้องมีกราฟิกที่ซับซ้อน \u2013 เน้นที่สถาปัตยกรรมพื้นฐานและรูปแบบการสื่อสาร
### ข้อกำหนด
**เลือกแบบสถาปัตยกรรมของคุณ:**
- **ตัวเลือก A**: ใช้การสืบทอดแบบคลาส (เช่นตัวอย่าง `GameObject``Movable``Hero`)
- **ตัวเลือก B**: ใช้การประกอบ (เช่นวิธีการฟังก์ชันโรงงานที่มีพฤติกรรมผสม)
**การสื่อสาร:**
- **รวม** คลาส `EventEmitter` สำหรับการส่งข้อความแบบ pub/sub
- **ตั้งค่า** ประเภทข้อความอย่างน้อย 2-3 ประเภท (เช่น `PLAYER_MOVE`, `ENEMY_SPAWN`, `SCORE_UPDATE`)
- **เชื่อมต่อ** การป้อนข้อมูลของผู้ใช้ (คีย์บอร์ด/เมาส์) กับเหตุการณ์ในเกมผ่านระบบเหตุการณ์
**องค์ประกอบของเกมที่ต้องมี:**
- ตัวละครที่ผู้เล่นควบคุมได้อย่างน้อยหนึ่งตัว
- วัตถุเกมอื่นอย่างน้อยหนึ่งอย่าง (ศัตรู, สิ่งที่เก็บได้, หรือองค์ประกอบสิ่งแวดล้อม)
- การโต้ตอบพื้นฐานระหว่างวัตถุ (การชนกัน, การเก็บ, หรือการสื่อสาร)
### ไอเดียเกมที่แนะนำ
**เกมง่ายๆ ที่ควรพิจารณา:**
- **เกมงู** \u2013 ส่วนของงูตามหัว งูจะกินอาหารที่เกิดขึ้นแบบสุ่ม
- **เกมปิงปอง** \u2013 แป้นรับการป้อนข้อมูล ลูกบอลเด้งออกจากกำแพง
- **เกมเก็บของ** \u2013 ผู้เล่นเคลื่อนที่ไปรอบๆ เพื่อเก็บไอเท็มและหลบหลีกสิ่งกีดขวาง
- **เกมป้องกันฐาน** \u2013 หอคอยตรวจจับและยิงศัตรูที่เคลื่อนที่
### แนวทางโครงสร้างโค้ด
```javascript
// 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](https://github.com/Azure/co-op-translator) แม้ว่าเราจะพยายามให้การแปลมีความถูกต้อง แต่โปรดทราบว่าการแปลโดยอัตโนมัติอาจมีข้อผิดพลาดหรือความไม่ถูกต้อง เอกสารต้นฉบับในภาษาดั้งเดิมควรถือเป็นแหล่งข้อมูลที่เชื่อถือได้ สำหรับข้อมูลที่สำคัญ ขอแนะนำให้ใช้บริการแปลภาษามืออาชีพ เราจะไม่รับผิดชอบต่อความเข้าใจผิดหรือการตีความผิดที่เกิดจากการใช้การแปลนี้