이모지 링크

 

https://kr.piliapp.com/twitter-symbols/

https://www.unicode.org/emoji/charts/full-emoji-list.html

https://kr.piliapp.com/symbol/#graphic

 

 

1)

#include <stdio.h>

#define icon_Size sizeof "🔚" // icon size == 5byte
#define movable 8
#define x_Blocks (movable + 2)         // 이동 블럭 수 + 양쪽 벽 2개
#define x_Total (icon_Size * x_Blocks) // x 축 전제 크기

int main(void)
{
    char map[x_Total] = {"⬛🔚🔙🔚🔙🔚🔙🔚🔙⬛"};

    printf("icon  size: %ldByte\n", sizeof "🔚");
    printf("x axis cnt: %d\n", x_Blocks);
    printf("array size: %ldByte\n", sizeof map);

    printf("%s\n\n", map);
}

 

// icon  size: 5Byte
// x axis cnt: 10
// array size: 50Byte
// ⬛🔚🔙🔚🔙🔚🔙🔚🔙⬛

 

 

 

2)

#include <stdio.h>

int main(void)
{
    // 1차원 배열
    char map1[10] = {"1 2 3 4 5"};

    printf("%s\n", map1);
    printf("%ld Byte\n\n", sizeof map1); // 9+1

    // 2차원 배열
    char map2[2][10] = {
        "0 1 2 3 4",
        "5 6 7 8 9"};
    printf("%s\n", map2[0]);
    printf("%s\n", map2[1]);
    printf("%ld Byte\n\n", sizeof map2); // (9+1)*2

    // 좌표 평면상의 x축, y축과 인덱스 값 간의 차이점 확인
    printf("%c %c %c %c %c\n", map2[0][0], map2[0][2], map2[0][4], map2[0][6], map2[0][8]);
    printf("%c %c %c %c %c\n", map2[1][0], map2[1][2], map2[1][4], map2[1][6], map2[1][8]);
}
// 1 2 3 4 5
// 10 Byte

// 0 1 2 3 4
// 5 6 7 8 9
// 20 Byte

// 0 1 2 3 4
// 5 6 7 8 9

 

 

 

3)

#include <stdio.h>

int main(void)
{
    /* Case 1. [↖방향] 좌표 0,0 시작 2차원 배열 계산이 편한경우 */
    \
    char map1[5][10] = {
        "0 1 2 3 4",
        "1 a b c d",
        "2 e f g h",
        "3 i j k l",
        "4 m n o p"};

    int maxRow = sizeof map1 / sizeof map1[0]; // [1 시작 정수 계산 사용]
    int y_MaxIdx = maxRow - 1;                 // [0 시작 index 계산 사용] 행 마지막 인덱스
    int block_sz = 2;                          // 열의 블록 한칸 사이즈(띄어쓰기 고려)
    printf("2차원 맵 사이즈: %ld, 행 사이즈: %ld\n\n", sizeof map1, sizeof map1[0]);

    // [step1] 키 입력
    int x_Input = 4; // x 축으로 4칸
    int y_Input = 3; // y 축으로 3칸

    // [step2] 키 입력값이 유효하면, 계산후 할당
    int _x = 0; 
    int _y = 0;

    // [step3] 아이콘 사이즈 반영을 위한 공백 반영
    _x = x_Input * block_sz; // block * 2
    _y = y_Input;
    printf("map1[%d][%d], 값: %c\n", _y, _x / block_sz, map1[_y][_x]);


    /* Case 12. [↙방향] 좌표 0,4 시작 좌표 계산이 편한경우 */

    char map2[5][10] = {
        "4 m n o p",
        "3 i j k l",
        "2 e f g h",
        "1 a b c d",
        "* 1 2 3 4"};

    _x = 0;
    _y = 4;
    _x = x_Input * block_sz; // block * 2
    _y = y_MaxIdx - y_Input; //
    printf("map2[%d][%d], 값: %c\n", _y, _x / block_sz, map2[_y][_x]);
}



 

 

4) 출력

#include <stdio.h>

int main(void)
{
    /* Case 1. [↖방향] 좌표 0,0 시작 2차원 배열 계산이 편한경우 */

    char map1[5][10] = {
        "01234",
        "1abcd",
        "2efgh",
        "3ijkl",
        "4mnop"};

    int rowSZ = sizeof map1[0];
    int colSZ = sizeof map1 / rowSZ; // [1 시작 정수 계산 사용]
    int y_MaxIdx = colSZ - 1;        // [0 시작 index 계산 사용] 행 마지막 인덱스
    int block_sz = 2;                 // 열의 블록 한칸 사이즈(띄어쓰기 고려)
    printf("2차원 맵 사이즈: %ld, 행 사이즈: %d\n\n", sizeof map1, rowSZ);

    // [1] 키 입력
    int x_Input = 1; // x 축으로 x칸
    int y_Input = 3; // y 축으로 y칸

    // [2] 케릭터 위치 초기값
    int _x = 0;
    int _y = 0;

    // [3] 키 입력값이 유효하면, 케릭터 좌표값 계산후 할당
    _x = x_Input;
    _y = y_Input;
    

    // [4] 맵 출력 시, 배열에 공백이 없다면, 
    // 컬러 아이콘은 글자2.5~3개 정도로 표시되므로 중첩되어 깨짐. 3+양쪽 공백 1칸 출력시 추가해야 함
    char level[5][5] = {"🤺", "🏇", "♖ ", "♕ ", "♔ "};

    for (size_t i = 0; i < colSZ; i++)
    {
        for (size_t j = 0; j < rowSZ; j++)
        {
            if(i == _y && j == _x)
                printf("%5s", level[1]);
            else
                printf("%3c", map1[i][j]);
        }
        printf("\n");
    }
}