포인터 사용해보기

이승덱·2021년 7월 21일

CPP

목록 보기
17/70
// 간단한 TextRpg를 만들어 보자!

#include <iostream>

using namespace std;

//int형 3개 총 12 바이트

struct StatInfo {

 int hp; //+0

 int attack; //+4

 int defence; //+8

};

void EnterLobby();

StatInfo CreatePlayer();

void CreateMonster(StatInfo* info);

bool StartBattle(StatInfo* player, StatInfo* monster);

//포인터 실습

int main()

{

 EnterLobby();

}

void EnterLobby() {

 cout << "로비에 입장했습니다." << endl;

 StatInfo player;

 StatInfo monster;

 player = CreatePlayer();

 CreateMonster(&monster);

 bool victory=StartBattle(&player, &monster);

 if (victory)

 cout << "승리" << endl;

 else

 cout << "패배" << endl;

}

//기존의 리턴값을 사용한 방식

//[매개변수][RET][지역변수(temp(100,10,2), player(b,b,b))] [매개변수(&temp)][RET][지역변수(ret(100,10,2))]

//컴파일을 까보면 임시 변수를 만들어 리턴값을 받은 후 player에게 복사

//생각보다 효율적이지 않은 것을 알 수 있다.

StatInfo CreatePlayer() {

 StatInfo ret;

 cout << "플레이어 생성" << endl;

 ret.hp = 100;

 ret.defence = 5;

 ret.attack = 10;

 return ret;

}

//포인터를 사용한 방식

//직접 주소에 접근해 monster를 변경함

//기존의 방식보다는 효율적

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;

 player->hp -= damage;

 cout << "플레이어 HP: " << monster->hp << endl;

 if (player->hp < 0)

 player->hp = 0;

 if (player->hp == 0)

 return false;

 }

}
profile
공부 기록용 블로그입니다

0개의 댓글