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/6-end-condition/assignment.md

164 lines
8.1 KiB

# 샘플 게임 만들기
## 과제 개요
이제 우주 게임에서 게임 종료 조건과 재시작 기능을 마스터했으니, 이 개념들을 완전히 새로운 게임 경험에 적용할 차례입니다. 다양한 종료 조건 패턴과 재시작 메커니즘을 보여주는 자신만의 게임을 설계하고 구축하세요.
이 과제는 게임 디자인에 대해 창의적으로 사고하는 동시에 배운 기술적 역량을 연습하도록 도전합니다. 다양한 승리 및 패배 시나리오를 탐구하고, 플레이어 진행을 구현하며, 흥미로운 재시작 경험을 만듭니다.
## 프로젝트 요구사항
### 핵심 게임 기능
게임에는 다음과 같은 필수 요소가 포함되어야 합니다:
**종료 조건 다양성**: 게임이 끝나는 최소 두 가지 방식을 구현하세요:
- **점수 기반 승리**: 플레이어가 목표 점수에 도달하거나 특정 아이템을 수집
- **목숨 기반 패배**: 플레이어가 모든 목숨 또는 체력을 잃음
- **목표 달성**: 모든 적 처치, 특정 아이템 수집 또는 목표 달성
- **시간 기반**: 설정된 시간 또는 카운트다운이 0이 되면 종료
**재시작 기능**:
- **게임 상태 초기화**: 이전 게임 객체 모두 제거 및 변수 초기화
- **시스템 재설정**: 새로운 플레이어 상태, 적, 목표와 함께 새로 시작
- **사용자 친화적 조작법**: 게임 재시작을 위한 명확한 안내 제공
**플레이어 피드백**:
- **승리 메시지**: 플레이어 성취를 축하하는 긍정적인 피드백
- **패배 메시지**: 재도전을 독려하는 용기 부여 메시지 제공
- **진행 표시기**: 현재 점수, 목숨, 목표 상태 표시
### 게임 아이디어 및 영감
아래 게임 컨셉 중 하나를 선택하거나 자신만의 게임을 만드세요:
#### 1. 콘솔 어드벤처 게임
전투 메커니즘이 포함된 텍스트 기반 모험 게임 만들기:
```
Hero> Strikes with broadsword - orc takes 3p damage
Orc> Hits with club - hero takes 2p damage
Hero> Kicks - orc takes 1p damage
Game> Orc is defeated - Hero collects 2 coins
Game> ****No more monsters, you have conquered the evil fortress****
```
**구현할 핵심 기능:**
- 다양한 공격 옵션이 있는 **턴제 전투**
- 플레이어와 적 모두의 **체력**
- 동전이나 아이템을 수집하는 **인벤토리 시스템**
- 난이도가 다른 **여러 유형의 적**
- 모든 적 처치 시 **승리 조건**
#### 2. 수집 게임
- **목표**: 장애물을 피하면서 특정 아이템 수집
- **종료 조건**: 목표 수집 횟수 달성하거나 목숨 모두 소진
- **진행**: 게임이 진행될수록 아이템 접근 난이도 증가
#### 3. 퍼즐 게임
- **목표**: 점차 어려워지는 퍼즐 해결
- **종료 조건**: 모든 레벨 완료 또는 이동/시간 소진
- **재시작**: 진행 상황 초기화 후 첫 레벨로 초기화
#### 4. 디펜스 게임
- **목표**: 적의 웨이브로부터 기지 보호
- **종료 조건**: 모든 웨이브 생존(승리) 또는 기지 파괴(패배)
- **진행**: 적 웨이브 난이도 및 수 증가
## 구현 지침
### 시작하기
1. **게임 디자인 계획**:
- 기본 게임 플레이 루프 스케치
- 종료 조건 명확히 정의
- 재시작 시 리셋할 데이터 식별
2. **프로젝트 구조 설정**:
```
my-game/
├── index.html
├── style.css
├── game.js
└── README.md
```
3. **핵심 게임 루프 작성**:
- 게임 상태 초기화
- 사용자 입력 처리
- 게임 로직 업데이트
- 종료 조건 확인
- 현재 상태 렌더링
### 기술적 요구사항
**최신 자바스크립트 사용**:
- 변수 선언에 `const``let` 사용
- 적절한 곳에 화살표 함수 활용
- 템플릿 리터럴, 구조 분해 할당 등 ES6+ 기능 적용
**이벤트 기반 아키텍처**:
- 사용자 상호작용에 대한 이벤트 핸들러 생성
- 이벤트를 통한 게임 상태 변경 구현
- 재시작 기능에 이벤트 리스너 활용
**깔끔한 코드 관행**:
- 단일 책임 함수 작성
- 설명적인 변수 및 함수 이름 사용
- 게임 로직과 규칙에 대한 주석 추가
- 논리적 구역으로 코드 구성
## 제출 요구사항
### 제출물
1. **완성된 게임 파일**: 게임 실행에 필요한 모든 HTML, CSS, JavaScript 파일
2. **README.md**: 다음 내용이 포함된 문서
- 게임 플레이 방법
- 구현된 종료 조건
- 재시작 방법
- 특별 기능 또는 메커니즘
3. **코드 주석**: 게임 로직과 알고리즘에 대한 명확한 설명
### 테스트 체크리스트
제출 전, 아래 항목을 확인하세요:
- [ ] **브라우저 콘솔에서 오류 없이 실행됨**
- [ ] **명시된 여러 종료 조건 구현됨**
- [ ] **게임 상태가 깔끔히 초기화되며 정상 재시작됨**
- [ ] **플레이어에게 명확한 게임 상태 피드백 제공**
- [ ] **최신 자바스크립트 문법과 베스트 프랙티스 사용**
- [ ] **README.md에 종합적인 문서 포함**
## 평가 기준표
| 평가 항목 | 우수 (4) | 능숙 (3) | 발전 중 (2) | 초급 (1) |
|----------|---------------|----------------|----------------|--------------|
| **게임 기능** | 다중 종료 조건, 원활한 재시작, 완성도 높은 게임 플레이 | 기본 종료 조건과 기능적 재시작 포함한 완전한 게임 | 일부 종료 조건 구현, 재시작에 약간 문제 있음 | 기능 제한 및 심각한 버그가 있는 불완전한 게임 |
| **코드 품질** | 최신 자바스크립트와 깔끔한 구조, 풍부한 주석, 체계적 코드 | 최신 문법과 적절한 주석, 명확한 구조 | 일부 최신 문법과 최소한의 주석 포함 | 구식 문법, 주석 부족, 엉성한 코드 구조 |
| **사용자 경험** | 직관적이고 명확한 안내, 우수한 피드백, 몰입도 높은 종료 및 재시작 | 충분한 안내와 피드백, 기능적인 종료 및 재시작 | 기본적 안내, 제한된 게임 상태 피드백 | 혼란스러운 안내와 열악한 사용자 피드백 |
| **기술 구현** | 게임 개발 개념, 이벤트 처리, 상태 관리를 능숙하게 구현 | 게임 개념을 잘 이해하고 양호한 구현 | 기본 이해와 괜찮은 구현 | 이해 부족과 열악한 구현 |
| **문서화** | 명확한 안내가 있는 포괄적 README, 잘 문서화된 코드, 철저한 테스트 증거 | 명확한 안내와 적절한 주석의 우수 문서 | 최소 안내의 기본 문서화 | 불충분하거나 부재한 문서화 |
### 점수 기준
- **우수 (16-20점)**: 창의적 기능과 완성도 높은 구현으로 기대 수준 초과
- **능숙 (12-15점)**: 모든 요구사항 충족, 탄탄한 실행
- **발전 중 (8-11점)**: 대부분 요구사항 충족, 일부 사소한 문제 존재
- **초급 (4-7점)**: 일부 요구사항 충족, 크게 개선 필요
## 추가 학습 자료
- [MDN 게임 개발 가이드](https://developer.mozilla.org/en-US/docs/Games)
- [자바스크립트 게임 개발 튜토리얼](https://developer.mozilla.org/en-US/docs/Games/Tutorials)
- [Canvas API 문서](https://developer.mozilla.org/en-US/docs/Web/API/Canvas_API)
- [게임 디자인 원칙](https://www.gamasutra.com/blogs/)
> 💡 **프로 팁**: 간단한 것부터 시작해 기능을 점진적으로 추가하세요. 잘 다듬어진 간단한 게임이 버그 많은 복잡한 게임보다 훨씬 낫습니다!
---
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**면책 조항**:
이 문서는 AI 번역 서비스 [Co-op Translator](https://github.com/Azure/co-op-translator)를 사용하여 번역되었습니다. 정확성을 위해 최선을 다하고 있지만, 자동 번역에는 오류나 부정확성이 포함될 수 있음을 유의하시기 바랍니다. 원문은 해당 언어의 원본 문서가 권위 있는 출처로 간주되어야 합니다. 중요한 정보의 경우 전문 인간 번역을 권장합니다. 본 번역 사용으로 인한 오해나 오역에 대해 당사는 책임을 지지 않습니다.
<!-- CO-OP TRANSLATOR DISCLAIMER END -->