C++ Rookiss Part1 C++ 프로그래밍 입문 : 포인터 실습 복습
🙇♀️포인터 실습 복습
🪐포인터 실습
간략한 TextRPG를 만들어보는 실습
포인터를 활용하지 않는 함수 : StatInfo CreatePlayer();
포인터를 활용하는 함수 : void CreateMonster(StatInfo* info);
- TextRPG
#include <iostream>
using namespace std;
// 주제 : 포인터 실습
struct StatInfo // StatInfo 구조체 12바이트
{
int hp;
int attack;
int defence;
};
void EnterLobby();
StatInfo CreatePlayer(); // 포인터 사용 x, 반환값으로 StatInfo를 넘김
void CreateMonster(StatInfo* info); // 포인터 활용 o, 매개변수로 포인터 변수를 사용함
// 플레이어 승리시 true, 패배시 false
bool StartBattle(StatInfo* player, StatInfo* monster); // 원본의 값을 변경하기 위해서 포인터 사용
int main()
{
EnterLobby();
return 0;
}
void EnterLobby()
{
cout << "로비에 입장했습니다" << endl;
StatInfo player; // StatInfo 구조체 타입의 변수를 스택에서 생성
player.hp = 0xbbbbbbbb; // 쓰레기값 넣기
player.attack = 0xbbbbbbbb; // 쓰레기값 넣기
player.defence = 0xbbbbbbbb; // 쓰레기값 넣기
player = CreatePlayer(); // 플레이어 생성, StatInfo 반환값을 받아줘서 player에 대입
StatInfo monster; // StatInfo 구조체 타입의 변수를 스택에서 생성
monster.hp = 0xbbbbbbbb; // 쓰레기값 넣기
monster.attack = 0xbbbbbbbb; // 쓰레기값 넣기
monster.defence = 0xbbbbbbbb; // 쓰레기값 넣기
CreateMonster(&monster); // 몬스터 생성, 주소값을 전달 하기 위해 & 연산자 사용
bool flag = StartBattle(&player, &monster);
if (flag == true)
cout << "승리!" << endl;
else if (flag == false)
cout << "패배!" << endl;
}
StatInfo CreatePlayer()
{
StatInfo ret; // 포인터가 아닌 복사를 이용한 방법이므로 반환값을 뱉을 StatInfo 변수 생성
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->attack = 8;과 동일
info->defence = 1;
}
bool StartBattle(StatInfo* player, StatInfo* monster)
{
while (true)
{
int damage = player->attack - monster->defence;
monster->hp -= damage;
if (monster->hp <= 0)
return true;
cout << "몬스터 HP : " << monster->hp << endl;
damage = monster->attack - player->defence;
player->hp -= damage;
if (player->hp <= 0)
return false;
cout << "플레이어 HP : " << player->hp << endl;
}
}
- 번외편
- 구조체끼리 복사할 때 무슨 일이 발생할까?
- player = monster; // 내부적으로는 아래 3줄과 동일
- player.hp = monster.hp;
- player.attack = monster.attack;
- player.defence = monster.defence;
- 구조체끼리 복사할 때 무슨 일이 발생할까?