첫시간은 코드카타이고 오늘 푼 문제이다
주어진 수가 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 |