🙇‍♀️포인터 실습 복습


🪐포인터 실습

간략한 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;

태그:

카테고리:

업데이트: