본문 바로가기
반응형

개발878

개인생각)랜덤박스의 고찰 랜덤박스의 고찰 랜덤박스라는 흔히 말하는 가챠(Gacha)는 뽑기 형태로 아이템을 하는 방식인데 이 방식으로 인해서 모바일 BM이 엄청 많이 변경되었다. Pay to Win을 따르는 도박 같은 시스템이지만 과금으로 원하는 것을 살 수 있는 것도 매력적인 요소이다. 정확한 시초는 알 수 없지만 랜덤박스는 2004년 일본판 메이플스토리에 추가된 가차폰 티켓이라는 게 시초라고 한다. 그냥 선택하지 않는 상품을 모두 다 랜덤 박스라고 표현할 수 있는데.. 예시로 '아무거나'와 비슷하지 않을까.? 2007년부터 국내에서는 확률형 아이템을 많이 채용했다. 그전에서는 정액제(기간 내 사용)에 관련돼서 집중되어있었던 것이 무료 게임이 풀리면서 그에 따른 BM이 필요했는데 랜덤박스는 매우 매력적인 상품이었다. 처음에는 .. 2019. 10. 29.
개인생각) 레벨 밸런스 데이터 개발 레벨 밸런스 데이터 개발 게임의 재미의 많은 요소를 차지하는 항목이다. 게임을 개발하다 보면 사용자가 난이도나 학습기준에 따라 플레이했을 때 즐거움을 느낄만한 요소를 만드는 과정을 진행 한다. 보드 게임류에서는 대체적으로 어떤 스테이지가 있고 그 스테이지를 클리어하고 다음 단계로 진행하는 경우가 많다. 단계에 대한 난이도 설정 즉 밸런스 데이터(맵데이터, 밸런스 수치 등등)을 만드는 과정이 필요하다. 레벨 밸런스 데이터 개발를 하는 과정에 대해서 아는 기준 내에서 설명을 하고자 한다. 밸런스 데이터의 종류를 굉장히 많은데 공통적인것들은 다음과 같다. 재화 캐릭터 패턴 맵 개발과 밀접한 스테이지 데이터를 기준으로 이야기하자면 스테이지 데이터는 기획자가 생각한 밸런스를 기준으로 스테이지를 임시로 셋팅한 이후.. 2019. 10. 29.
알고리즘)알고리즘 너비 우선 탐색 (BFS : Breadth-First Search) 알고리즘 너비 우선 탐색 (BFS : Breadth-First Search) DFS와는 구현 방식이 조금 더 다른 형태의 탐색 알고리즘이다. 너비 우선 탐색은 탐색하는 곳의 동등한 뎁스를 우선 탐색 이후에 다시 하위에 대한 노드를 탐색하는 알고리즘이다. DFS와 다른점은 재귀적으로 동작하지 않고 반복 탐색을 한다. 너비 우선 탐색(BFS)의 특징 직관적이지 않은 면이 있다. BFS는 시작 노드에서 시작해서 거리에 따라 단계별로 탐색한다고 볼 수 있다. BFS는 재귀적으로 동작하지 않는다. 이 알고리즘을 구현할 때 가장 큰 차이점은, 그래프 탐색의 경우 어떤 노드를 방문했었는지 여부를 반드시 검사해야 한다는 것이다. 이를 검사하지 않을 경우 무한루프에 빠질 위험이 있다. BFS는 방문한 노드들을 차례로 저.. 2019. 10. 28.
개인생각) AI의 발전의 고도화 AI의 발전의 고도화 AI가 시간이 지날수록 계속해서 더 발전하는 과정이 심상치 않다. 시간이 가면 갈수록 AI는 고도화되고 인간이 만들어낸 여러 가지 많은 경우에 수가 있는 것들을 예측하고 더 효율적인 것에 대한 증명이 계속해서 되고 있다. 단편적으로는 AI가 어떠한 것을 판단하는 것부터 해서 지금은 판단 및 의사결정에도 참여가 가능한 수준에 이른 것이다. 인간이 처음에는 AI가 바둑을 이기려면 많은 시간이 걸린다라고 예측했었으나 세기의 대길인 '이세돌 프로' 바둑기사와의 알파고 대결에서부터. 지금은 다양한 분야에서 AI가 사용되고 있다. 주식 : https://news.sbs.co.kr/news/endPage.do?news_id=N1005029702 인간 vs AI…주식 거래까지 인공지능 승리 1억 .. 2019. 10. 25.
코드규칙) 스네이크 표기법(Snake Casing Notation) 스네이크 표기법(Snake Casing Notation) 스네이크 표기법은 한 문자 단어마다 _(underScore)를 붙여서 의미를 부여하는 방식을 말한다. 예시는 다음과 같다. int unit_type; int unit_index; *변수명, 함수명, 상수값, 네임스페이스등에서 사용하는것을 권장한다. ★☆☆☆☆ 2019. 10. 23.
기본기) 유효자리수 유효자리수 유효자리수라는 것은 자료형의 범위를 말한다. 유효자리수의 범위를 잘 이해해야 정수와 실수 또는 자료형의 형변환(Type Casting)을 할때 생각지도 못한 버그를 예방할 수 있다. 데이터를 저장하는 과정에서도 데이터의 범위는 매우 중요하다. 데이터의 크기보다 더 큰 크기의 데이터를 넣게되면 데이터의 이상현상이 생긴다. (대부분 짤리거나 오버플로우가 발생한다) 유효자리수는 컴파일과 개발언어에 따라 다르다. 가장 대표적으로 알고있어야하는 실수의 유효자리수에 대해서 알아보면 다음과 같다. (C 기반) ★★☆☆☆ 2019. 10. 23.
코드규칙)파스칼 표기법(Pascal Casing Notation) 파스칼 표기법(Pascal Casing Notation) 모든 단어의 첫번째 문자를 대문자로 표현하는 표기법이다. 일반적으로 가장 많이 사용되는 방식이라고 한다. 예시는 다음과 같다. int Count SetState(_state : eTYPE) *함수와 클래스명은 대체적으로 파스칼 표기법을 권장한다. ★★☆☆☆ 2019. 10. 23.
코드규칙) 헝가리언 표기법(Hungarian Casing Notation) 헝가리언 표기법(Hungarian Casing Notation) 헝가리언 표기법은 마이크로소프트 내부에서 널리 사용하는 표기법이다. 모든 변수 타입을 이름 앞에서 붙여 넣으면 된다. 예시는 다음과 같다. pLast -어떤 데이터 구조에 속한 마지막 요소의 포인터(p) sBookname -책이름이라는 문자열(s)을 의미한다. bool g_bInit = false; int nCount = 0; *자료형이 존재하는 변수에 주로 사용한다. ★☆☆☆☆ 2019. 10. 22.
코드규칙) 카멜 표기법(Camel Casing Notation) 카멜 표기법(Camel Casing Notation) 단어와 단어 사이를 점이나 공백 없이 대소문자로 표현하는 방식인이다. 낙타의 혹처럼 들쑥날쑥 한 모양으로 구분한다는 것에서 이름이 유래하였다. 자바스크립트에서는 카멜 표기법이 기본적으로 사용된다. 예시는 다음과 같다. document.getElementById('name') getElementById (get-element-by-id)를 카멜 표기법으로 구현한 것이다. * Java 프로그래밍에서 권장하는 표기법이다. ★★☆☆☆ 2019. 10. 22.
게임개발) 코드 리뷰 코드 리뷰 코드 리뷰는 코드를 병합하기 전 단계에서 해당 코드에 대한 검증 및 절차과정으로 작업하는 작업자들의 동의를 얻고 코드를 병합하는 과정을 말한다. 코드 리뷰를 함으로써 이점은 다음과 같다. 버그를 미리 발견 기존 코드와의 적합성 및 스타일 유지 회피 코드의 공유 더 좋은 로직으로 리팩토링할수 있는 여지 재사용성 코드 리뷰의 방법은 여러가지가 있는데 대체적으로 리뷰를 하고자하는 사람이 요청을 하면 회의실을 잡고 실제 코드를 보면서 리뷰어가 설명을 하고 토론을 하고 결정을 하는 형태로 많이 진행을 한다. 리뷰를 하면 좋은 점도 있지만 단점도 있다. 리뷰하는 시간이 들고 리뷰에 대한 준비를 하는 과정이 필수로 동반된다. 그래서 리뷰는 간결하고 서로 스타일에 대한 차이나 현 상황에 대한 포옹력이 기반이.. 2019. 10. 22.
개인생각) 나쁜 프로그래밍 습관 나쁜 프로그래밍 습관 개인적으로 생각하느 나쁜 프로그래밍의 습관들을 정리해봤다. 시간이 없다는 이유와 여러가지 이유로 회피하는 나쁜 습관들인데 고치면 매우 좋다고 생각한다. 1. 문서화 하지 않는 습관 2. 지나치게 많은 코드를 한줄로 구현 하는 방식 3. 재사용하지 않는 습관 4. Type을 지정하지 않는 습관 5. Yo-yo 코드 URL : https://en.wikipedia.org/wiki/Yo-yo_problem 6. 자신만이 알아볼수있는 형태로 개발 7. 짧은(약어) 및 모호한 표현의 네이밍 8. 잦은 Type의 강제형변환 ★★★★☆☆ 2019. 10. 21.
자료구조) 순차리스트(ArrayList) 순차 리스트(ArrayList) 리스트에서 순서 성을 포함한 자료구조이다. 순서성을 포함하기 때문에 정렬 같은 기능도 지원한다. 순차 성이 존재하기 때문에 중간에 데이터를 삽입하거나 삭제하는 과정이 굉장히 불편하다. 장점 : 정렬 기능을 사용하기 용이하고 , 데이터를 특정 기준으로 그룹핑해서 관리하고 쉽고, 인덱스 값에 대한 유일무이한 식별자를 가진다.(조회가 편리하다.) 단점 : ​중간에 데이터를 삭제, 삽입하기가 불편하고 느리다. (순서 성에 대한 보장 처리를 해야 하기 위해서 중간에 삽입/삭제가 이뤄지는 경우 다시 데이터를 한 칸씩 밀어줘야 하는 명령이 필요함) 1. n개의 자료를 저장할 때 ArrayList는 자료들을 하나의 연속적인 묶음으로 묶어 자료를 저장 2. 무작위 접근(random acc.. 2019. 10. 19.
자료구조) 트리(Tree) 트리(Tree) 트리구조는 계층적 구조이다. 비순차적 구조이기도 하다. 가장 최상단(Root)에서 계속적인 하위 노드를 추가해가는 구조이다, 즉 트리는 하위 계층구조를 표현할때 사용한다. 그래서 탐색에서 가장 많이 사용된다. 차수(Degree) 자식 노드의 개수 높이(Height) 루트 노드로부터 최하위 노드까지의 높이 레벨(Level) 트리의 계층의 층수 루트는 -1 트리의 종류는 다음과 같다. Left Child-Right Sibling 표현법 -왼쪽은 하위 노드들을 표현 오른쪽은 자신과 레벨이 동등한 노드들을 표현한다. Binary Tree(이진트리) -이진트리는 루트를 제외한 모든 노드는 최대 2개의 노드만 가질 수 있다. 완전 이진트리(complete binary tree) 포화 이진트리에서 끝.. 2019. 10. 18.
자료구조) 맵(Map) Map맵(Map) 키(Key) 와 값(Value)로 구성되어있는 자료구조이고 Map은 Red-Block Tree 알고리즘을 이용해서 구현되어있다. Map은 map을 쓰는 경우, 최악 O(n), 최상 O(logn)의 성능을 냅니다. 그러나 Red-Block Tree의 특성상 node rotation을 하는 과정에서 최악 log2n개의 노드의 값을 업데이트하는 부하가 있다. ★☆☆☆☆ 2019. 10. 17.
자료구조) Dictionary Dictionary Content 를 통해서 Data에 접근하는 자료구조로 항상 Key 와 Value의 쌍으로 구성되어 있다. 키로 검색을 수행하며 검색 결과로 값을 반환한다. 순서성을 보장하지 않고 각 키는 고유한 특성을 가진다. Dictionary 의 명령어는 다음과 같다. boolean isEmpty(Dictionary d) put(Dictionary d, Key k, Value v) Value get(Dictionary d, Key k) remove(Dictionary d, Key k) destroy(Dictionary d) Dictionary는 고유한 값을 입력하기 때문에 중복되지 않는 데이터를 넣을때 사용을 한다. 자료형을 선언하기 때문에 박싱/언박싱이 일어나지 않는다. ★★★☆☆ 2019. 10. 17.
반응형