
회고 겸 이번에 처음 배웠던 개념들에 대해서 정리해보고자 한다.
게임 개발에서 게임엔진/렌더러/씬매니저/게임오브젝트는 역할이 분리된 부품이다.
이 부품들이 "메인루프"안에서 매 프레임 협력해서 게임이 돌아간다.
가장 전형적인 구조는 "업데이트(로직) -> 렌더(그리기)"를 계속 반복하는 형태
대략적인 구조는
게임 엔진은 게임이 계속 돌게 만드는 실행 뼈대
메인루프, 시간(dt)관리, 입력 시스템, 오디오, 리소스 로딩, 씬 전환같은 공통 기능이 들어간다.
어떤 씬을 Update/Render할지 관리
현재 게임 상태를 화면에 그리는 담당
게임 오브젝트(혹은 컴포넌트)가 어떤위치에 어떤걸 그려줘 라고 정보를 주면 렌더러가 실제 화면에 출력
씬은 현재 플레이 공간(레벨/화면) 단위의 묶음, 그 안에는 오브젝트들과 씬 단위 시스템(조명, 물리, 스폰, UI등)이 들어있다.
씬매니저는 어떤씬이 현재 활성화 되어있는지 관리하고, 씬 전환(로딩/언로딩)을 책임지는 관리자
많은 구조에서 엔진은 현재씬에 일을 위임하는 방식으로 짠다.
게임 세계에서 존재하는 하나의 단위(플레이어/몬스터/총알/문 등)이고 보통은 여러 기능을 컴포넌트로 붙여 조립한다.
프로젝트마다 의미가 많이다른데 보통은 게임 규칙/상태 전환/점수/스폰/라운드 관리같은 게임 진행을 총괄하는 로직을 묶어 부르는 경우가 많다.
- GameState: 게임 진행 상태를 담고 공유하는 쪽(점수/시간 등)
- PlayerController: 입력을 받고 Pawn에게 “움직여/행동해”를 지시하는 쪽
- Pawn(또는 Character): 실제로 월드에 존재하며 이동/충돌/행동을 수행하는 플레이어 캐릭터 본체
#include <iostream>
#include <numeric>
using namespace std;
long long gcd_ll(long long a, long long b) {
while (b != 0) {
long long r = a % b;
a = b;
b = r;
}
return a;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
long long A, B;
cin >> A >> B;
long long g = gcd_ll(A, B);
long long lcm = (A / g) * B;
cout << lcm << "\n";
return 0;
}