Notice
Recent Posts
Recent Comments
Link
오븐 노트
[C++] 포인터 실습 본문
#include <iostream>
using namespace std;
struct StatInfo
{
int hp; // +0
int attack; // +4
int defence; //+8
};
void EnterLobby();
StatInfo CreatePlayer(); // 포인터x
void CreateMonster(StatInfo* info); // 포인터o
// player 승리 시 true 패배시 false
bool StartBattle(StatInfo* player, StatInfo* monster);
int main()
{
EnterLobby();
return 0;
}
void EnterLobby()
{
cout << "로비에 입장했습니다" << endl;
StatInfo player; // 포인터x
player.hp = 0xbbbbbbbb;
player.attack = 0xbbbbbbbb;
player.defence = 0xbbbbbbbb;
// 스택 프레임
// [매개변수][RET][지역변수(temp(c, c, c))] CreatePlayer[매개변수][RET][지역변수]
// [매개변수][RET][지역변수(temp(c, c, c), player(b, b, b))] CreatePlayer[매개변수][RET][지역변수]
// [매개변수][RET][지역변수(temp(c, c, c), player(b, b, b))] CreatePlayer[매개변수(&temp)][RET][지역변수]
// [매개변수][RET][지역변수(temp(c, c, c), player(b, b, b))] CreatePlayer[매개변수(&temp)][RET][지역변수(ret(100, 10, 2))]
// [매개변수][RET][지역변수(temp(100, 10, 2), player(b, b, b))] CreatePlayer[매개변수(&temp)][RET][지역변수(ret(100, 10, 2))]
// [매개변수][RET][지역변수(temp(100, 10, 2), player(100, 10, 2))] CreatePlayer[매개변수(&temp)][RET][지역변수(ret(100, 10, 2))]
// 실제 mmorpg의 경우, info가 수천 바이트에 달할수 있는데 이때 이런식의 연산이 반복된다면 성능적인 부하가 올 수 있다.
player = CreatePlayer();
StatInfo monster; // 포인터o
monster.hp = 0xbbbbbbbb;
monster.attack = 0xbbbbbbbb;
monster.defence = 0xbbbbbbbb;
// [매개변수][RET][지역변수(monster(b, b, b))] CreateMonster[매개변수(&monster)][RET][지역변수()]
// [매개변수][RET][지역변수(monster(40, 8, 1))] CreateMonster[매개변수(&monster)][RET][지역변수()]
// 포인터이기 때문에 원본으로 작업되어서 어셈블리 기준 비교적 효율 매우 좋음
CreateMonster(&monster);
bool victory = StartBattle(&player, &monster);
if (victory)
cout << "승리!" << endl;
else
cout << "패배!" << endl;
// 구조체끼리 복사할 경우
// player.hp = monster.hp;
// player.attack = monster.attack;
// player.defence = monster.defence;
// 아래 주석이 위 주석과 같으므로 mmorpg에서의 구조체 복사는 부하가 올 수 있다.
// player = monster;
}
StatInfo CreatePlayer()
{
StatInfo ret;
cout << "플레이어 생성" << endl;
ret.hp = 100;
ret.attack = 10;
ret.defence = 2;
return ret;
}
void CreateMonster(StatInfo* info)
{
cout << "몬스터 생성" << endl;
info->hp = 40;
info->attack = 8;
info->defence = 1;
}
bool StartBattle(StatInfo* player, StatInfo* monster)
{
while (true)
{
int damage = player->attack - monster->defence;
if (damage < 0)
damage = 0;
monster->hp -= damage;
if (monster->hp < 0)
monster->hp = 0;
cout << "몬스터 HP : " << monster->hp << endl;
if (monster->hp == 0)
return true;
damage = monster->attack - player->defence;
if (damage < 0)
damage = 0;
cout << "플레이어 HP : " << player->hp << endl;
player->hp -= damage;
if (player->hp < 0)
player->hp = 0;
if (player->hp == 0)
return false;
}
}
[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문 - 인프런 | 강의
C++ 카테고리의 글은 인프런 Rookiss님의 강의를 공부하며 정리하는 내용입니다.
이미 알고 있는 내용도 다시 정리 되어있을 수 있습니다.
모든 글은 제가 공부하기 위해 작성합니다.
'Develop > C++' 카테고리의 다른 글
[C++] 포인터 vs 참조 (0) | 2022.07.10 |
---|---|
[C++] 참조 기초 (0) | 2022.07.10 |
[C++] 포인터 연산 (0) | 2022.07.01 |
[C++] 포인터 기초 #2 (0) | 2022.07.01 |
[C++] 포인터 기초 #1 (0) | 2022.06.30 |