원티드_언리얼RPG 2기/C++

열거형,클래스

하시무 2025. 2. 27. 17:49

    열거형(enumeration)


    관련된 상수들의 집합을 의미 있는 이름으로 묶어서 표현할 수 있는 데이터 타입 

#include <iostream>
#include <Windows.h>

using namespace std;

enum TileType
{
    EARTH, //디폴트 0부터 시작된다. 
    FOREST,
    SWAMP
};

enum class TileType : uint8_t //2바이트씩할당을 부호가없는 정수 1바이트씩으로 변환 메모리절약 
{
    Earth,
    Forest,
    Swamp
};
struct Tile
{
    int posX, posY;
    //int type;  0:땅, 1.숲, 2.늪
    TileType type; 
    char shape; //0.#, 1.^, 2. ~
};

class Car // 틀, 설계도 
{
    //멤버 변수(field, attribute, state, data,...)
private:
    float moveSpeed;
    float maxMoveSpeed;
    short gear;
    string color;
    RECT rc;

    //멤버 함수(method, 동작, 기능, 함수..)
public:
    void Setup(float moveSpeed, float maxMoveSpeed, short gear, string color, RECT rc)
    {       
        (*this).moveSpeed = moveSpeed; //인스턴스(메모리에 할당된 객체)의 주소를 말하는 this 
        //this->moveSpeed 
        this->maxMoveSpeed = maxMoveSpeed;
        this->gear = gear;
        this->color = color;
        this->rc = rc;
    }
    void SpeedUp() {}
    void SpeedDown() {}
    void ChangeGear() {}
    void Run() {}
    void Draw() 
    {   //DeviceContext
        HDC hdc = GetWindowDC(GetForegroundWindow());
        Ellipse(hdc, rc.left, rc.top, rc.right, rc.bottom); //내접하는원 그리기
    }
};

int main()
{
    Car car1;
    Car car2;
    RECT rc{ 100, 100, 200, 200 };
    car1.Setup(0, 5.0f, 1, "빨간색", rc);
    car2.Setup(0, 10.0f, 1, "파란색", rc);

    while (1)
    {
        car1.Draw();
        Sleep(500);
    }
    Tile Tilemap[5][5];

    for (int i = 0; i < 5; i++) 
    {
        for (int j = 0; j < 5; j++)
        {
            Tilemap[i][j].posX = i;
            Tilemap[i][j].posY = i;
            Tilemap[i][j].type = (TileType)(rand() % 3); //명시적 형변환
            //Tilemap[i][j].type = TileType::EARTH;
            Tilemap[i][j].shape = '#';
        }
    }

    for (int i = 0; i < 5; i++)
    {
        for (int j = 0; j < 5; j++)
        {
            std::cout << (int)Tilemap[i][j].type;
            std::cout << Tilemap[i][j].shape;
        }
        std::cout << "\n";
    }
}