Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | |||||
| 3 | 4 | 5 | 6 | 7 | 8 | 9 |
| 10 | 11 | 12 | 13 | 14 | 15 | 16 |
| 17 | 18 | 19 | 20 | 21 | 22 | 23 |
| 24 | 25 | 26 | 27 | 28 | 29 | 30 |
| 31 |
Tags
- 코딩테스트
- UE5
- 내가해냄
- 코딩
- 미라클모닝
- 언리얼
- 구조체포인터
- 링크드리스트
- 개발자
- 구조체
- c++자료구조
- 오늘의에러
- permutation
- 커스텀로그
- fstring
- 개발
- unreal
- 연산자오버로딩
- 얌얌코딩
- dfs
- 언리얼로그
- TPS
- 재귀함수
- 탐색기법
- 게임프로그래밍
- 자료구조
- 프로그래밍
- 게임개발
- C++
- 백준
Archives
- Today
- Total
All is well
[YYBASIC0203/얌얌코딩] Direct 기법, 2중 포인터, 2차원 배열 본문
Direct 기법
Direct 기법은 방향을 표현하기 위해 2차원 배열을 사용하는 기법으로, 각 좌표의 변화량을 인덱스를 통해 지정합니다.
- 이중 포인터와 배열을 이용하면
- 효율적으로 방향을 저장할 수 있고
- 반복문을 통해 각 방향에 맞는 새로운 좌표를 쉽게 계산할 수 있습니다.
- ex01) 좌표 (1, 1)을 기준으로 상하좌우 네 방향의 좌표를 반복문을 통해 구할 수 있음
- ex02) 여덟 방향을 사용하여 2D 게임에서 캐릭터의 움직임을 효과적으로 처리할 수 있음
- 게임에서 예외 처리를 통해 캐릭터의 위치가 벗어나지 않도록 하는 로직을 포함시킬 수 있습니다
게임에서 캐릭터의 움직임
- 3D 게임에서 캐릭터의 움직임은 2차원 배열을 기반으로 하여 방향을 체크해 결정됩니다.
- 캐릭터가 움직이는 부분은 바닥에 한정되어 있어서 2차원 구조로 이해할 수 있습니다.
- 따라서 2D와 유사한 방식으로 몬스터가 플레이어를 인식하고, 장애물을 회피하는 방식으로 동작할 수 있는 구조가 적용됩니다.
이중 포인터
- 포인터 변수란 주소값을 저장하는 변수 타입입니다.
- 이중 포인터란 주소를 저장할 수 있는 포인터 변수로, 이를 통해 포인터 변수의 주소를 저장할 수 있습니다.
// YYBASIC02_03
#include <iostream>
using namespace std;
int map[5][5] =
{
1,3,5,1,5,
3,7,9,5,8,
4,5,3,9,7,
2,7,6,1,9,
1,6,2,3,8
};
int pattern[2][2] =
{
3, 5,
7, 9
};
int isPattern(int dY, int dX)
{
for (size_t y = 0; y < 2; y++)
{
for(size_t x = 0; x < 2; x++)
if(map[dY + y][dX + x] != pattern[y][x])
return 0;
}
return 1;
}
void main()
{
/* 방향을 표현하기 위한 코딩 방법 */
// 타일맵 게임에서 많이 사용 - 스타듀밸리
// 3D 게임에서 방향을 찾는 것도 이와 같음
// └ 위에서 보았을 때 방향을 체크하여 갈 수 있는 부분, 없는 부분 확인
// └ 이 기술이 바로 navMesh
#pragma region DirectionArray
int arr[3][3] =
{
1,2,3,
4,5,6,
7,8,9
};
// 기준으로부터 얼만큼 떨어져 있는지(=방향)을 나타내는 배열
int dir[4][2] =
{
-1, 0,
1, 0,
0, -1,
0, 1
};
// 기준 좌표 - (1,1)이라 가정
int x = 1, y = 1;
int sum = 0;
for (size_t i = 0; i < 4; i++)
{
int newX = x + dir[i][1];
int newY = y + dir[i][0];
// newX, newY가 범위를 넘어가는지 체크 - isValid
if( ( newX >= 0 && newX <= 2 ) && (newY >= 0 && newY <= 2 ) )
sum += arr[newX][newY];
}
#pragma endregion
/* 이중 포인터 */
// 포인터 변수 : 변수의 주소값을 저장하는 변수 타입
// 이중 포인터 : 포인터의 주소값을 저장하는 변수 타입
#pragma region DoublePointer
int a = 100;
int* p = &a;
int** pp = &p;
*(*pp) = 200; // a의 값이 200이 됨
#pragma endregion
/* 구조체, 클래스를 이용한 배열 */
// 구조체, 클래스를 원소로 갖는 배열도 선언이 가능하다
#pragma region StructArray
struct ABC
{
int a, b;
};
ABC ttt[3];
ttt[0].a = 100;
#pragma endregion
/* 2중 for문에서 패턴 찾기 */
#pragma region Find Pattern in a Nested for loop
int result = 0;
for (size_t y = 0; y < 4; y++)
for (size_t x = 0; x < 4; x++)
result += isPattern(y, x);
cout << "\n< Find Pattern in Nested for loop > " << endl;
if(result != 0)
cout << "found pattern : " << result << endl;
else
cout << "didn't found pattern" << endl;
#pragma endregion
}
LV04 Direct기법, 2중 포인터, 2차원 배열 패턴찾기
'C++ > YYBASIC' 카테고리의 다른 글
| [YYBASIC0205/얌얌코딩] cstring 라이브러리 (0) | 2025.02.06 |
|---|---|
| [YYBASIC0204/얌얌코딩] 재귀 함수에 대한 착각과 진실 (0) | 2025.02.05 |
| [YYBASIC0202/얌얌코딩] DAT(Direct Addressing Table) - Hash Table (0) | 2025.02.04 |
| [YYBASIC0201/얌얌코딩] 기본기 복습 (0) | 2025.02.04 |
| [YYBASIC0105/얌얌코딩] 간단한 버전의 std::string 클래스 만들어보기 (0) | 2025.02.03 |