기획서

프로젝트 개요

  1. 프로젝트 이름 : Laboratory
  2. 개발 기간 : 12/29 ~ 01/07 PM 14:00
  3. 게임 컨셉 및 목표 : 텍스트 기반 자동 RPG (추후 변경될 수 있음.) 각자 분담하여 필수 기능을 구현하고 도전 기능까지 해보기

세계관 & 스토리

실험실에서 눈뜬 주인공, 눈앞에 놓인 권총과 함께 사이렌과 나타난 괴물을 상대한다!

 

시스템 상세

  • 전투
  • 캐릭터
  • 아이템

UI 구조(콘솔 출력/입력)

UI는 기본 기능이 구현되고 남은 시간에 구현할 예정이지만 미리 기획.

  • 예시
// 남는 시간에 따라 아래로 한개씩 추가
// Unicode 기반 박스를 해상도에 맞게 설정해 베이스 UI 생성
// 기본 박스 안에 Text  박스 추가 생성
// 맵
// 아스키 아트로 전투 시각적 표현
┌──────────────────────────────────────────────────────┐
|    ┌───────────────────< Map >──────────────────┐    |
|    |  ★ - - - - - - - - - - - - - - - - - - ▲  |    |
|    └────────────────────────────────────────────┘    |  
│                                    |\_____/|         │
│                                    \/ ○ ○ \/         │
│                                      \_▲_/           │
│         ____         Main Box       /     \          │
│       /      \    /|               ||     ||         │
│       |      |  / /                ■\_ /\_/■         │
│        \    /  / /                                   │
│      __/    \_/ /                                    │
│     /          \|                                    │
│    |_|        |_|                                    │
│      |        |                                      │
└──────────────────────────────────────────────────────┘
┌───────────────────────────────────────┐┌─────────────┐
│ > Text Box                            ││             │
│                                       ││     Stat    │
│                                       ││             │
└───────────────────────────────────────┘└─────────────┘

-> Map
┌────────────────────────────────────────────┐
|  ★ - - - - - - - - - - - - - - - - - - ▲  |
└────────────────────────────────────────────┘

-> Stat
┌───────────────────┐
| Name : player     |
| Class:            |
| HP   :            |
| MP   :            |
| ATT  :            |
| Level:            |
└───────────────────┘

맵 & 탐험 구조

선형 구조 : 시작 → 자동 전투 → 10레벨 전 까지 반복 → 10레벨 달성 및 보스 전투 → 엔딩

이동 및 전투 방식은 추후 추가 기능에 의해 변경될 수 있음.

클래스 설계

개발 범위 & 도전 요소

  • 필수 기능
    • 플레이어 캐릭터 생성
      • 플레이어는 캐릭터 생성시 이름을 설정 할 수 있습니다.
      • 캐릭터는 레벨 1, 초기 체력 200, 공격력 30, 경험치 0으로 시작합니다.
      • 각 레벨업에 필요한 경험치는 100으로 동일합니다.
      • 게임 플레이 중,언제든지 캐릭터 상태 확인할 수 있어야 합니다.
    • 몬스터
      • 몬스터도 이름, 체력, 공격력을 가집니다.
      • 몬스터의 스탯은 캐릭터 레벨에 비례해서 랜덤하게 설정합니다.
        • 체력: (레벨 × 20) ~ (레벨 × 30)
        • 공격력: (레벨 × 5) ~ (레벨 × 10)
    • 전투시스템
      • 랜덤으로 난입하는 몬스터와 턴제로 싸웁니다.
      • 전투 시작 조건은 다음과 같아요.
        • 캐릭터 생성 직후,
        • 전투 승리 후 상점 방문을 스킵한 경우,
        • 상점 이용 후 다시 전투가 시작됩니다.
      • 전투에서 승리하면 다음과 같은 보상을 받습니다.
        • 경험치는 50을 획득합니다.
        • 골드는 10~20을 랜덤으로 획득합니다.
        • 30% 확률로 아이템이 떨어집니다.
      • 경험치가 100이상이 되면 레벨업을 합니다.
    • 레벨업
      • 레벨이 오를 때마다 체력과 공격력이 상승합니다.
      • 체력: (현재 체력 + (레벨 × 20))
      • 공격력: (현재 공격력 + (레벨 × 5))
      • 이후, 최대치까지 체력을 회복합니다.
      • 최대 레벨은 10으로 제한합니다.
    • 아이템
      • 아이템은 체력 +50(vhtus 또는 공격력 +10을 증가시킵니다.
      • 플레이어 캐릭터는 전투 중에 아이템을 랜덤하게 사용됩니다.
      • 아이템을 사용하는 조건은 자유롭게 설정해주세요.
      • 아이템은 사용 순간 사라지고, 효과는 바로 캐릭터에게 반영됩니다.
    • 게임 로그
      • 공격, 피해, 아이템 사용, 골드 획득 등 중요한 이벤트는 콘솔에 나열하여 표시합니다.
      • 로그를 통해 오늘 어떤 몬스터를 얼마나 잡았는지 한 눈에 확인 가능해야 합니다.
  • 도전 기능 (선택)
    • 몬스터 보스전
      • 레벨 10 달성 시, “이제 일반 몬스터는 상대도 안 된다!” 라는 메시지를 출력하세요.
      • **“보스 몬스터”**가 등장합니다! 별도의 연출을 넣어주어도 좋습니다.
      • 보스의 스탯은 기존 몬스터의 1.5배 범위를 랜덤으로 설정합니다.
      • 보스를 클리어하면 게임 엔딩을 진행해요.
    • 상점 시스템
      • 전투가 끝나면 플레이어에게 상점을 입장할 것인지 물어보세요.
      • 상점에서는 골드로 아이템을 구매/판매 가능해요.
      • 아이템 구매
        • 골드를 사용해서 아이템을 구매할 수 있어요.
        • 구매 아이템은 인벤토리에 즉시 추가됩니다.
      • 아이템 판매
        • 보유한 아이템을 골드로 판매할 수있어요.
        • 판매 가격은 구입 원가의 60%입니다.
        • 판매된 아이템은 인벤토리에서 즉시 제거되요.
      • 아이템 목록은 자유롭게 제작할 수 있습니다.
      • 아이템은 가격이 정해져 있어야 합니다. 유동적으로 변할 수 없어요.

테스트 계획

1차 필수 기능 테스트 12/31 15:00

2차 추가 기능 테스트

일정 계획

~ 12/31 | 13:00 : 필수 기능 구현

~ 01/05 | 21:00 추가 기능 구현

01/06 | Merge 및 발표자료 준비


코드카타

 

정수 내림차순으로 배치하기

  • 설명
    • 함수 solution은 정수 n을 매개변수로 입력받습니다. n의 각 자릿수를 큰것부터 작은 순으로 정렬한 새로운 정수를 리턴해주세요. 예를들어 n이 118372면 873211을 리턴하면 됩니다.
  • 제한 조건
    • n은 1이상 8000000000 이하인 자연수입니다
#include <string>
#include <algorithm>
#include <vector>

using namespace std;

long long solution(long long n) {
    long long answer = 0;
    if (n >= 1 && n <= 8000000000)
    {
        string  str;
        vector<long long> vec;
        str = to_string(n);

        
        for (char c : str)
        {
            vec.push_back(c - '0');
        }
        
        sort(vec.begin(), vec.end(), greater<long long>());

        for (const auto& i : vec)
        {
            answer *= 10;
            answer += i;
            
        }
    }
    return answer;
}

하샤드 수

  • 설명
    • 양의 정수 x가 하샤드 수이려면 x의 자릿수의 합으로 x가 나누어져야 합니다. 예를 들어 18의 자릿수 합은 1+8=9이고, 18은 9로 나누어 떨어지므로 18은 하샤드 수입니다. 자연수 x를 입력받아 x가 하샤드 수인지 아닌지 검사하는 함수, solution을 완성해주세요.
  • 제한 조건
    • x는 1이상, 10000 이하인 정수입니다
#include <string>
#include <vector>
#include <algorithm>

using namespace std;

bool solution(int x) {
    bool answer = true;
    int num = 0;
    string str = to_string(x);

    for (const auto& c : str)
    {
        num += c - '0';
    }

    answer = (x % num) == 0;

    return answer;
}

 

+ Recent posts