2019년 5월 11일 토요일

국비 교육 : 게임 프로그래밍 033일

33일 차 교육 내용 메모를 작성해 본다.
이날 교육은 리스트에 대한 설명 및 구현에 대한 강의가 이루어졌다.


선형 리스트
- vector , 동적배열 , DArray
- 데이터가 물리적으로 연결되어 있다.
- 임의 접근이 중요할 경우 사용

연결 리스트
- 삽입, 삭제가 중요한 경우 사용
- 내부 구현은 비선형, 데이터의 구성은 선형
- '노드'라는 단위구조를 가짐 (데이터, 연결부(다음 노드 정보) )
- 단방향 연결 리스트, 양방향 연결 리스트, 원형 연결 리스트


그리고 단방향, 양방향 연결 리스트를 실제로 구현해 보는 실습 시간을 가졌다.

국비 교육 : 게임 프로그래밍 032일

32일 차 교육 시 작성된 메모를 작성해 본다.

충돌 알고리즘, 자료구조, 선형보간에 대한 내용이 메모되어 있다.


기초 충돌
- 점 ↔ 사각형
 (left < x && x < right) && (top  < y && y < bottom)
- 사각형 ↔ 사각형
 (left < right`  && left` < right) && (top  < bottom` && top`  < bottom)
- 점 ↔ 원
 Length = sqrt( pow(x-x`,2) + pow(y-y`,2) );
 Radius = (right - left) / 2;
 Length < Radius
- 원 ↔ 원
 Length = sqrt( pow(x-x`,2) + pow(y-y`,2) );
 Radius1 = (right  - left ) / 2;
 Radius2 = (right` - left`) / 2;
 Length < Radius1 + Radius2


자료구조
- 자료를 효율적으로 이용할 수 있도록 컴퓨터에 저장하는 방법

- 스택(LIFO) : 구현이 쉬우며 최신 데이터를 사용하는데 적용
- 큐(FIFO) : 최신 데이터가 나중에 사용하는데 적용
- deck : 양방향 삭제 가능
- 선형 리스트
- 연결 리스트


선형보간법
- 시작점, 끝점을 기준으로 중간값을 예측하는 알고리즘의 일종










- 예측하는 보간 방식이 선형이기 때문에 선형 보간법
- 시작점 * ( 1- 진행 비율) + 끝점 * 진행 비율


이상과 같은 내용이 메모되어 있다.
되돌아 보니 이 날은 하루에 참 많은 내용이 교육 된 것 같다.

국비 교육 : 게임 프로그래밍 031일

31일 차 교육 내용 메모를 옮겨 본다.
다양한 정렬 알고리즘에 대한 설명과 예제 구현에 대한 교육이었던 것 같다.

- 무작위의 n개 숫자를 선정하기
- 선정된 숫자를 오름(내림)차순으로 정렬하기


위 내용에 대한 예제 프로젝트를 진행한 것으로 판단된다.
돌이켜 보니 정렬 알고리즘에 대한 강의가 이리 짧게 끝났나 싶기도 하다.

2019년 5월 10일 금요일

국비 교육 : 게임 프로그래밍 030일

30일 차 교육 내용 메모를 옮겨 본다.
메모 내용을 보니 템플릿에 대한 강의가 이루어졌다.


템플릿 : template<>로 선언한다
- template<typename T>
- template 문법을 사용하여 함수 오버로딩을 컴파일러에 위임하는 방법


함수 템플릿
- 함수명<float>( ~ );  ← 형태로 선언해 사용할 수 있다
- 위 선언은 template의 매개변수 type을 float로 강제해 사용한다.

클래스 템플릿
template<typename T>
class abc
{
     public :
     T a = 0;  ← 멤버 변수를 템플릿 화 시킴
}


메모한 내용은 적지만 아마도 실습 프로젝트오 템플릿에 대한 설명이 이루어진 것 같다.
그리고 다양한 정렬이 어떤 알고리즘으로 어떤 구현 방식과 효율이 있는지에 대한 조사가 숙제로 나왔다.

국비 교육 : 게임 프로그래밍 029일

29일 차 교육 내용 메모를 옮겨 본다.
콘솔상에서의 출력 하는 기능과 이전 내용에 대한 강의가 이루어 졌다.

#include <iomanip> 선언을 통한 iostream cout시 기능들

setw(최소자릿수)
- cout << setw(최소자릿수) << 1 << endl;
- 자릿수로 5을 입력한 경우 : பபபப1 형태로 빈공간을 포함해 출력
- setw() 의 경우 선언 뒤쪽 1개만 영향을 준다.

- cout<<left<<.. 등을 이용해 문자 정렬이 가능하다.
- 정렬은 left , right , internal 세가지가 있다.

setfill('문자')
- 공란을 대체할 문자를 입력해 출력 되도록 한다.

showbase
- 숫자 출력시 진법 접두어(0 , 0x)를 표시 한다.

setprecision(자리수)
- 끝자리를 반올림 하여 출력 한다.

cin.clear()
- 에러가 있다는 사실을 지운다.

cin.ignore(글자수, 타겟);
- 글자수 : 버리기 위해 읽어드릴 문자의 개수 또는 버릴 문자의 수
 (글자 수 만큼 입력 시 버퍼가 비워진다.)
- 타겟 : 타겟 된 글자가 입력 되면 버퍼를 비운다.
 (입력되는 글자 중 타겟이 있는 경우 버퍼는 버려진다.)

                               

멤버 이니셜라이저
- 상수, 레퍼런스 변수, 인자 있는 부모 생성자, 자신의 다른 생성자

함수 오버라이딩
- 부모의 멤버함수를 재정의 하는 문법
- [반환 타입] [함수명](매개변수)가 모두 동일해야 된다.

부모의 클래스 포인터는 일괄 관리를 위해 사용 된다.
- 부모 클래스 포인터에 자식 클래스를 넣어 배열로 사용 할 수도 있다.

가상함수는 부모에 붙인다.
               오버라이딩 되어있어야 된다.
               virtual 키워드를 사용 한다.

가상함수와 순가상함수 두 종류가 존재 한다.

다형성(동일한 멤버함수)
- 동일한 인터페이스(결합부, 매개체)를 사용하여 다른 기능을 발휘
- 상호작용을 위해 두 개체간 의사소통이 가능하도록 하는 매개체

다형성 구현시 포인트
1. 초기 설계 중요(객체간의 관계 구축)
2. 부모 클래스 포인터를 활용하여 코드 구성
3. 부모 클래스 포인터에 객체 주소를 변경하는 코드 필요


이와 같이 iomanip 을 이용한 출력과 이전 강의 복습으로 교육이 진행 됬다.
숙제로 함수 포인터, 함수자, 람다식 에 대해 공부해 오라고 했다.

국비 교육 : 게임 프로그래밍 028일

28일 차 교육 내용 메모를 옮겨 본다.

왠일인지 작성된 내용이 거의 없다. 


클래스 상속, 동적 생성을 이용한 예제 프로그램 작성을 자습한 것으로 파악 된다.

그래서 메모 내용을 옮기는 것으로는 쓸 내용이 없다.



2019년 5월 9일 목요일

국비 교육 : 게임 프로그래밍 027일

27일 차 교육 내용 메모를 옮겨 본다.
함수 선언과 클래스 상속에 대한 내용이 작성되어 있다. 

함수 선언(프로토타입)을 신경 쓰자
전역 함수로 선언한 녀석들을 헤더에 선언을 해줘야 문제없이 돌아간다.

클래스 상속
- 문법 2개, 기능 1개의 상속 관련 전용 기능이 있다.
- 기존의 클래스로 새로운 클래스를 만드는 문법

상속 방법
class 클래스 명 : public 클래스 명
{
}


1. 상속에서의 접근제어 지정
- 상속받는 멤버의 최소 접근 제어
- public : 부모의 최소가 public
- protected : 부모의 최소가 protected
- private : 부모의 최소가 private
- 일반적으로 public으로 선언하며 마지막 상속의 경우만 private로 선언

상속의 종류
- 연속 상속 : A ← B ← C ← D
- 다중 상속 : A ←┐
        ┠ C
      B ←┘

상속의 사용의미
- 재활용
 1) 의미의 확장
 2) 의미의 세분화


2. 오버라이딩
- 클래스 상속 시 똑같은 함수를 선언해 사용하는 것을 의미
- 부모와 같은 함수(프로토타입이 동일)를 자식도 만들어 사용하는 것
 (재정의해 만드는 것)
- 클래스 상속 간에서 부모 클래스의 멤버 함수를 자식 클래스가 재정의하는 것
 (같은 프로토타입인데 기능이 다르다)


3. 부모 포인터 변수
- 자식 개체의 주소를 저장할 수 있다.

부모 포인터 변수 활용
- 여러 자식 클래스의 객체를 하나의 자료형으로 관리
- 부모 포인터 변수로 모든 자식 객체의 저장 가능
 예) 몬스터 *p = 고블린, 오크, 트롤...

문제
- 포인터는 자신의 자료형으로 주소의 형태를 파악한다.
- 포인터는 자신의 주소가 내 자료형일 것이라 짐작한다.
- 즉, 부모 메모리를 가리킨다.

필요한 것
- 부모의 포인터 변수에서 자식의 함수를 호출하는 방법이 필요하다.


4. 바인딩
- 함수의 선언과 정의를 결합하는 과정
- 컴파일 시점에서 고정되는 것을 정적 바인딩
- 호출 시점에 호출 위치를 파악하는 것을 동적 바인딩

vitual 키워드
- 동적 바인딩으로 함수를 구성하게 하는 키워드
- 클래스 내에 가상함수가 있는 경우 가상 함수 테이블이라는 함수 위치 저장소가 생성
 1) 부모의 함수에 virtual 키워드를 추가
 2) 부모의 가상함수를 자식이 오버라이딩
 3) 부모 포인터로 가상함수 호출 시 자식 함수 호출

순 가상함수
- virtual void Func() = 0;
- 함수 선언 뒤에 "= 0 "을 붙인 것
- 순 가상함수가 있으면 해당 클래스를 이용한 변수 선언이 안 된다.
- 자식 클래스에서 해당 함수의 오버라이딩을 강제한다.


이상과 같이 클래스 상속과 관련된 메모된 내용을 옮겨 보았다.
함수의 선언보다 클래스 상속에 대한 내용이 주를 이룬 것으로 보아, 함수 선언은 짧게 훑고 지나 간듯하다.

Unity - Firebase 연동 (Analytics, AdMob)

버전 : firebase_unity_sdk_6.5.0.zip 게임에서 통계 측정 및 광고 추적을 위해 Firebase 을 연동한다. 앞서 [Unity - GPGS 와 Admob 연동 및 배포 준비 작업]  연동 이후에 작업을 진행 한다. 유니...