게임 개발/언리얼 강의 (클라-서버)
-
#include using namespace std; struct StatInfo { int hp = 0xAAAAAAAA; int attack = 0xBBBBBBBB; int defence = 0xDDDDDDDD; }; int main() { // TYPE 이름[개수]; // 배열의 크기는 상수여야 함 (VC 컴파일러 기준, gcc는 통과함) const int MONSTER_COUNT = 10; StatInfo monsters[MONSTER_COUNT]; // 여태껏 변수들의 [이름]은 바구니의 이름이었음 // 배열은 [이름] 조금 다르게 동작한다. StatInfo players[10]; // players = monsters; // error // 그럼 배열의 이름은 뭐지? // 포인터다. 즉, 배열의..
[언리얼 MMORPG pt1] 배열 기초#include using namespace std; struct StatInfo { int hp = 0xAAAAAAAA; int attack = 0xBBBBBBBB; int defence = 0xDDDDDDDD; }; int main() { // TYPE 이름[개수]; // 배열의 크기는 상수여야 함 (VC 컴파일러 기준, gcc는 통과함) const int MONSTER_COUNT = 10; StatInfo monsters[MONSTER_COUNT]; // 여태껏 변수들의 [이름]은 바구니의 이름이었음 // 배열은 [이름] 조금 다르게 동작한다. StatInfo players[10]; // players = monsters; // error // 그럼 배열의 이름은 뭐지? // 포인터다. 즉, 배열의..
2023.10.26 -
포인터 vs 참조 -성능: 똑같음 편의성: 참조 승! 1. 편의성 관련 편의성이 좋다는게 꼭 장점만은 아니다 포인터는 주소를 넘기니 확실하게 원본을 넘긴다는 힌트를 줄 수 있는데, 참조는 자연스럽게 모르고 지나칠 수도 있음 StatInfo info; // 포인터 PrintInfo(&info); // 참조 PrintInfo(info); 만약 신입이 와서 info.hp = 10000; 이런식으로 조져버릴수도 있다. -> const 사용해서 방지 const 사용 별(*)기준, 앞에다 붙이는것과 뒤에 붙이는게 다름 별 뒤에 붙인다면? StatInfo* const info info = &globalInfo; 가 막힘 info라는 바구니의 내용물[주소]을 바꾸지 못하게 info 주소값을 갖는 바구니 -> 주소값이 ..
[언리얼 MMORPG pt1] 포인터 vs 참조포인터 vs 참조 -성능: 똑같음 편의성: 참조 승! 1. 편의성 관련 편의성이 좋다는게 꼭 장점만은 아니다 포인터는 주소를 넘기니 확실하게 원본을 넘긴다는 힌트를 줄 수 있는데, 참조는 자연스럽게 모르고 지나칠 수도 있음 StatInfo info; // 포인터 PrintInfo(&info); // 참조 PrintInfo(info); 만약 신입이 와서 info.hp = 10000; 이런식으로 조져버릴수도 있다. -> const 사용해서 방지 const 사용 별(*)기준, 앞에다 붙이는것과 뒤에 붙이는게 다름 별 뒤에 붙인다면? StatInfo* const info info = &globalInfo; 가 막힘 info라는 바구니의 내용물[주소]을 바꾸지 못하게 info 주소값을 갖는 바구니 -> 주소값이 ..
2023.10.25 -
포인터 기초 #include using namespace std; // 오늘의 주제: 포인터 void SetHP(int* hp) { *hp = 100; } int main() { int number = 1; int hp = 1; SetHP(&hp); // 포인터로 주소를 넘겨줘야 값을 변경가능 // TYPE* 변수명; // 일단 2가지 요소 // - TYPE // - * // 바구니는 바구니인데... // [주소를 저장하는 바구니다!] // 참고) 포인터라는 바구니는 4바이트(32비트) 또는 8바이트(64비트) 크기 고정이다. int* ptr = &number; // 근데 남의 주소를 갖고 뭘 하라는거지? // 추가 문법: [주소를 저장하는 바구니]가 가리키는 주소로 가서 무엇인가를 해라! // *변수이..
[언리얼 MMORPG pt1] 포인터포인터 기초 #include using namespace std; // 오늘의 주제: 포인터 void SetHP(int* hp) { *hp = 100; } int main() { int number = 1; int hp = 1; SetHP(&hp); // 포인터로 주소를 넘겨줘야 값을 변경가능 // TYPE* 변수명; // 일단 2가지 요소 // - TYPE // - * // 바구니는 바구니인데... // [주소를 저장하는 바구니다!] // 참고) 포인터라는 바구니는 4바이트(32비트) 또는 8바이트(64비트) 크기 고정이다. int* ptr = &number; // 근데 남의 주소를 갖고 뭘 하라는거지? // 추가 문법: [주소를 저장하는 바구니]가 가리키는 주소로 가서 무엇인가를 해라! // *변수이..
2023.10.24 -
1. 함수 기초 생략 2. 스택 프레임 스택은 높은 메모리주소에서 -> 낮은 메모리 주소로 진행 프로그램이 실행될 때 스택 메모리 크기를 지정함 만약 함수를 무한정 호출하면 스택오버플로우 발생 가능 (재귀함수 등) 3. 지역 변수와 값 전달 전역변수: DATA 영역에 할당. (초기화 여부, const 여부 등에 따라 .data, .bss, .rodata 등에 할당) - 전역변수는 디버깅하기 어렵기 때문에 웬만하면 사용 지양. 지역변수: STACK 영역에 할당. 4. 호출 스택 (call stack) #include using namespace std; // 오늘의 주제: 호출 스택 // 디버거에서 call stack 확인 가능 // 함수 선언 // 나중에 함수 선언부만 별도의 파일로 관리하게 될 것임. ..
[언리얼 MMORPG pt1] 함수1. 함수 기초 생략 2. 스택 프레임 스택은 높은 메모리주소에서 -> 낮은 메모리 주소로 진행 프로그램이 실행될 때 스택 메모리 크기를 지정함 만약 함수를 무한정 호출하면 스택오버플로우 발생 가능 (재귀함수 등) 3. 지역 변수와 값 전달 전역변수: DATA 영역에 할당. (초기화 여부, const 여부 등에 따라 .data, .bss, .rodata 등에 할당) - 전역변수는 디버깅하기 어렵기 때문에 웬만하면 사용 지양. 지역변수: STACK 영역에 할당. 4. 호출 스택 (call stack) #include using namespace std; // 오늘의 주제: 호출 스택 // 디버거에서 call stack 확인 가능 // 함수 선언 // 나중에 함수 선언부만 별도의 파일로 관리하게 될 것임. ..
2023.10.23 -
1. 분기문 스킵 2. 반복문 while, do while, for, break, continue 3. 열거형 #include using namespace std; // 상수인건 알겠는데, 너무 따로 노는 느낌? // 하나의 셋트인데? // 경우에 따라서 어셈블리 코드를 까 보면 메모리에 변수로 올라가는 경우도 있음 // 보통은 상수로 최적화 되긴 함 const int SICCERS = 1; const int ROCK = 2; const int PAPER = 3; // 숫자를 지정 안하면 첫 값음 0부터 시작 // 그 다음 값들은 이전 값 + 1 // const 보다 열거형이 더 선호됨. 메모리에 올라가지 않기 때문. (메모리상으로 더 이점이 있음) // 모던 c++ 에서는 enum class 를 사용함..
[언리얼 MMORPG pt1] 코드의 흐름 제어1. 분기문 스킵 2. 반복문 while, do while, for, break, continue 3. 열거형 #include using namespace std; // 상수인건 알겠는데, 너무 따로 노는 느낌? // 하나의 셋트인데? // 경우에 따라서 어셈블리 코드를 까 보면 메모리에 변수로 올라가는 경우도 있음 // 보통은 상수로 최적화 되긴 함 const int SICCERS = 1; const int ROCK = 2; const int PAPER = 3; // 숫자를 지정 안하면 첫 값음 0부터 시작 // 그 다음 값들은 이전 값 + 1 // const 보다 열거형이 더 선호됨. 메모리에 올라가지 않기 때문. (메모리상으로 더 이점이 있음) // 모던 c++ 에서는 enum class 를 사용함..
2023.10.23 -
1. 환경설정 비주얼 스튜디오 사용 2. 정수 #include int hp = 100; // 초기값이 0이거나, 초기값이 없는 변수라면 .bss 섹션에 저장됨 // signed 는 생략가능 char a; // 1바이트 (-128 ~ 127) short b; // 2바이트 (-32768 ~ 32767) int c; // 4바이트 (-2147483648 ~ 2147483647) __int64 d; // 8바이트 long long d; (−9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807) unsigned char ua; // 1바이트 (0 ~ 255) unsigned short ub; // 2바이트 (0 ~ 65535) unsigned int uc; // 4바이..
[언리얼 MMORPG pt1] 데이터 갖고 놀기1. 환경설정 비주얼 스튜디오 사용 2. 정수 #include int hp = 100; // 초기값이 0이거나, 초기값이 없는 변수라면 .bss 섹션에 저장됨 // signed 는 생략가능 char a; // 1바이트 (-128 ~ 127) short b; // 2바이트 (-32768 ~ 32767) int c; // 4바이트 (-2147483648 ~ 2147483647) __int64 d; // 8바이트 long long d; (−9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807) unsigned char ua; // 1바이트 (0 ~ 255) unsigned short ub; // 2바이트 (0 ~ 65535) unsigned int uc; // 4바이..
2023.10.22