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/ko/6-space-game/1-introduction/assignment.md

93 lines
5.2 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# 게임 목업: 디자인 패턴 적용하기
## 과제 개요
새롭게 배운 디자인 패턴 지식을 활용하여 간단한 게임 프로토타입을 만들어보세요! 이 과제는 아키텍처 패턴(상속 또는 컴포지션)과 수업에서 배운 퍼블리시/서브스크라이브(pub/sub) 통신 시스템을 연습하는 데 도움이 될 것입니다.
## 지침
이번 수업에서 배운 디자인 패턴을 보여주는 간단한 게임 표현을 만드세요. 게임은 기능적이어야 하지만 복잡한 그래픽이 필요하지 않습니다 — 기본 아키텍처와 통신 패턴에 집중하세요.
### 요구 사항
**아키텍처 패턴 선택:**
- **옵션 A**: 클래스 기반 상속 사용 (`GameObject` → `Movable``Hero` 예시처럼)
- **옵션 B**: 컴포지션 사용 (혼합 동작을 가진 팩토리 함수 방식처럼)
**통신 구현:**
- 퍼블리시/서브스크라이브 메시징을 위한 `EventEmitter` 클래스 포함
- 적어도 2~3가지 메시지 타입 설정 (`PLAYER_MOVE`, `ENEMY_SPAWN`, `SCORE_UPDATE` 등)
- 사용자 입력(키보드/마우스)을 이벤트 시스템을 통해 게임 이벤트에 연결
**포함해야 할 게임 요소:**
- 최소 한 명의 플레이어 조종 캐릭터
- 최소 한 개 이상의 다른 게임 객체 (적, 수집물, 환경 요소 등)
- 객체 간 기본 상호작용 (충돌, 수집, 통신 등)
### 제안 게임 아이디어
**고려할 수 있는 간단한 게임:**
- **뱀 게임** 뱀 몸통이 머리를 따라가고 음식이 무작위로 생성됨
- **퐁 변형** 패들이 입력에 반응하고 공이 벽에 튕김
- **수집 게임** 플레이어가 아이템을 모으면서 장애물을 피함
- **타워 디펜스 기초** 타워가 움직이는 적을 감지하고 공격함
### 코드 구조 가이드라인
```javascript
// 예시 시작 구조
const Messages = {
// 여기에서 게임 메시지를 정의하세요
};
class EventEmitter {
// 이벤트 시스템 구현
}
// 클래스 기반 또는 컴포지션 접근법 중 선택하세요
// 클래스 기반 예시:
class GameObject { /* base properties */ }
class Player extends GameObject { /* player-specific behavior */ }
// 또는 컴포지션 예시:
const gameObject = { /* base properties */ };
const movable = { /* movement behavior */ };
function createPlayer() { /* combine behaviors */ }
```
### 구현 테스트하기
**코드가 잘 작동하는지 확인하려면:**
- 이벤트가 발생했을 때 객체들이 움직이거나 상태가 변하는지 테스트
- 여러 객체가 동일한 이벤트에 반응하는지 확인
- 기존 코드를 수정하지 않고 새로운 동작을 추가할 수 있는지 점검
- 키보드/마우스 입력이 게임 이벤트를 적절히 트리거하는지 확인
## 제출 가이드라인
**제출물에는 다음이 포함되어야 합니다:**
1. 게임 구현이 담긴 **JavaScript 파일(들)**
2. 게임 실행 및 테스트용 **HTML 파일**(간단해도 무방)
3. 어떤 패턴을 선택했고 왜 선택했는지 설명하는 **주석**
4. 메시지 타입과 그 기능에 대한 **간단한 문서**
## 평가 기준
| 기준 | 뛰어남 (3점) | 적절함 (2점) | 개선 필요 (1점) |
|----------|---------------------|---------------------|------------------------------|
| **아키텍처 패턴** | 상속 또는 컴포지션을 명확한 클래스/객체 계층 구조로 정확히 구현 | 선택한 패턴을 약간의 문제나 일관성 없이 사용 | 패턴 사용 시도했으나 구현에 심각한 문제 있음 |
| **퍼블리시/서브스크라이브 구현** | EventEmitter가 여러 메시지 타입과 올바른 이벤트 흐름으로 잘 작동함 | 기본 퍼블리시/서브스크라이브 시스템 작동하나 이벤트 처리에 다소 미흡 | 이벤트 시스템 있으나 신뢰성 있게 작동하지 않음 |
| **게임 기능성** | 최소 세 개 이상의 상호작용하는 요소들이 이벤트로 통신함 | 두 개의 상호작용 요소와 기본 이벤트 통신 구현 | 한 요소만 반응하거나 기본 상호작용만 있음 |
| **코드 품질** | 깔끔하고 잘 주석 처리된 코드, 논리적 구성과 최신 JavaScript 사용 | 대체로 잘 정리된 코드와 적절한 주석 | 작동은 하나 조직력이나 주석 부족 |
**보너스 점수:**
- 패턴의 흥미로운 활용을 보여주는 창의적 게임 메커니즘
- 키보드 및 마우스 등 다중 입력 방식 지원
- 새로운 기능 확장이 용이한 확장 가능한 아키텍처
---
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**면책 조항**:
이 문서는 AI 번역 서비스 [Co-op Translator](https://github.com/Azure/co-op-translator)를 사용하여 번역되었습니다. 정확성을 위해 노력하고 있으나, 자동 번역에는 오류나 부정확한 내용이 포함될 수 있음을 유의해 주십시오. 원본 문서의 원어가 권위 있는 출처로 간주되어야 합니다. 중요한 정보의 경우 전문적인 인간 번역을 권장합니다. 본 번역 사용으로 인해 발생하는 어떠한 오해나 잘못된 해석에 대해서도 책임을 지지 않습니다.
<!-- CO-OP TRANSLATOR DISCLAIMER END -->