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.
100 lines
10 KiB
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) แม้ว่าเราจะพยายามให้การแปลมีความถูกต้อง แต่โปรดทราบว่าการแปลโดยอัตโนมัติอาจมีข้อผิดพลาดหรือความไม่ถูกต้อง เอกสารต้นฉบับในภาษาดั้งเดิมควรถือเป็นแหล่งข้อมูลที่เชื่อถือได้ สำหรับข้อมูลที่สำคัญ ขอแนะนำให้ใช้บริการแปลภาษามืออาชีพ เราจะไม่รับผิดชอบต่อความเข้าใจผิดหรือการตีความผิดที่เกิดจากการใช้การแปลนี้ |