1. 학습 목표
- 클래스와 객체의 개념을 이해한다.
- 클래스와 객체를 C++로 작성하고 사용할 수 있다.
- 게임 개발에서 클래스와 객체가 왜 중요한지 알 수 있다.
2. 클래스와 객체란 무엇인가?
1) 클래스(Class)란?
- 클래스는 설계도라고 생각하면 됩니다.
- 예: 게임에서 캐릭터(Player)의 설계도를 만들어 놓고, 여러 캐릭터를 생성합니다.
2) 객체(Object)란?
- 객체는 클래스를 기반으로 만들어진 실제 사물입니다.
- 클래스 = 설계도 → 객체 = 설계도를 바탕으로 만든 건물
- 예: "Player"라는 클래스를 기반으로 '철수', '영희' 캐릭터를 생성할 수 있습니다.
3. 왜 클래스와 객체가 중요한가?
- 게임 개발에서는 많은 캐릭터, 아이템, 환경 등이 등장합니다.
- 각 요소를 클래스로 설계하고, 객체로 만들어야 효율적이고 체계적으로 관리할 수 있습니다.
4. C++ 코드로 배우는 클래스와 객체
1) 클래스 정의
- 클래스를 정의하려면 class 키워드를 사용합니다.
#include <iostream>
using namespace std;
// Player 클래스 정의
class Player
{
public: // 접근 제어자 (Public: 누구나 접근 가능)
string name; // 이름
int health; // 체력
// 클래스 함수: 행동 정의
void Attack()
{
cout << name << "이(가) 공격합니다!" << endl;
}
};
2) 객체 생성
- 클래스를 정의한 후, 이를 바탕으로 객체를 생성합니다.
int main()
{
// Player 객체 생성
Player player1; // 객체 선언
player1.name = "철수"; // 이름 설정
player1.health = 100; // 체력 설정
// 행동 호출
cout << "플레이어 이름: " << player1.name << endl;
cout << "플레이어 체력: " << player1.health << endl;
player1.Attack();
return 0;
}
5. 실행 결과
코드를 실행하면 다음과 같은 결과를 볼 수 있습니다:
플레이어 이름: 철수
플레이어 체력: 100
철수이(가) 공격합니다!
6. 게임 개발에 어떻게 활용할까?
- 캐릭터 클래스 만들기
- 플레이어, 적, NPC 등을 클래스로 정의하고 각자 객체를 생성.
- 다양한 속성과 행동 추가
- 예: 공격력, 방어력, 움직임 등.
- 복잡한 시스템 구현
- 클래스 간 협력(플레이어와 적의 상호작용 등).
7. 실습 문제
- Enemy 클래스를 만들어보세요.
- 속성: 이름(name), 체력(health), 공격력(attackPower)
- 행동: Attack 함수(출력: "[이름]이(가) [공격력] 데미지로 공격합니다!")
- main 함수에서 Enemy 객체를 생성하고, 속성을 설정한 뒤 행동을 호출하세요.
실습 문제 풀이: Enemy 클래스 작성
코드 설명
- Enemy 클래스를 정의합니다.
- 속성(name, health, attackPower)과 행동(Attack 함수)을 추가합니다.
- main 함수에서 Enemy 객체를 생성하고, 속성을 설정한 후 행동을 호출합니다.
#include <iostream>
using namespace std;
// Enemy 클래스 정의
class Enemy
{
public:
string name; // 적 이름
int health; // 체력
int attackPower; // 공격력
// 적의 행동: 공격
void Attack()
{
cout << name << "이(가) " << attackPower << " 데미지로 공격합니다!" << endl;
}
};
int main()
{
// Enemy 객체 생성
Enemy enemy1;
enemy1.name = "고블린"; // 적의 이름 설정
enemy1.health = 50; // 적의 체력 설정
enemy1.attackPower = 10; // 적의 공격력 설정
// 객체 정보 출력
cout << "적 이름: " << enemy1.name << endl;
cout << "적 체력: " << enemy1.health << endl;
cout << "적 공격력: " << enemy1.attackPower << endl;
// 적의 행동 호출
enemy1.Attack();
return 0;
}
코드 실행 결과
적 이름: 고블린
적 체력: 50
적 공격력: 10
고블린이(가) 10 데미지로 공격합니다!
확장 실습
- 적을 여러 명 만들어보기
- Enemy 객체를 두 개 이상 만들어 각각 다른 이름, 체력, 공격력을 설정해보세요.
- Player와 Enemy 간 상호작용
- Player 클래스와 Enemy 클래스 간의 전투 시스템을 간단히 구현해보세요.
- 예: Enemy가 공격하면 Player의 체력이 줄어드는 코드 작성.
- 랜덤 공격력
- 공격력을 랜덤 값으로 설정하려면 <cstdlib> 라이브러리를 사용해보세요.
확장 실습: Player와 Enemy 간 전투 시스템
코드 설명
- Player 클래스와 Enemy 클래스를 정의합니다.
- 두 클래스의 객체를 생성하여 서로 공격하는 간단한 전투를 구현합니다.
- 공격 시 체력이 감소하도록 상호작용을 만듭니다.
#include <iostream>
#include <cstdlib> // 랜덤 값 사용을 위해 포함
#include <ctime> // srand 시드 초기화를 위해 포함
using namespace std;
// Player 클래스 정의
class Player
{
public:
string name;
int health;
Player(string playerName, int playerHealth)
{
name = playerName;
health = playerHealth;
}
void TakeDamage(int damage)
{
health -= damage;
cout << name << "이(가) " << damage << " 데미지를 입었습니다! 남은 체력: " << health << endl;
}
bool IsAlive()
{
return health > 0;
}
};
// Enemy 클래스 정의
class Enemy
{
public:
string name;
int health;
int attackPower;
Enemy(string enemyName, int enemyHealth, int enemyAttackPower)
{
name = enemyName;
health = enemyHealth;
attackPower = enemyAttackPower;
}
void Attack(Player &target)
{
cout << name << "이(가) " << target.name << "을(를) 공격합니다!" << endl;
target.TakeDamage(attackPower);
}
bool IsAlive()
{
return health > 0;
}
};
int main()
{
// 랜덤 시드 초기화
srand(static_cast<unsigned int>(time(0)));
// Player와 Enemy 객체 생성
Player player1("용사", 100);
Enemy enemy1("고블린", 50, rand() % 15 + 5); // 공격력 5~20 랜덤
cout << "전투 시작!" << endl;
// 전투 루프
while (player1.IsAlive() && enemy1.IsAlive())
{
// 플레이어가 적을 공격
int playerAttack = rand() % 20 + 10; // 플레이어 공격력 10~30 랜덤
cout << player1.name << "이(가) " << enemy1.name << "을(를) 공격합니다! 데미지: " << playerAttack << endl;
enemy1.health -= playerAttack;
if (enemy1.health > 0)
{
cout << enemy1.name << "의 남은 체력: " << enemy1.health << endl;
}
else
{
cout << enemy1.name << "이(가) 쓰러졌습니다!" << endl;
break;
}
// 적이 플레이어를 공격
enemy1.Attack(player1);
if (!player1.IsAlive())
{
cout << player1.name << "이(가) 쓰러졌습니다! 게임 오버!" << endl;
break;
}
cout << "-------------------------" << endl;
}
if (player1.IsAlive())
{
cout << "전투에서 승리했습니다!" << endl;
}
return 0;
}
8. 요약
- 클래스는 설계도, 객체는 설계도를 바탕으로 만든 실제 물건이다.
- 게임 개발에서 클래스와 객체는 캐릭터, 아이템, 환경 등을 체계적으로 관리하는 데 필수적이다.
추가 학습 자료
- C++ 공식 문서: 클래스와 객체
- 언리얼 엔진에서 클래스와 객체 활용 예제는 다음 강의에서 다룹니다!
'개발이야기 > C++' 카테고리의 다른 글
C++기초 7강: 클래스의 멤버변수와 함수 (0) | 2025.01.06 |
---|---|
C++기초 5강: 함수: 코드의 조각을 만들고 재활용하기 (0) | 2024.12.13 |
C++기초 4강: 데이터타입과 기초문법 총정리 (1) | 2024.12.10 |
C++기초: 3강 - 첫번째 프로그램 만들기 (0) | 2024.12.03 |
C++기초: 2강-컴파일과 실행의 과정 이해 (0) | 2024.12.02 |