2주차 C++ 과제 1
2주차 C++ 과제 1
C++의 기본적인 기능들을 이용하여
캐릭터와 그 스탯, 입력 등에 대한 처리를 구현하는 것이 과제이다
구현 요구 사안 1
- 입력과 출력
- 유효성 검사 : 스탯
- 유효성 검사 : 포션 개수
- 유효성 검사 : MP
구현 요구 사안 2
- 6,7 추가 기능 구현
실제 구현 장면
- 입력과 출력
- 유효성 검사 : 스탯
- 유효성 검사 : 포션 개수
- 유효성 검사 : MP
- 6,7 추가 기능 구현
파일 구조
MainGame에서 Player와 Character를 각각 생성하여
구현하였고, Player는 Character를 상속받았다
클래스 구조
Character
- 체력 등의 스탯과 스킬을 관리하는 캐릭터 주체
- Stat을 Base와 Enhanced로 나누어 기본 스탯과 강화 영향을 받은 스탯으로 분류
- Attack, Hit 등의 함수를 통한 대미지 계산
Skill
- 대미지 비율과 마나 소모율을 관리하는 클래스
(구조체로 구현했어도 괜찮았을듯)
Player
- Character를 상속받고 Inventory를 관리하는 Player 주체
Inventory
- 포션과 같은 아이템을 추가, 사용하도록 관리하는 주체
추가 파일들
Utils - IsNotValid, SafeDelete 등의 매크로를 별도로 저장한 헤더 파일
Enums - Enum을 모아 놓은 헤더 파일
트러블 슈팅
구현하던 중, 일부 기능을 확인하려 컴파일했더니 이러한 에러가 발생하였다
enum을 재선언 한 적이 없음에도
해당 error 가 발생하여 매우 당황스러웠다
얼핏보기에는 딱히 문제가 없어보였으나
나중에 잘 찾아보니 중요한 전처리기가 하나 빠졌었다
바로바로…
#pragma once
전처리 과정에서 헤더 파일이 중복 선언되지 않도록 해주는
중요한 전처리기 선언이다
중요도가 높은 헤더 파일은 다양한 Include에 불려간다
아래와 같은 예시에서
C 파일
#include "a.h"
D 파일
#include "a.h"
#include "c.h"
만약 a 헤더에 pragma once가 선언되어 있지 않으면
a 헤더의 내용이 전처리기에서 2번 써지고
그로 인하여 중복 선언이나 재정의가 될 가능성이 매우 높다
그렇기에 해당 전처리기문을 선언하여
a 헤더가 한 번만 선언되게 하면 문제 없이 컴파일이 된다
기본적으로 헤더 파일을 만들때 넣어주는 전처리기 이나
Enums 파일을 만들 때, 실수로 cpp로 선언한 후 바꾸었기에
해당 부분이 생략되었었다
후기
과제 자체는 C++에 익숙하기에 금방 만들 수 있었다
다만 너무 복잡하게 만들지는 않았나 싶기도 하다
처음 작성할때는
가능한 가볍게 작성하고 나중에 프로젝트가 커지면
리팩토링을 진행하는 것이 작업 효율을 높이는 법이라 생각한다
그런데 정작 오늘 구현한 것은
인벤토리 기능과 스킬 등이니
사실 더 간단하게 만드는 것이 좋았던 걸지도…
그래도 결과물은 마음에 드니 상관없을지도
댓글남기기