2019년 3월 30일 토요일

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

25일 차 교육 메모를 옮겨본다.

클래스에 대한 내용으로 메모가 작성되어 있다.


클래스 선언은 header로 뺄 수 있다.

클래스 함수는 선언과 함수가 같이 관리 되어야 한다.

클래스. 멤버 함수 선언 멤버 함수 작성을 여러 파일에 나누어 작성할 수 있다.
- 클래스 본체는 header에 멤버 함수 내용은 cpp에 분리해 관리


얇은 복사
- 클래스는 객체 간 기본 대입 연산자(=)를 지원한다.
- 지원되는 연산자로 객체 간 정보를 대입하는 행위를 의미한다.
- 단, 동적 할당한 포인터 변수의 경우 문제가 생긴다. (메모리 누수)
- 생성자, 소멸자를 이용해 동적 할당의 선언과 해제를 관리해야 한다.
- 방지법
1) 멤버 변수에 동적할당을 안 쓴다.
2) 문법적 객체 간 복사를 방지한다.


깊은 복사
- 대입 연산자와 복사 생성자를 오버로딩 한다.
- 초기화 및 대입에 대한 연산자 오버로딩을 구현한다.
- 동적 할당할 개체 → 신규 개체로 1:1 값 복사를 진행한다.


메모 내용을 이렇게 옮겨 적어 보니, 아주 어정쩡한 내용으로 작성됐다.
파일 관리 및 선언에 대한 내용과 함께 클래스에 대한 설명, 변수 복사와 관련된 내용이 교육된 거 같은데 정리된 내용으로는 아주 부실해 보인다.


2019년 3월 28일 목요일

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

24일 차 교육 내용 메모를 옮겨 적어 본다.

멤버 연산자와 연산자 오버로드에 대한 내용이 무지무지 간략히 작성되어 있다.


멤버 연산자
- 클래스의 연산을 위해 지원되지 않는 연산자를 제작할 수 있다.

연산자 오버로드
- 연산자로 지원하지 않는 멤버(클래스)의 연산을 위해 연산 기호 처리를 할 수 있도록 지원해 주는 함수 기능


여기까지가 메모 내용의 끝이다.
멤버 연산자를 제작해 클래스 변수들을 이용한 연산자 처리에 대한 내용이 강의 되지 않았나 생각 든다.

예를 들어 vector2 클래스를 제작하고 vector2 클래스 변수 간의 연산을 기호로 처리할 수 있도록 하는 프로그래밍을 하지 않았나 싶다.


2019년 3월 27일 수요일

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

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

클래스에 대한 내용이 메모로 작성되어 있다.


절차 지향 프로그래밍
- 위에서 아래로(절차식) 코드를 작성해 나간다.

개체 지향 프로그래밍
- 모든 데이터를 객체 단위로 처리하는 프로그래밍 방식
- 객체 : 데이터 + 기능


클래스 란.
- 사용자 정의 자료형
- 구조체의 확장형
- 데이터 + 기능

접근 제어 지정자
- private : 클래스 내부 접근
- protected : 상속한 클래스 접근
- public : 외부 사용 가능

this 포인터
- 멤버 함수 내에 존재한다.
- 호출한 변수의 주소를 저장하고 있는 상수 포인터

생성자 함수(생성자)
- 객체 생성 후 바로 자동으로 호출되는 함수
- 함수 오버로딩이 가능
- 반환 자료형이 없음

소멸자
- 객체가 소멸하기 직전에 자동 호출되는 함수
- 함수 오버로딩이 불가능

멤버 이니셜라이저
- 멤버변수 초기화 문법
- 일반 멤버 변수, const 상수 , 레퍼런스 변수
- 상속 관계에서의 부모의 생성자
- 자신의 다른 생성자(생성자 위임)


이상과 같이 기본적인 클래스의 선언 및 사용과 관련되어 필요한 문법적 내용이 작성되어있다.

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

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

표준 입출력과 파일 입출력에 대한 내용이 작성되어 있다.


표준 입출력
- cout → 출력 버퍼 → 모니터
- 키보드 → 입력 버퍼 → cin
- 이 때 버퍼를 stream 이라고 호칭한다.


파일 입출력
- 소스 코드 → 파일 버퍼 → 파일 : SAVE, 저장, 출력
- 파일 → 파일 버퍼 → 소스 코드 : LOAD, 불러오기, 입력
- 이 때 파일 버퍼를 fstream 이라 호칭 한다.
- #include<fstream> 을 포함
- ofstream 클래스 : 내보내는데 사용
- ifstream 클래스 : 들여오는데 사용


이런 입출력 구조를 가지고 Save/Load 되는 프로그램 작성 실습을 한 것으로 보인다.
이렇게 다시 정리해 보는데 교육 순서가 평범한 C++ 강의는 아닌 것 같다.



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

21일 차 교육 시 정리된 메모를 옮겨본다.

작성된 내용이 전처리기와 사용자 정의 타입에 관해서 설명되어 있다.


전처리기
- #if , #define 등에 대한 내용을 확인해 보도록 한다.


사용자 정의 타입
- struct {  } , enum { } , union { } 등에 대한 내용을 확인해 보도록 한다.

구조체
- struct 이름 { };  형태로 작성됨
- 패킹으로 인해 가장 큰 크기의 자료형으로 구조체의 크기가 선언된다.
- 이 때 사용되지 않은 빈 공간을 패딩 비트라 부른다.

struct dataA
{
    int     index;     ← 4 byte
    double  appValue;  ← 8 byte
    int     count;     ← 4 byte
};

struct dataB
{
    int     index;     ← 4 byte 
    char    rank;      ← 1 byte (index의 남은 4 byte 영역으로 붙음)
    double  appValue;  ← 8 byte
    int     count;     ← 4 byte
};
dataA , dataB 구조체 모두 크기는 24 byte 다.


이렇게 전처리기와 사용자 정의 타입에 대한 교육이 진행된 것 같다.
교육이 책에 작성된 내용 위주로 진행됐는지 메모 내용은 매우 적다.

2019년 3월 26일 화요일

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

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

저번 교육에 이어서 동적 할당에 대한 내용이 계속 교육되었다. 그리고 디버깅과 파일 분할 방식에 대한 내용이 교육되었다.


데이터를 정확히 제어하기 위해서는 소멸, 해제 등에 신경을 써야 한다.
동적 배열은 주소화 함께 길이 정보를 같이 알고 있기에 해제하면 관련된 메모리 영역이 초기화된다.

delete[] values;
values = nullptr;

항상 변수를 null로 초기화하는 습관을 들여야 한다.



버그
- 논리 오류 또는 코드적 오류

디버그
- 소스 코드의 버그를 찾는 행위

디버깅
- 디버그를 하는 행위

디버그 시작 → 단계별 코드 실행 → 중단점 BreakPoint
- VS에서 디버그의 라인별 실행은 F10을 주로 사용한다.
- F11은 내부정의까지 훑고 진행한다.

조사식
- VS에서 지정한 변수를 입력해서 디버깅 시 값을 확인할 수 있는 기능


파일 분할
- 여러 CPP 파일을 사용하는 것을 의미한다.
- 빌드하면 컴파일된 모든 파일은 1개의 파일로 합쳐진다.
- 컴파일되서 한자리에 모인 뒤 링킹을 진행한다.
- 이를 위해 전방선언(프로토타입)이 되어 있어야 한다.

전역 변수
- 두 파일에 동일한 전역 변수가 있을 경우 에러가 발생한다.
- 주 : 선언 , 부 : extern 선언의 방식으로 사용해야 한다.

정적 전역 변수는 해당 cpp 에서만 사용할 수 있다.
다른 cpp에서 선언해 사용할 수 없다.


전처리기(선행 처리기)
- 컴파일 이전에 실행되는 문법
- #이 붙어 선언
- 뒤에 ';'이 붙지 않음
- 한 줄에 하나의 전처리만 가능
- \기호를 사용해 하나의 전처리를 여러 줄에 선언하는 것이 가능

빌드 단계
- 코드 작성 → 컴파일 시작 → 전처리 → 컴파일 → 링킹 → 빌드

#include ○○○○
- <   > 로 선언할 경우 지정된 VC++ 설정된 경로 기준
- "    " 로 선언할 경우 현재 프로젝트의 경로를 기준

상대 경로
- 실행 파일이 있는 경로 기준
- data/abc.jpg

절대 경로
- 볼륨명(드라이브명)부터 시작하는 경로
- c:/data/abc.jpg


인텔리센스단축키 : ctrl + space bar


헤더 파일
- include를 하기 위한 목적 파일
- 함수 프로토타입을 정의
- define 이나 다른 전처리기를 모아둠


아마도 이날까지 한 개의 cpp 파일로 구현을 해왔고, 이를 헤더와 별개 cpp로 분할해 구현하는 방식이 교육된 것 같다.


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

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

C++의 메모리와 관련된 내용이 교육 된 것 같다.


정적 할당
- 지금까지 선언한 모든 변수 선언이 정적 할당
- 선언과 동시에 크기가 정해지며, 중간에 바꿀 수 없다.
- 소멸할 때 운영체제가 자동으로 할당한 메모리를 회수

동적 할당
- 포인터 변수를 선언한다.
- 임의의 공간을 원하는 만큼 할당받고 그 주소를 포인터에 저장한다.
- 포인터를 가지고 할당받은 메모리 공간을 사용한다.
- 다 쓰면 해제해야 한다.

메모리 영역
- 코드 : 소스 코드, 변경 불필요(필요하면 IDE 사용), 코드/함수/제어문
- 데이터 : 프로그램 생성→종료까지 살아 있는 항목, 상수/전역변수/static
- 스택 : 지역변수의 선언과 해제가 나타나는 곳, 지역변수/매개변수/함수의 호출 위치
- 힙 : 동적 할당 데이터를 저장하는 공간으로 실시간 변수 할당


동적 할당 기능을 이용해 지금까지 만들어온 과제들을 확장 가능한 구조로 개선하도록 한다.


이상과 같이 동적 할당 기능을 이용해 데이터의 자유로운 확장/축소가 가능한 프로그램 구현 방식에 대한 내용이 교육되었다. 그리고 지금까지 해온 과제를 동적 할당이 가능하도록 하는 시간으로 교육이 마무리된 거 같다.


2019년 3월 23일 토요일

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

18일 차 교육 내용을 정리해 본다.

함수에 대한 추가 내용과 텍스트를 제어하는 데 사용 하는 기능이 작성되어 있다.


함수 오버로딩
- 반환 자료형과 관계없이 함수명은 같고, 매개변수가 다른 함수 정의법
- 궁극적으로 호출 형태가 다른 함수 정의법

디폴트 매개변수
- 함수 선언부에 매개변수의 기본값을 지정해 주는 것을 말함
- 디폴트 매개 변수는 오른쪽에서 왼쪽으로 선언된다.
 int add(int a , int b = 0 , int c = 0);
- 함수 오버로딩 형태에 주의해야 함
 int add(int a = 0 , int b = 0);
 void add();
 위와 같이 컴파일러가 선택하는 함수가 2가지 이상이 될 경우 사용 못 한다.


문자열 함수
- 문자열 = 문자 배열
- char sample[10] = "abc"
 sample의 길이는 3, 크기는 10인 문자열

문자열 변수 사용
- 대입 : a = "Hello";
- 증감 : a = a + "done";
- 비교 : a == "bye";
- 문자열을 위와 같이 사용하고 싶은 경우 문자열 함수를 이용한다.

문자열 함수
- 대입(copy) a = "Hello";    strcpy_s(dest , 크기 , src);
- 증가(cat)  a = a + "done";  strcat_s(dest , 크기 , src) 
- 비교(cmp) a == "bye";    strcmp(dest , src);
- 길이(len)  "hello"      strlen(src);


그리고 과제로 대입, 증가, 비교, 길이를 측정할 수 있는 함수를 직접 제작해 보도록 시간이 주어진 것 같다.


이상과 같이 함수와 텍스트 제어와 관련된 내용이 설명되었고, 텍스트 제어와 관련된 과제를 프로그래밍하는 것으로 하루 교육이 진행된 것 같다.


2019년 3월 22일 금요일

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

17일 차 교육 메모를 옮겨 본다.

콘솔 프로그래밍의 출력 화면을 좀 더 다듬기 위해 C 문법의 입력/출력 제어 방식이 교육된 거 같다. 그리고 프로그램의 호출방식에 대한 내용이 작성되어 있다.


C형 출력으로는 printf 함수를 사용한다.

이스케이프 시퀀스
- 문자 중에 '\'가 붙은 문자들
- 출력되지 않고, 기능을 수행하는 문자
- 한 글자 1byte로 취급한다.
- '\n'  : 개행
- '\t'  : tab 가로 탭
- '\a'  : beep 음 출력
- '\"'  : " 출력
- '\0'  : null 문자를 의미
- cout에 입력해도 적용된다.

서식 문자
- 출력 문자열에 특정 값을 대입하는 문자
- 앞에 % 가 붙음
- %d : 정수를 출력
- %f : 실수를 출력
- %s : 문자열
- 서식 문자 고급활용이 있으며, 각자 알아보도록 한다.

C형 입력으로는 scanf 함수를 사용한다.
- scanf 함수 보다는 scanf_s 함수를 사용하는 것을 권장한다.
- char형 입력 시 저장공간 길이를 넘쳐도 처리가 되도록 자체 방어 처리가 되어 있다.
- scanf("서식", &변수);


함수 : 명령의 모음
- 반환 자료형 함수명(매개 변수)
 {
   함수 몸통
 }

함수는 전방 선언을 통해 이런 함수가 있다고 알릴 수 있다.
- 전방 선언 = 함수의 원형 = 프로토타입
- 선언 형태 : 반환 자료형 함수명(매개 변수);

매개 변수
- 호출 시 외부변수의 값으로 초기화하는 함수의 지역 변수

지역
- {  } 로 구분되는 구역
- 구역 내 return; 는 함수의 종료를 의미

변수
- 지역 변수 : {  } 안에 선언되는 변수로 지역이 끝나면 소멸
- 전역 변수 : {  } 밖에 선언되는 변수로 프로그램 종료 시 소멸


재귀 호출, 재귀 함수
- 함수가 함수 내부에서 자기 자신을 호출하는 형태
- 장점 : 코드가 간편해진다. (특정 알고리즘에 한해서)
- 단점 : 느리다. (종료 프로세스 , 불필요한 조건)
   : 용량 낭비가 심하다. (메모리에 함수를 보관)
   : 디버깅이 어렵다.
- 주의점 : 종료 조건(재 호출조건)이 명확해야 한다.


호출 방식 : 호출 시 초기화 값에 대한 형태
- Call By Value : 값에 의한 호출 : 일반 변수
- Call By Address : 주소에 의한 호출 : 포인터 변수
- Call By Reference : 참조에 의한 호출 : 레퍼런스 변수
- 호출 방식의 구분은 외부 변수의 값을 함수 내부에서 변경하는지로 구분한다.
 (Call By Address, Call By Reference 는 변경 가능)

Reference 변수
- 기존의 변수에 별칭을 새로 지정하는 문법
- 특성상 초기화와 동시 선언되어야 됨
- 데이터형 & 변수명 = 변수;
 int count = 10;
 int &num = count;

Call By Value
- 값에 의한 호출
- 매개 변수가 일반 변수들
- 초기화 값이 값의 형태
- 함수 내부에서 외부 변수를 변경할 수 없음

Call By Address
- 주소에 의한 호출
- 매개 변수가 포인터 변수일 경우
- 초기화 값이 주솟값
- 주소 값이 변경할 변수의 주소인 경우에만 변경 가능

Call By Reference
- 참조에 의한 호출
- 매개 변수가 레퍼런스 변수인 경우
 -원격지의 변수가 되는 것이기에 값의 수정이 자유로움

int i = 0;
char data[10] = {};  ← 초기화를 하면 0값 즉 \0 의 문자가 입력되어 있다.
cin >> data;
char *a = s;
while(*(a+i))   ← 문자열의 값이 들어가서 while이 정상 동작하고, 
{          끝의 \0 항목 도달 시 while이 종료된다.
  코드 본체    이스케이프 문자 \0 는 0 과 같으며 false 처리됨
  i++
}

위 코드는 즉 아래와 같이 처리된다.

char data[10] = {};
cin >> data;
for( int i = 0 ; data[i] != 0 ; i++ )
{
  코드 본체 
} 

for를 이용한 반복문이 가능하며 char형에 대해 한시적으로 활용이 가능하다.

char형 배열을 이용한 반복문 활용이다.
이상과 같은 내용이 정리되어 있는데, 다른날에 비해 압도적으로 내용이 많다.
그리고 가장 혼돈되는 개념들이 동시에 설명 됐다.
다시 봐도 Call By ~ 에 대한 내용은 하루 강의가 된다고 습득이 되지 않았을 것 같은데 이후 다시 설명되는지는 모르겠다.



2019년 3월 21일 목요일

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

16차 교육 내용 메모를 정리해 본다.

C++에서 가장 난해한 개념이라 생각하는 포인터에 대해서 강의가 되었나 보다.


포인터
- 주소값을 저장, 변경할 수 있는 메모리 공간
- 값을 저장, 변경할 수 있는 메모리의 공간 = 변수
= 포인터 변수로 부를 수 있다.

메모리 주소를 저장할 수 있는 공간이며, 변수에 주소 위치가 저장된다.

주소 : 메모리상 변수 위치
주소값 : 포인터 변수에 저장된 값

포인터 관련 연산자
& : 변수가 위치한 주소
* : 해당 주소값에 위치한 변수

*(&value)는 value를 의미한다.
- &value : value의 주소
- *(value의 주소) : 주소에 위치한 변수 = value

포인터의 선언
- int *p;    p주소값에 위치한 변수는 int 형
- int *p1, p2;  p1은 int 포인터, p2는 int 형
- int **p;    p에 들어가 있는 변수가 포인터형


다른 함수에서 멤버 변수를 수정할 수 있도록 해줌
- 함수에서 외부 변수를 변경하는데 사용

포인터 선언 -> 주소를 변수에 넘김 -> *를 붙여 주소의 '변수'를 호출해 제어

nullptr = null 포인터
- 주소값이 없다고 표현한다.
- int *p = nullptr; 로 선언한다.

예)
int *p = nullptr;
cout << p + 0 << endl;    → 0000 0000
cout << p + 1 << endl;    → 0000 0004
cout << p + 2 << endl;    → 0000 0008
과 같이 자료형만큼 증가한다.


배열명은 배열을 시작하는 주소다
즉, 배열명[인덱스] = *(배열명 + 인덱스)로 치환된다.


1. 자료형과 const는 선언 위치와 관계가 없다.
- int const a = 3;
- const int a = 3;         → 두 선언은 동일하다.

2. *과 const의 선언 위치의 관계성
- const  * p     → p 주소에 위치한 변수를 상수로 여긴다. (*p 상수 , p 변수)
-    * const p  → *p는 변수, p는 상수
- const  * const p  → *p는 상수, p는 상수

3. 자료형과 const 선언 위치의 관계성
- int const *p = &value;
- const int *p = &value;   → 두 선언은 동일 하다.


문자열(string) = 문자 집합 = 문자 배열

문자열 입출력
- 문자 배열의 주소를 출력하면, 문자를 연속해서 출력한다.
- cout << name << endl;
- cout << name[0] << name[1] << name[2] << endl;  → 두 선언은 동일 하다.
- 주소 출력이 아닌 값이 출력되는 문자 배열만 특별히 처리해 준다. 

문자열 길이 + 1 = 문자열 크기 = 배열 선언 값


강의가 포인터로 시작해서, 문자열의 활용에 대한 내용까지 진행이 됐다.
다른 날에 비해 복잡한 내용이 하루 만에 처리된 느낌이 든다.

2019년 3월 19일 화요일

1인 창업에 대한 생각

백수가 되어 국비 지원 교육을 받는 중에 든 생각이다.
이제 앞으로 다시 직장인의 생활로 돌아가기는 힘든 상황에서 어떻게 수익을 내어 살아갈까 하는 고민이 계속 들었다.

직장인은 내려오는 회사 계획에 맞추어 행동하면 살아갈 수 있었다.
백수로는 벌어둔 돈을 까먹으면서 교육을 받고 자유를 만끽하며 살아갔었다.
그러면 교육이 끝난 이후는 어떻게 생활을 하게 될까?

우선 현재에 맞추어 국비 교육을 받은 게임 프로그래밍 과정을 이용해 살아보자라고 생각 했다. 그리고 1인 창업에 관련된 자료들을 수집해 검토해 보기 시작했다.

결론은 일단 짧은 시간 도전해 볼 수 있겠구나 확신이 들었고, 이와 관련된 내용을 다짐 겸 정리를 해 본다.


내 창업은 아마 게임 개발을 이용하게 될 것이다.
좀더 들어가면 모바일 게임을 제작하고 광고를 붙여 스토에서 출시하여 매출을 발생 시키는 방식의 사업이 될 것이다.

게임 개발을 이용한 사업은 다른 창업과 비교했을때 충분히 장점이 있다.
가장 중요한 많은 자금을 들이지 않고 사업을 시작해 볼 수 있다고 생각 한다.
또한 빠르게 도전 하고 결과를 받아 볼 수 있다고 생각한다.

이 두가지가 다른 업종에 비해 충분히 장점이라고 생각을 한다.

게임 개발은 사업을 진행 하는데 대지나 창고, 기계가 필요한 것이 아니요, 나 홀로 개발 하는 방식이기에 특별한 사무실이 필요한 것도 아니다.

나 홀로 개발 하기에 할 수 있는 범위 내에서의 계획만 잘 세운다면, 빠르게 개발을 해서 스토어에 출시를 하고 이에 대한 결과를 바로 받아 볼 수 있을 것이다. 결과가 성공이던 실패던 이 과정은 오롯이 내 노하우로 쌓이게 되는 것이고 이를 개선/발전 하여 높은 확률로 더 나은 결과를 희망 할 수 있을 것이다.

1개 제작된 게임은 아마도 다양한 용도로 활용을 할 수 있지 않을까 생각 된다.
유사 게임을 만들어 계속 발전되는 게임으로 스토어에 출시를 하거나, 관련된 기술을 강좌로 만들어 유튜브 등에 쌓아 두는 식의 확장되는 수익 구조도 나올 수 있다고 예상 한다.

이러한 과정 중 가장 중요한 것이 하나 있다.
바로 전체적인 진행과 결과가 나로서 이루어진다는 점이다.


1인 창업이라는 구조상 수익도 내가 독식을 하고, 손해도 내가 홀로 감당하는 구조다.
그리고 일하는 범위를 내가 계획하고, 내가 움직여 구현을 해야 된다.

이러한 주도적인 생활에서의 시간 분배 역시 나의 몫이 될 것이다.
게임 개발이라는 것은 기획/프로그래밍/그래픽/사운드 등의 집합이고 이에 대한 자원 배분을 잘 고민 해야 될 것이다. 이러한 과정 역시 나의 재산이 될 것이다.

시간을 소비해 내가 집중해 발전해 나가야 되는 것과 내 시간을 획득 하고 필요 자원을 획득하기위해 외주 처리를 하는 것에 대한 균형을 잘 잡아야 될 것이다.

최종적으로는 나 혼자의 움직임을 제어하고, 긴 시간의 플랜을 세워 할 수 있는 내가 좋아 하는 일을 사업 수단으로 계속 이끌어 가는 것이 중요하다고 생각된다.


물론 게임을 개발 한다는 것은 포화가 된 시장에 진입 하는 것으로 알고 있다.

작성된 모든 내용은 다 예측이고 희망 사항이지만, 앞으로 한 걸음씩 나아가면 옳은 길이였는지 틀린 길이였는지 판단이 되지 않을까 싶다.

우선은 성공할 때 까지 포기하지 않고 계속 도전해 결과를 내보고 싶다.

그리고 회사원으로 정의되는 것이 아닌 내 일에 대한 나의 정의를 스스로 내려보고 싶다.

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

15일 차 교육 메모를 옮겨 본다.

이날은 메모한 내용이 거의 없다.
반복문의 처리와 콘솔에서의 컬러 설정하는 방식에 대한 내용이 주력으로 작성되어 있다.


반복문
- while : 조건에 의한 판단이 편한 경우 사용
- for : 반복 횟수에 의한 판단이 편한 경우 사용

#include <window.h> 를 이용해 콘솔에서 컬러를 출력할 수 있다.
SetConsoleTextAttribute() 함수와 SetConsoleCursorPosition() 함수를 이용해 내용을 출력하기 전에 색과 출력 위치를 지정할 수 있다.


이 내용이 끝이다.
내용이 적은 것으로 보아, 실습 및 과제로 시간을 보낸 것 같다.


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

14일 차 교육 내용을 정리해 본다.

C++을 이용한 콘솔 프로그램에서의 입력 방식을 설명하고, 연산 및 연산자에 대한 설명이 이루어진 것 같다.


콘솔에서의 연속출력, 연속입력
cout와 cin 은 완전히 종료될 때까지 남아 순차적으로 수행된다.

1. cout << 1 + 1 << endl;
2. cout << 2 << endl;
3. cout << endl;
4. cout ;

1번부터 4번 순으로 동작한다.


연산 : 특정 기능의 수행
연산자 : 특정 기능을 수행하는 기호

연산자 사용
누가봐도 명확하게 가로를 쳐서 연산 우선 순위를 지정해 두어라
연산 방향에 관계없이 Line을 나누어 작성해라.


대입 연산자
- 우측의 연산 결과를 좌측의 변수에 저장(변경)한다.
- 우측의 값을 좌측의 변수에 저장한다.
- 좌측의 변수를 우측의 값으로 변경한다.
1. a = b = 10;
2. a = b;
3. a
1번부터 3번 순으로 동작


산술 연산자
- 사칙 연산 , % 나머지
- 계산된 값이 결과로 남는다.


복합 대입 연산자
- a += b; 형태의 연산자를 의미한다.
- a = a + b; 형태와 같은 처리


음수 부호 연산자
- 해당 값의 음수를 나타낸다.


전위 : 해당 명령 줄을 실행하기 전에 처리된다. ( 예 : ++a )
후위 : 해당 명령 줄이 끝나고 처리된다. ( 예 : a++ )


이런 내용들이 메모되어 있었다.
연산자의 처리에 대한 내용을 주력으로 강의가 된 거 같고, 전위/후위에 대한 연산자 처리 방식에 대한 내용이 강의 된 거 같다.


2019년 3월 16일 토요일

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

13일 차 교육 내용을 옮겨 본다.

왠지 모르겠지만 C++ 문법의 처음부터 다시 작성되어 있다.
아무래도 따라가기 힘든 원생들이 있어서 기초부터 다시 설명이 되는 게 아닌가 싶다.


함수란 특정한 기능을 수행하고 설계된 독립적인 프로그램이다.

0. 기수법
- 0~9 아라비아 숫자 표시

1. 진수
- 자릿수 하나의 범위 (2진수는 1자리 속에 0 / 1 두 개가 들어감)
- 기계는 2진수 사람은 10진수가 기본

2. 진법 변환
- 2→10 , 10→2 진수 변화는 자주 사용된다.

3. 수의 범위
- 1byte = 8bit : 0~255의 범위를 가진다.

4. 음수
- 컴퓨터는 음수가 없이 마이너스라는 개념으로 처리된다.
- 0의 보수를 찾아 음수를 인식시킬 값을 찾는 방식으로 음수를 인식한다.
- MSB(최고 중요한 비트) 데이터 최상위 1bit를 부호로 사용한다.

변수 타입
- 정수형 : char , short , int , long
- 실수형 : float , double
- 논리형 : bool
- 기타 : auto


이상과 같이 C++ 프로그래밍을 하는데 필요한 기본 내용이 교육된 것 같다.
다시 기본 내용이 교육되는것을 보니 C++의 처음부터 다시 설명 되는거 같은데 옮겨 적으면서도 왜 그런것인지 잘 기억은 안난다.

2019년 3월 14일 목요일

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

12일 차 교육 내용의 메모를 정리해 본다.

2차원 배열 형태의 과제 풀이가 있었던 것 같다. 섞는 과정에서 배열 Index의 직접적인 교체에 대한 이야기가 나오는 것으로 봐서는 신경쇠약이 과제로 나왔던 것 같다.


2D 게임에서는 Target의 제어를 위해 posX, posY 두 변수를 활용한다.
int posX = 0;
int posY = 0;
형태의 변수를 두어 Target의 위치를 설정한 뒤 이를 배열 index로 지환해 활용한다.
index = WIDTH * posY + posX;
물론 index를 역산해 x, y좌표로 치환할 수도 있다.

숫자 퍼즐을 섞는 경우 각 배열의 index를 직접 교체하지 않는다.
이 경우 실제 이동 조작을 n회 수행해 퍼즐이 섞일 수 있도록 제어 해야 된다.
단순 index 교체는 실제 게임에서 발생 되지 않는 대각선 교체로 인해 섞은 결과 데이터의 오류가 발생 될 수 있다.

#include<conio.h>를 이용한 consol상에서의 키 입력받기
- kbhit();    입력 버퍼에 값이 있는지를 확인할 수 있는 함수로 값이 있으면 1, 없으면 0 반환
- getch();   입력 버퍼에서 문자 1개를 가져온다. 안에 저장값을 꺼내오는 move의 개념이다. 
Enter없이 키 입력을 받아 화면을 갱신처리 하는 경우에 사용한다.

char 는 숫자로 저장되어 문자로 출력됨
switch문에서 case 'a': , case 'A': 형태로 사용이 가능 하다.

Sort에 대한 정보 확인해 보기


이상과 같은 내용이 적혀 있었고, 다시 보니 과제 풀이가 있었고, 과제 중 키 입력을 통한 정보 갱신 처리를 하는 방식이 설명 된거 같다. 아직 1차원 배열을 2차원으로 치환해 사용 하는 듯 싶다. 마지막에 sort 에 대한 정보 확인은 앞으로 정렬 알고리즘에 대한 교육이 있어 선행 교육을 과제로 내준것 같다.

2019년 3월 13일 수요일

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

11일차 교육에 작성된 내용을 요약해 본다.

조건을 제어하는 방식과 1차원 배열을 가지고 2차원 배열의 효과를 볼 수 있는 방식에 대한 내용이 작성되어 있다. 아마도 과제로 낸 내용이 2차원 배열을 이용한 내용이었나 보다.


반복문에 조건을 설정해 "지정된 상태 시 밖으로 나가라"라는 형태로 구현을 할 수 있다.

for(int i = 0 ; i < 5 ; i ++)
{
       if (j < 0)
       {
            break;
       }
}
위 코드에서는 j의 상태에 따라 for문을 벗어날 수 있다.


바둑판 위의 그림은 2차원 좌표로 생각해라.
가로 값은 x를 for 문으로 돌리고 세로값은 y를 for 문으로 돌리면 된다.

 0,0  0,1  0,2  0,3 |  0  1  2  3 | (4x0)+(0,1,2,3)
 1,0  1,1  1,2  1,3 |  4  5  6  7 | (4x1)+(0,1,2,3) 
 2,0  2,1  2,2  2,3 |  8  9 10 11 | (4x2)+(0,1,2,3)
 3,0  3,1  3,2  3,3 | 12 13 14 15 | (4x3)+(0,1,2,3)

이를 1차원 배열을 이용하면 다음과 같이 된다.

for(int y = 0 ; y < height ; y++)
{
       for(int x = 0 ; x < width ; x++)
       {
            int arrayIndex = y * height + x;
       }
}
height와 width로 높이와 너비를 지정하고 arrayIndex로 1차원 배열의 위치를 설정할 수 있다.

배열에 사용되는 index의 경우 -1로 초기화해 사용한다.
초기화 값이 지정되어 있지 않으면 0을 사용하기에 사용되는 0과 구분이 안 되는 경우가 발생한다.


이처럼 반복문 탈출과 2차원 배열 활용하기에 대한 내용이 작성됐다.
바둑판 모양의 2차원 배열을 이용한 신경쇠약과 같은 게임이 과제로 나오지 않았나 싶다.

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

10일째 교육이 진행 됐다.

C++ 언어를 이용한 외부 함수 작성/사용에 대한 부분을 중심으로 지금까지 작성한 프로젝트(과제)의 기능들을 함수로 추출해 다시 구성하는 수업을 한 것으로 보인다.


정적 전역 변수와 정적 지역 변수에 대한 설명이 이루어졌다.

함수의 매개 변수 활용 및 선언 시 int , void의 반환 자료형 차이를 통해 값 반환에 대한 방식에 관해 설명 되었다.

Add() 함수의 전방 선언

int Add();

void main()
{
   구현
}

int Add()
{
   구현
}
전방 선언된 링크 작업 시 확인된다.
그리고 전방 선언된 함수는 별도의 파일로 분리하여 관리할 수 있다.


계산기, 성적표, 하이로우 프로그램의 각각 기능들을 별도 함수로 제외하는 작업을 해보도록 한다.


이상과 같은 메모 내용을 보니 외부 함수 작성을 실습해 보면서 교육이 마무리된 것으로 보인다.

2019년 3월 10일 일요일

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

9일 차 교육한 메모 내용을 정리해 본다.

지난 과제였던 로우/하이 프로그램에 대해서 각각의 구현 방식을 보고 검토가 이루어졌다.
구현에 사용한 셔플 알고리즘과 Rand()를 이용한 확률 계산 방법에 대한 구현 방식이 설명되었고, 함수에 대한 기초 설명이 이루어졌다.


로우/하이 의 구현
카드 정보를 배열로 선언 → 배열에 카드 정보 대입 → 정보를 섞는다.
for( 섞을 횟수 )
{
    // 0~51 사이의 수 위치를 지정
    int source = rand()%52;
    int destination = rand()%52;
    // 두 카드의 숫자 정보를 변경
    int temp = Array[source];
    Array[source] = Array[destination];
    Array[destination] = Array[source];
}

정보를 섞는 방법
1. 배열 위치를 shift 시키기 : 최대 배열 수, 앞으로 이동시킴
2. rand()를 이용한 배열 간 swap 방식 : rand() 범위 및 temp를 이용한 값 변경

카드 선택에 사용되는 rand()의 활용으로 Rand()%정밀도를 이용한 확률 계산
if( rand%1000 < 300 )
{
    // 30%의 확률로 계산을 진행
}


const 선언을 이용한 심볼릭 상수 선언 방식
const int i = 5;
여기서 i 는 배열 선언 시 범위를 지정하는 데 사용 할 수 있다.


함수 기초
- 코드 집합으로 "메인 함수"인 "main()" 과 "표준 함수"인 "rand(), srand()"  그리고 사용자가 만들어 사용하는 "사용자 정의 함수"가 있다.
- 함수는 코드의 효율적인 재활용이 가능하므로 2회 이상 사용하는 기능의 경우 함수로 제외해 사용해라.
- 사용자 정의 함수를 만들 때 이름은 함수의 기능을 대표하도록 작성해라.


변수의 분류
선언 지역에 따른 구분
- 전역 변수 : 코드 내 { } 밖에 선언된다.
- 지역 변수 : 코드 내 { } 안에 선언되며, 선언된 범위를 벗어나면 소멸한다.

선언 방법에 따른 구분
- 일반 변수 : int a;
- 정적 변수 : static int a; / 생명 주기가 전역 변수처럼 된다.


이상과 같은 내용이 정리되어 있다.

지금에서 메모를 다시 보니 수업 중 주로 교육된 내용이 어떤 항목이었는지 궁금하다.
지난 과제를 풀이하는 시간이 주력으로 사용되고 이후 셔플 방식, Rnad()의 활용, 함수,변수 설명이 이루어지는 거 같다. 하지만 C++ 교재를 기반으로 교육하는 것 치고는 중구난방으로 강의 된 거 같다.


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

8일차 교육 내용을 메모에서 옮겨 본다.

C++의 배열과 반복문, 분기문 에 대한 내용을 공부 했었고, 과제 프로그램이 있었다.


VS 단축키 팁으로
alt + drag 를 하면 블록 형태(세로)로 선택을 할 수 있다.
alt + shift + 키보드 방향키로 블록 형태(세로)로 선택을 할 수 있다.


프로그램의 구현 시 일반 변수와 상태 변수는 네이밍부터 나누어 관리해라.
tileNumber, isPlaying 식으로 구분이 되도록 작성하는 버릇을 들여야 한다.


배열 번호를 통해 다양한 데이터를 설정, 가져올 수 있다.
기준값(생성순번, 정수)이 있으면 이를 배열로 이용해 데이터를 관리 할 수 있다.
예)
기준값 | 학번[기준값] | 국어[기준값] | 영어[기준값] | 수학[기준값] | ...

배열의 번호, 배열관리 cout 용 변수, 배열 최대값 제어 변수 등에대한 숫자 개념을 확실히 파악해 두어야 된다. (배열은 0부터 시작 하고 최대수 -1 의 번호를 가진다.)

배열은 0~n 번으로 생성이 되며, 배열의 총 개수는 n+1로 관리 된다.
이를 배열[변수] 로 사용해 관리를 할 수 있다.


반복문
while(조건) { }  -  0회 ~ n회
do { } while(조건);  -  1회는 무조건 실행 이후 ~ n회
for(초기식 ; 조건 ; 증감식) { }  -  조건에 맞추어 n회

while은 종료 조건이 명확한 반복문이고,
for는 반복 횟수가 명확한 반복문이다.

for(초기식 ; 조건 ; 증감식)  {  명령  }  의 실행 순서는 다음과 같다.
- 초기식(1회 실행) → 조건 → 명령 → 증감식 → 조건 → 명령 ~
- 초기식 : 1회만 실행, 반복 변수를 선언하거나 값 대입
- 조건식 : 조건이 참이면 명령을 수행
- 증감식 : 반복 변수의 값을 증가

Countinue;  -  이번 명령(실행)을 중지, 다음 반복을 수행
Break;  -  이번 명령을 중지, 반복 중지와 함께 밖으로 이동


분기문
지정된 값이 오면 코드를 실행 하는 문법으로 아래와 같은 형태로 구현된다.
switch( 정수값 )  ←  정수값 영역에는 정수값/10 과 같이 수식이 사용 될 수 있다.
{
     case 정수값:
            명령
            break;
     default:
            명령
            break;
}


이상 강의된 내용을 토대로 52장의 트럼프 카드를 이용한 하이/로우 게임이 과제로 나왔다.
1. 랜덤을 이용해 1~52 사이의 카드를 컴퓨터 선택
2. 7을 기준으로 높은수 인지 낮은 수인지를 선택해 맞추는 게임


게임의 모양새를 가지고는 하이/로우를 콘솔로 제작하는 과제였다.
메모에는 없지만 아마도 숫자 입력에 대한 강의가 있었으며, while 문을 이용한 반복과 rand()를 이용한 난수 생성 그리고 배열 및 비교 과정이 포함되어 구현할 수 있는 과제였다.


2019년 3월 9일 토요일

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

7일 차 교육 내용을 정리해 본다.

C++ 문법 공부를 기반으로 배열에 대한 내용이 교육된 것으로 보인다.
메모가 너무 띄엄띄엄 되어 있어 정확한 학습 내용의 판단은 여전히 안 된다.


3자리 수에서 각 단위 숫자 추출 방법
- 100 으로 나누고 나온 몫을
- 10으로 나누고 나온 몫과 나머지를 통해 추출할 수 있다.

"상태 변수"를 두고 이를 통해 제어하는 조건 방식
While 문에 비교 값을 위한 변수 1개를 두고 내부에서 처리하는 방식이 가능하다
while(isSame == 1)
{
 isSame = 0;

 if (num1 == num2)
 {
  isSame = 1;
 }

 if (num2 == num3)
 {
  isSame = 2;
 }
}

프로그램을 구현하는 단위 항목별로 [빌드] -> [실행] -> [확인] 과정을 꼭 수행 해라.

랜덤 : Min ~ Max 사이 임의 수 생성
- Rand()%(Max - Min + 1) + Min;

논리 연산자 && , ||
&& : AND : 양쪽 다 참이면 참
|| : OR : 양쪽 중 한 개라도 참이면 참

조건
- if{} else{}
- if{} else if{} else{}

일률적인 방향으로의 조건으로 위에서 내려오다 참이 나오면 밖으로 나오게 된다.
if(조건) {}
else if(조건) {}
else if(조건) {}
else if(조건) {}
else {}


배열
- 같은 코드인데, 적용될 변수가 달라서 쉽게 반복이 안 된다.
- 변수를 한 번에 여러 개 쓰고 싶다.
- 이와 같은 문제 해결에 사용된다.

변수를 단독주택이면 배열은 아파트로 생각하면 된다.

선언 : 무조건 재수가 정의되어야 된다.
- 자료형 배열명[개수];

초기화 : 선언과 동시에 초기화할 수 있다.
- 자료형 배열명[개수] = {0, 1, 2, ~ 개수};
- int 배열명[개수] = {};   형태로 초기화할 수 있다.

사용
- 배열명[인덱스] = 10;

배열의 인덱스는 0부터 시작 한다. 인덱스의 최대 수는 "개수-1" 이다.


교육 내용이 책을 기반으로 해서 그런지 메모한 내용이 순서도 없고, 내용도 많이 부실한 상태다.
랜덤수, if else 조건, 배열에 대한 내용을 예제와 함께 교육 했을 것이라 생각 된다.

2019년 3월 7일 목요일

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

6일 차 게임 프로그래밍 과정 국비 교육 내용을 정리해 본다.


C++ 문법 중 조건문과 반복문에 대해서 교육하고, 순서도가 중요하다고 강조가 되었다.

조건문 : 조건이 참이면 실행

프로그래밍에서의 참 거짓은 숫자와 키워드로 다음과 같이 구분된다.
- 참 : 숫자 0을 빼고 전부 , true
- 거짓 : 숫자 0 , false

cout << (1 > 3) << endl;
여기서 '>' 은 관계 연산자로 < , > , >= , <= , == , != 이 있다.

교육 중 실습으로
if 조건문을 이용해 두 수를 입력하면 + , - , * , / 계산이 이루어지는 계산기 실습을 하였다.


반복문 : 조건이 참이면 코드를 반복 실행
while(조건) { 코드} 등의 반복문에 대해서 교육하였다.

교육중 실습으로
두 수를 입력하면 구구단이 출력 되는 실습을 하였다.


두 실습으로 다중 조건, 다중 반복에 대한 내용이 진행되었고, 복수의 return 을 사용해 중단점을 제어하는 방식을 실습하였다.


순서도 = 명령의 순서이다.
- 시작, 끝, 조건(판단), 처리(연산), 방향을 통해 실습한 프로그램에 대한 순서도를 작성했다.


그리고 아마도 함수에 대하여 설명이 이루어진 것 같다.
함수 - 자료형 함수명(입력값 형); 으로 선언된다. 이중 맨 앞의 자료형은 반환형을 의미한다.


Rand() 함수를 통해 임의의 숫자를 생성할 수 있으며, SRand() 함수를 통해 랜덤한 숫자가 설정된 숫자 리스트를 지정 할 수 있다.

따라서 Rand()를 이용해 매번 다른 숫자를 생성 하기 위해서는 SRand()의 숫자 리스트가 매번 다르게 되도록 설정 해야 된다.

Rand() 함수는 0~32767 사이 숫자를 무작위로 반환한다.


이상과 같이 조건문, 반복문, 순서도, 함수, 랜덤 숫자 생성 방법에 대한 교육이 있었고, 2개의 프로그램 실습이 있었던 것 같다.


2019년 3월 6일 수요일

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

5일차 교육 내용을 정리해 본다.

C++에 대한 교육 방침과 학습 방향에 대해서 다시 이야기됐다.
무언가 노트에 주르륵 쓰여 있는 글들을 보면 정 시간 동안 수업을 나가긴 한 모양이다.


앞서 이야기했듯이 난이도는 최소치에 대한 학습으로 반복, 숙달을 충분히 할 수 있도록 하며 모든 인원이 끝까지 교육을 수료할 수 있도록 하는 게 목표라고 한다.

교육 방식은 스노우볼 방식으로 계속해서 쌓아 나가는 교육 진행을 할 것이며, 이에 잘 따라와 주고 따라 올 수 없는 경우 바로 이야기를 해달라.


C++ 학습 가이드는 다음과 같다.

- 기본 문법
기본 출력 → 기본 저장 → 기본 입력 → 연산자 → 조건 분기 → 반복문 → 배열

- 확장 문법
포인터 → 함수

기본 문법을 과정으로 개발에 필요한 최소 능력을 보유할 수 있으며, 이를 이용해 게임 제작 실습을 진행한다고 한다.


변수 : 값을 저장(변경)할 수 있는 메모리 공간
상수 : 값을 1회 저장 후 변경할 수 없다.

변수 선언법 :
- 자료형 변수명; → int num;
- 자료형의 메모리 공간을 변수명으로 식별해 부른다.

변수명은 자료형의 메모리 공간 가장 앞쪽 주소가 연결된다.

변수값 대입 : 오른쪽의 값을 왼쪽 변수명에 저장한다.
변수 초기화 : 선언하면서 동시에 값을 대입하는 행위

변수 명명법
- 숫자, 영어, 대/소문자, _(언더바) 가능
- 숫자로 시작할 수 없음
- 변수명 길이의 제한은 없음

C++에서 사용되는 다양한 자료형의 종류와 그에 따른 메모리 용량 단위가 설명됨


형 변환이란 다른 형태의 자료형으로 사용해 보는 것을 의미한다.

int num = 1.1; 의 경우 VS에서 암묵적으로 변환된다.
실수가 정수로 변환되어 num에는 1이 저장되며, 0.1이 삭제된다.

int num = (int)1.1; 의 경우 명시적으로 형 변환이 이루어진다.
실수가 정수로 변경된다는 선언이 있었으므로, num에는 1이 저장된다.

형 변환의 예
double num1 = 1.1;
int num2 = (int)num1;

변수와 관련된 내용 : 선언, 대입, 초기화
자료형의 정의 : 형변환, 입력, 출력         로 정리된다.


연산자 - 명령을 수행하는 기호 / 특정 기능을 수행하는 기호

단항 연산자, 이항 연산자, 삼항 연산자
+ - * /   산술 연산자
=      대입 연산자


이상과 같은 내용이 그날 작성되었다.
아무래도 책을 가지고 교육을 진행해서 그런지 노트 된 내용이 무지 띄엄띄엄 있다.

2019년 3월 4일 월요일

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

4일 차 교육

오늘도 역시 나 작성된 메모 내용이 적지만, 이단 작성해 본다.


출력할 수 있는 대상인 숫자(10), 문자(a), 문자열(abc)에 대한 출력 차이에 대해서 설명 됐다.
기본적으로 문자는 1byte형으로 출력이 고정 된다.

VS상에서 main()은 1개만 존재 해야 되는데 이를 다중 생성하고, 컴파일 할 수 있는 방법이 공유 됬다.

변수 상수에 대해서 설명 되었다.

C++에서
정보의 저장은 int a = 0;
정보의 입력은 cin >>
정보의 출력은 cout <<


이상과 같은 내용이 4일차에 진행 된 거 같다.
다시 봐도 너무 적다.

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


3일차 교육 내용.

전반적인 VisualStudio 에 대한 내용과 C++ 코딩에 대한 설명이 이루어졌다.
3일 차 교육인데 메모를 보니 교육 내용이 적다는 생각이 들지만 왜 이렇게 적은지는 기억이 안 난다.

VS에 계정을 연동하고 환경설정을 다루는 법이 공유되었다.

C++ 프로젝트를 생성하고 코드 내 주석을 치는 2가지 방법 // , /* */ 에 대한 설명 및 VS 툴 상에서 버튼과 단축키로 주석을 설정하는 방법을 알려줬다.
ctrl+z 와 ctrl+y 을 이용한 undo , redo 에 대한 내용을 설명했다.

include 란 단어 이후 지정된 파일의 내용을 코드로 불러들인다.
return 은 함수의 종료이다.
namespace 는 이름 공간으로 중복 방지의 목적으로 동일 이름 함수 처리를 위해 지정하거나 출처를 표기하는 데 사용 된다.

VS에는 인텔리센스가 있어 사용할 만한 것을 미리 보여주는 기능이 있다.

using namespace std; 형태의 전체 선언은 중복 방지에 도움이 되지 않기에 별로 사용하지 않는다.


다시 말하지만 복습을 중요하게 생각해야 된다.

2019년 3월 3일 일요일

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

2일차 교육 내용.

게임 프로그래밍 진도에 앞서 프로그래밍 언어, 언어의 종류, 컴파일러, IDE 등에 대한 프로그래밍 전반에 대한 설명이 이루어 졌다.

프로그래밍이란 명령, 순서의 집합을 컴퓨터에게 전달 하는 것이다.
여기서 언어란 컴퓨터와 인간의 의사 소통의 수단을 의미 한다.

컴파일러는 컴퓨터가 알수 있도록 인간이 작성한 언어를 번역 하는 역할이다.

IDE는 통합 개발 환경으로 코드 작성 → 컴파일 → 링킹 → 빌드 을 할 수 있다.
여기서는 Visual Studio(이하 VS)를 사용해 교육을 진행 한다.

C++ 언어에 대한 교육으로 VS를 이용해 입력과 출력을 가장 빠르게 볼 수 있는 콘솔 기반의 프로그래밍을 진행 하였다.

프로젝트를 생성 해 콘솔 기반의 프로그래밍을 할 수 있도록 VS의 환경 설정 및 툴 사용법에 대한 설명이 있었다.
 - 콘솔 기반의 프로젝트 생성 하기
 - 단축키 설정 하기
 - 컴파일, 빌드, 실행 하는 방법
 - 빌드 시 옵션 설정 하기

이러한 내용을 가지고 마지막으로 "Hello World" 를 콘솔에 띄우는 코드를 작성했다.


프로그래밍에 대한 전반적인 설명과 VS를 이용해 C++ 프로그래밍으로 콘솔 프로젝트를 생성해 "Hello World"를 출력 하는 교육 과정으로 요약 된다.

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

첫날로 작성된 메모 내용으로 작성해 본다.

강사 이름과 연락처 그리고 학원 및 강좌 내용에 대한 소개들로 적혀 있는 것을 보니 프로그래밍 진도는 안 나가고 앞으로의 교육 계획 및 진로에 대한 내용을 공유하는 일정이었나 보다.

대개 국비 지원 게임 프로그래밍 교육 과정은 C++, 자료구조를 선행해야 따라서 올 수 있는 과정이라고 한다.
하지만 이번 과정에서는 C++, 자료구조에 대한 교육을 진행하고 Win 프로그래밍, DirectX, 관련 과정과 인공지능, A*, FSM에 대한 교육으로 진행한다고 설명 한다.

수업의 수준은 중/하를 기준으로 진행하게 되며, 못 따라오는 사람이 없도록 하위에 맞추어 운영된다고 한다.

수업은 50분 교육, 10분 휴식으로 진행되며, 교육과 관련된 교재가 배부되었다.

수업 내용과 교재를 통해 꼭 자습과 복습을 충분히 해달라고 당부하였다.
그리고 수업 중 궁금한 내용에 대한 질문과 필요한 내용이 있으면 공유해 적극적으로 알려 달라고 하였다.



교육에 대한 일정 및 방식에 대해 소개를 하는 하루였던 것 같다.



2019년 3월 2일 토요일

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

과거 구직자 국비 지원 교육 중 "게임 프로그래밍" 과정에 대한 교육을 받았었습니다.

최근 짐을 정리하는 중에 옛날에 교육 중 메모한 노트가 발굴되어, 버리기 전에 어떠한 교육 내용이 있었는지 일일 작성한 내용을 블로그로 옮겨 볼까 합니다.

메모를 통한 옛 기억을 기준으로 작성 하는 내용이라 정확한 교육 내용의 작성이 아닌 교육 분위기와 단위 별 내용을 참고 할 수 있는 수준의 글이 될 것 같습니다.


게임 프로그래밍 교육 과정은 "직업 훈련 정보"를 통해 확인한 대로 긴 시간 동안 진행 되었으며, 학원에서 제공하는 교재와 강의 내용과 연관된 과제 제출을 중심으로 진행 됐습니다.


강좌는 게임 개발에 필요한 C++, 윈도우 API, 자료구조, 알고리즘,  Directx 11, MySQL , 게임 서버 에 대한 교육과 게임 엔진인 유니티을 이용한 게임 제작 및 광고 구글 플레이 스토어 등록에 대한 교육이 진행 되었습니다.

각각의 교육 중간에 진도에 맞는 과제를 제출해야 되며, 각 교육 단위 별 "능력 단위 평가"를 진행해 교육 수준에 대한 점검을 하는 방식으로 진행 됩니다.


그리고 포트 폴리오 제작이 윈도우 API, Directx11, 유니티 과정 쯤에서 이루어지고, 이력서/자기소개서/면접 에 대한 멘토링이 진행 되었었습니다.



위와 같이 교육 기간 내 대략적인 과정을 요약 할 수 있을 것 같으며, 메모를 기준으로 일일 교육 내용을 시간 나는 내도 작성해 보도록 하겠습니다.

Unity - Firebase 연동 (Analytics, AdMob)

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