- 미션은 기능 요구사항, 프로그래밍 요구사항, 과제 진행 요구사항 세 가지로 구성되어 있다.
- 세 개의 요구사항을 만족하기 위해 노력한다. 특히 기능을 구현하기 전에 기능 목록을 만들고, 기능 단위로 커밋 하는 방식으로 진행한다.
원인 불명의 감염 사태가 발생했다. 도시는 봉쇄되었고, 당신은 이미 좀비에게 물렸다. 완전히 좀비로 변하기 전에 치료제를 완성하거나, 15일을 버텨 구조대를 기다려야 한다.
- 게임 시작 시 플레이어의 초기 상태는 체력 100, 식량 3, 감염도 10이다.
- 매일(Day) 카드 1장을 뽑고, 카드의 선택지 2개 중 1개를 고른다.
- 선택 후 2초(2000ms) 가 지난 후 결과가 출력된다.
- 매일 선택 후 식량이 1 소비되며, 감염도가 3 증가한다.
- 식량이 0인 상태에서는 매일 체력이 10 추가 감소한다.
- 식량은 0 미만으로 내려가지 않는다. (최솟값 0)
- 플레이어는 언제든 게임을 포기할 수 있다.
20장의 카드로 구성된 덱을 셔플하여 사용한다. 매일 1장을 뽑고 선택지를 고른다. 덱이 소진되면 자동으로 리셔플된다.
| 카드 | 장수 | 선택지 A | 선택지 B |
|---|---|---|---|
| 좀비 무리 | 5 | 맞서 싸운다 (체력 -15) | 숨을 죽인다 (체력 -5, 감염도 +3) |
| 약국 잔해 | 4 | 안으로 들어간다 (감염도 -10, 체력 -5) | 밖의 식량만 줍는다 (식량 +2) |
| 빈 아파트 | 3 | 문을 잠그고 쉰다 (체력 +15) | 방마다 뒤진다 (식량 +2, 체력 -5) |
| 무장한 생존자 | 3 | 식량을 건넨다 (체력 +5, 식량 -1) | 치료를 부탁한다 (감염도 -15, 식량 -1) |
| 감염 발작 | 3 | 이를 악물고 견딘다 (감염도 +10) | 감염 부위를 도려낸다 (체력 -20, 감염도 -10) |
| 무전 신호 | 2 | 위치를 송신한다 (구조 포인트 +1, 체력 -5) | 덫일 수 있다... 무시 (식량 +1) |
- 체력 ≤ 0 → 사망
- 감염도 ≥ 100 → 좀비화
- 치료 선택 5회 누적 (치료 도움 + 자가치료) → 치료 성공
- 구조 포인트 3 이상 + Day > 10 → 구조 성공
- Day > 15 → 생존 성공 (구조대 도착)
게임이 종료되면 다음 정보를 출력한다.
=== 게임 종료 ===
생존 일수: 8일
최종 체력: 0
최종 식량: 2
최종 감염도: 85
엔딩: 사망
(미션 완성 후 실행결과 첨부할 것)
var를 사용하지 않는다.const,let만 사용한다.- 전역 변수를 사용하지 않는다.
- 외부 라이브러리를 사용하지 않고, 순수 Vanilla JS로만 구현한다.
- Airbnb 자바스크립트 코드 컨벤션을 지키면서 프로그래밍 한다.
- indent(인덴트, 들여쓰기) depth를 2가 넘지 않도록 구현한다.
- 예를 들어 while문 안에 if문이 있으면 들여쓰기는 2이다.
- 힌트: indent depth를 줄이는 좋은 방법은 함수(또는 메소드)를 분리하는 것이다.
- 함수(또는 메소드)가 한 가지 일만 하도록 최대한 작게 만들어라.
import문을 이용해 스크립트를 모듈화하고 불러올 수 있게 만든다.- 함수(또는 메소드)의 길이가 15라인을 넘어가지 않도록 구현한다.
- 미션 저장소를 Fork/Clone해 시작한다.
- 기능을 구현하기 전에
docs/README.md파일에 구현할 기능 목록을 정리해 추가한다. - Git의 커밋 단위는 앞 단계에서 README.md 파일에 정리한 기능 목록 단위로 추가한다.
- AngularJS Commit Message Conventions을 참고해 commit log를 남긴다.
- 미션 구현을 완료한 후 GitHub을 통해 제출한다.
- 미션을 제출할 때에는 docs의 markdown 파일에 기능 목록이 적어져 있어야한다.
- 테스트를 통과해야만 제출이 가능하다.
- 테스트 실행에 필요한 패키지 설치를 위해
Node.js버전20이상이 필요하다. - 다음 명령어를 입력해 패키지를 설치한다.
npm install
- 설치가 완료되었다면, 다음 명령어를 입력해 테스트를 실행한다.
npm run test
- 모든 테스트가 pass한다면 성공!
- JavaScript module https://ko.javascript.info/modules-intro
- setTimeout (선택 후 2초 대기) https://developer.mozilla.org/ko/docs/Web/API/setTimeout
- Math.random (덱 셔플) https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Math/random
- classList (카드 표시/숨김) https://developer.mozilla.org/ko/docs/Web/API/Element/classList
- Fisher-Yates 셔플 알고리즘 https://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle
