4/28 (코드카타,c++,과제1,과제2/step4)

2026. 4. 28. 20:33·본캠프

첫시간은 코드카타이고 오늘 푼 문제이다

주어진 수가 6이라면 6 → 3 → 10 → 5 → 16 → 8 → 4 → 2 → 1 이 되어 총 8번 만에 1이 됩니다. 위 작업을 몇 번이나 반복해야 하는지 반환하는 함수, solution을 완성해 주세요. 단, 주어진 수가 1인 경우에는 0을, 작업을 500번 반복할 때까지 1이 되지 않는다면 –1을 반환해 주세요.


using namespace std;

using namespace std;

int solution(int num) {
    long long n = num;

    for (int count = 0; count <= 500; count++) {
        if (n == 1) {
            return count;
        }

        if (n % 2 == 0) {
            n /= 2;
        }
        else {
            n = n * 3 + 1;
        }
    }

    return -1;
}

 

오늘은 c++에서 액터생성후 액터가 랜덤하게 이동하고 회전하도록 구연했습니다.

또한 이동 횟수,현재 좌표,이벤트 발생횟수,총 이동 거리 등을 화면에 출력하도록 하였고 git에 업로드까지 하였습니다.

 

기억해야할점

cpp에 함수를 만들기전에 h에 함수선언을 해야한다

 

BeginPlay()는 게임이 시작될때 한 번 실행되는 함수입니다.

시작위치를 고정할때는 SetActorLocation(FVector(0.0f, 0.0f, 50.0f));을 썼습니다.

언리얼에서 위치는 FVector로 표현합니다

 

위치를 가져올때는 GetActorLocation 변경할때는 SetActorLocation을 사용합니다.

 

이번에는 액터가 바라보는 방향으로 이동하게 만들기 위해서 GetActorFowardVector()를 사용했습니다.

FVector ForwardDirection = GetActorForwardVector();

 

마찬가지로 GetActorLocation와 비슷하게 GetActorRotation는 회전시킬때 사용합니다.

 

언리얼 c++에서 랜덤값을 만들때 FMath::RandRange()를 사용하였습니다.

float RandomDistance = FMath::RandRange(50.0f, 200.0f);

이코드는 50~200사이의 값을 뽑아 오는거고 50%로 할때는 0과1을 사용하면 됩니다.

 

이전 위치와 현재 위치 사이의 거리는 FVector::Dist()로 계산할수 있습니다.

이 과제에서 이동할 때마다 이동 거리를 누적해서 총 이동거리를 계산했고

토탈무브디스턴스에 추가 해주었습니다.

 

화면에 로그출력하기

GEngine->AddOnScreenDebugMessage(-1, 3.0f, FColor::Green, Message);

-1은 새 메세지로 출력

3.0f는 3초동안 표시

 

한글로 출력했다가 다 깨져서 영어로 출력하는게 안전하다고 경험했습니다 ㅜㅜ

 

이번에 기억할것

1. .h 파일에는 함수와 변수를 선언한다.
2. .cpp 파일에는 함수의 실제 동작을 구현한다.
3. AMyActor::Move()에서 ::는 클래스 소속을 의미한다.
4. BeginPlay()는 게임 시작 시 한 번 실행된다.
5. 위치는 FVector, 회전은 FRotator를 사용한다.
6. GetActorLocation()으로 현재 위치를 가져온다.
7. SetActorLocation()으로 위치를 바꾼다.
8. GetActorRotation()으로 현재 회전을 가져온다.
9. SetActorRotation()으로 회전을 바꾼다.
10. GetActorForwardVector()를 사용하면 Actor가 바라보는 방향으로 이동할 수 있다.
11. FMath::RandRange()로 랜덤 값을 만들 수 있다.
12. FVector::Dist()로 두 위치 사이의 거리를 계산할 수 있다.
13. 언리얼 프로젝트를 GitHub에 올릴 때 Binaries, Intermediate, Saved 같은 자동 생성 폴더는 제외해야 한다.

 

그후 2번과제를 시작했습니다.

2번과제 step1

기억해야할것

main이 시작점이다

cout  화면에 출력
cin    키보드로 입력받기
endl  줄바꿈

ex)

cin >> stat[0] >> stat[1];

cin >> stat[2] >> stat[3];

 

#include <string> 문자열을 사용하기 위해 필요

using namespace std;

==> std:: 생략가능

 

step2

기억해야할것

 

핵심개념

while (true)

if (조건)

 

(기존코드)

cout << "HP와 MP를 입력해주세요: ";
cin >> stat[0] >> stat[1];

 

(바뀐코드)

while (true)
{
    cout << "HP와 MP를 입력해주세요: ";
    cin >> stat[0] >> stat[1];

    if (stat[0] >= 50 && stat[1] >= 50)
    {
        break;
    }

    cout << "HP나 MP의 값이 너무 작습니다. 다시 입력해주세요." << endl;
}

 

step3

기억해야할것

while (!isGameStart)
{
    메뉴 출력
    번호 입력

    switch (choice)
    {
    case 1:
        HP 증가
        break;

    case 2:
        MP 증가
        break;

    case 0:
        isGameStart = true;
        break;
    }
}

 

step4

기억해야할것

protected 자식클래스에서 ㅈ버근할 수 있지만,클래스 밖에서는 직접 접근할 수 없음.

 

순수 가상 함수

virtual void attack() = 0;

ex)

Player는 attack()이라는 함수가 있어야 한다.
그런데 Player 자체는 공격 방식을 정하지 않는다.
자식 클래스가 반드시 직접 정해야 한다

 

상속

class Magician : public Player

 

자식 클래스 생성자

Magician(string name, int hp, int mp, int power, int defence)
    : Player(name, hp, mp, power, defence)
{
    job = "마법사";
    mp += 30;
}

 

오버라이딩

부모클래스의 함수를 자식 클래스에서 다시 정의하는것

 

다형성

Player* player = nullptr; 이코드 하나로

player = new Warrior(...);/player = new Magician(...);모두 다룰수 있다.

 

어려운코드

virtual void attack() = 0;

순수가상함수인데 일반함수는 몸통이 있는것과 달리

몸통이없다

 

==>뜻은 

Player에는 attack이라는 함수가 있어야 한다.
하지만 Player가 직접 공격 방식을 정하지는 않는다.
자식 클래스가 반드시 attack을 만들어야 한다.

라고 생각하면 된다.

 

개념의미

순수 가상 함수 부모가 자식에게 “이 함수 반드시 만들어라”라고 강제하는 함수
추상 클래스 순수 가상 함수를 가진 클래스. 직접 객체 생성 불가
오버라이딩 부모의 함수를 자식이 자기 방식으로 다시 구현하는 것
다형성 같은 player->attack() 코드가 실제 객체에 따라 다르게 동작하는 것
new 객체를 동적으로 생성
delete new로 만든 객체를 삭제

'본캠프' 카테고리의 다른 글

던전탈출rpg과제 총정리+학습  (0) 2026.04.29
4/29(코드카타,과제2 step8)  (0) 2026.04.29
4/27(코드카타,발표)  (0) 2026.04.27
4/24(코드카타,C++실시간강의,FPS강의)  (1) 2026.04.24
발표자료  (1) 2026.04.23
'본캠프' 카테고리의 다른 글
  • 던전탈출rpg과제 총정리+학습
  • 4/29(코드카타,과제2 step8)
  • 4/27(코드카타,발표)
  • 4/24(코드카타,C++실시간강의,FPS강의)
백구
백구
게임개발 공부블로그 입니다.
  • 백구
    백구 게임개발 스터디
    백구
  • 전체
    오늘
    어제
    • 분류 전체보기 (21) N
      • 사전캠프 (5)
      • 본캠프 (16) N
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
백구
4/28 (코드카타,c++,과제1,과제2/step4)
상단으로

티스토리툴바