절차(procedure)지향 프로그래밍
- procedure == 함수 즉, 함수 기반 프로그래밍
객체지향 프로그래밍
- 게임 업계에서는 객체지향 프로그래밍 방식을 이용한다.
객체 지향 설계
knight 설계
- 속성(데이터): hp, attack, y, x
- 기능(동작): Move, Attack, Die
// Knight 설계도
// Knight 의 메모리 크기는 16 byte (멤버 변수만 취급)
class Knight
{
public:
// 멤버 함수 선언 및 구현
void Move(int y, int x);
void Attack();
void Die()
{
hp = 0; // 멤버 변수를 사용할 수 있다.
cout << "Die" << endl;
}
public:
// 멤버 변수
int hp;
int attack;
int posY;
int posX;
};
class 내부에 함수를 구현할 수 있지만 외부에서도 가능하다.
// Knight 에 속한 Move 함수
void Knight::Move(int y, int x)
{
// posY와 posX는 어디서 왔나?
// 어셈블리에서 보면 Knight 객체의 주소를 넘겨받는다.
// 각 개체에는 posY와 posX의 데이터가 저장되어 있다.
posY = y;
posX = x;
cout << "Move" << endl;
}
void Knight::Attack()
{
cout << "Attack: " << attack << endl;
}
이때 Knight 객체가 사용하는 동작임을 명시적으로 전달해줘야 한다.
객체 생성 및 동작
객체를 더 쉽게 이해하기 위해 다른 코드를 살펴보자.
int main()
{
// 객체 생성
Knight k1;
k1.hp = 100;
k1.attack = 10;
k1.posY = 0;
k1.posX = 0;
Knight k2;
k1.hp = 80;
k1.attack = 5;
k1.posY = 1;
k1.posX = 1;
// 객체 k1의 동작 설정
// k1 의 주소를 넘겨준다.
k1.Move(2, 2); // == Move(&k1, 2, 2);
k1.Attack();
k1.Die();
}
k1과 k2라는 객체를 생성했는데, 예를 들어보면 필드 위에 Knight형 몬스터 2마리가 리젠됐다고 생각하면 된다.
또한 각 몬스터의 동작은 Knight 설계도에 있는 멤버 함수로 표현한다.
멤버 변수 작성법
void Knight::Move(int y, int x)
{
posY = y;
posX = x;
cout << "Move" << endl;
}
해당 멤버 함수에서는 posY와 posX가 멤버 변수인지 아니면 인자로 받은 변수인지 알 수 있지만, 코드가 길어지다 보면 명확히 알기 어려울 수 있다.
따라서 설계도에서 멤버 변수를 선언할 때 멤버 변수인지 확실히 알 수 있는 표시를 남긴다.
class Knight
{
...
public:
int m_hp;
int mAttack;
int _posY;
int _posX;
};
void Knight::Move(int y, int x)
{
_posY = y;
_posX = x;
cout << "Move" << endl;
}
멤버 변수 작성법은 회사 또는 개인마다 다를 수 있다. 나는 _를 주로 사용할 계획이다.
출처
https://www.inflearn.com/course/%EC%96%B8%EB%A6%AC%EC%96%BC-3d-mmorpg-1/dashboard
[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문 - 인프런 | 강의
시리즈를 원활하게 학습하기 위한 기초적인 C++ 문법들에 대해 학습합니다. 어셈블리 언어부터 시작해서 기본 C++ 문법, STL, C++11까지 핵심적인 내용을 압축해서 다루게 됩니다., - 강의 소개 | 인
www.inflearn.com
'프로그래머 > CPP_강의정리' 카테고리의 다른 글
cpp 객체지향(3-상속성) (0) | 2021.09.19 |
---|---|
cpp 객체지향(2-생성자와 소멸자) (0) | 2021.09.16 |
cpp 파일 관리 (0) | 2021.09.16 |
cpp 다차원 배열 (0) | 2021.09.14 |
cpp 포인터와 배열 (0) | 2021.09.14 |