개요socket으로 네트워크 엔진 만들기 (1) 에서 만든 패킷을 활용하기 위해서 socket이 제공하는 함수들을 사용할 수도 있지만Packet을 보내거나 읽고, 읽은 내용을 파싱하여 필요한 함수를 호출할 수 있도록 하는 등 여러 기능들을 추상화시킨 class가 있으면 사용하기 편할 것이다.NetworkManager class를 만들어 보자.NetworkManager class의 이름은 network를 가장 잘 manage하는 생물인 Spider로 하자. network를 가장 잘 manage하는 사람 Spider - socket을 생성하고 연결하기Spider는 싱글톤으로 구현되어 프로그램에 유일하게 존재하며, 하나의 socket을 가지고 통신한다. 사용자는 ip, port를 설정하는 것으로 서버 또는 다..
개요socket에 대해 공부하다가 이 socket을 가지고 게임을 만들어보자는 생각이 들었다. 환경이 열악해서 상용 네트워크 엔진을 사용할 수 없기도 하고 배운 내용을 정리도 할 겸 처음부터 만들어보기로 했다. socket을 사용하는 네트워크 엔진을 만들어보자. 엔진은 c++로 작성하며, 기본적인 구성은 팩토리 패턴으로 생성할 수 있는 Packet class, 만들어진 Packet을 전송하는 Manager class 등이다. PacketPacket class는 기본적으로 함수 ID, parameter의 크기, parameter set의 갯수를 int형으로 가지고 있다.함수의 parameter들은 문자열 형태로 저장함으로써 여러 종류의 parameter에 대응할 수 있도록 추상화시킨다. 1234567891..
함수 포인터를 사용해서 콜백 함수를 생성할 수 있는 CallFunc 클래스를 만들어 보자. 원하는 기능MoveTo, RotateTo 같은 event가 완료 되었을 때 원하는 작업을 할 수 있도록 하고 싶다. 콜벡 이벤트를 만들어서 Sequence로 연결하여 사용하면 event가 끝나고 실행할 코드를 함수로 만들어서 사용할 수 있다. 클래스 구성EventManager- 모든 event클래스의 인스턴스들을 list로 관리한다. 리스트를 순회하며 종료된 event를 멈추고(Stop()) 삭제한다. Event- 모든 event의 최상위 클래스로 event의 추상적인 동작이 정의되어있다. 구체적인 event 클래스들은 이 클래스를 상속받는다. CallFunc- 콜백 함수를 등록할 수 있는 클래스. Event 클래..
요청을 처리하는 수신측과 송신측의 결합도를 줄여주는 패턴요정을 보내는 송신특은 자신이 알고있는 객체에게 요청을 보낸다. 수신측은 자신이 그 요청을 처리할 수 있으면 서비스를 제공하고, 아니라면 자신이 알고있는 다음 객체에게 요청을 전달한다.이런 연쇄를 구현하기 위해 수신 객체들은 하나의 부모 클래스를 두어 인터페이스를 통일시켜야 한다. * 구조를 그리고 싶다. 결과객체간의 행동 결합도를 줄인다.송신측과 수신측이 서로를 몰라도 메세지 전달이 가능하다.수신측은 자신과 연결된 하나의 객체만 알고 있으면 된다.객체에 책임을 할당하는데 유연성을 높인다. 런타임 중에 연결고리를 변경하거나 추가하여 확장시킬 수 있다.메세지의 처리가 보장되지 않는다.연결고리가 잘 정의되어 있지 않다면 메세지가 전달만 되다가 버려질 수..
3 match 게임에는 변수가 하나 있는데, 바로 다음에 나올 jewel의 종류가 불규칙적이고 새로 생성되는 jewel로 인해 어떤 연쇄작용이 일어날지 예상할 수 없다는 것이다.* 애니팡의 경우에는 적절한 계산을 통해 진행 불가능한 board가 나오지 않게 새로운 동물이 생성된다고 한다. 그래도 새로운 동물로 인한 연쇄작용은 예측하기 힘들다. 새로 생성되는 jewel이 일으키는 연쇄작용은 생성되는 jewel과 기존 jewel이 match를 이루는 경우이다.새로운 jewel이 바닥( 자신 index번호에 맞는 위치 )에 도달할 때 마다 그 jewel을 기준으로 match3검출을 수행하는 것은 별로 좋지 않은 방법인 것 같다. 4x2 범위에 있는 jewel이 모두 새로 생성되어 아래와 같은 board가 되었..
3 match 게임의 가장 핵심인 match알고리즘을 구현해보자. 이 글에서 구현하려고 하는 Match3 알고리즘은 Swap한 2개의 jewel을 대상으로 이루어지는 검사이며, 주의해야할 점은 다음과 같다.* match가 되어 jewel이 사라지더라도 실제로 화면에 사라지는 모션이 보여지기 전에는 죽는( 어휘력이 떨어져서 죽는다는 표현밖에 생각 못하겠다. )jewel 위에 있는 jewel이 아래로 떨어지지 않는다. ( 즉, 데이터의 변경이 모션이 끝난 후에 일어난다. )* 3개가 맞으면 재자리에서 죽는 모션이 보여지지만, Bejeweled를 기준으로 4개 이상 match가 되었을 때는 Swap했던 mainJewel을 기준으로 나머지 jewel들이 모이고 mainJewel은 승격된다.( 승격된 jewel은..
비주얼드, 애니팡 등으로 알려진 3 match 퍼즐게임을 만들기 위한 알고리즘을 만들어보자. 3 match 게임의 유일한 입력인 Swap을 먼저 구현보자. Swap은 터치 또는 마우스 입력을 받고 드래그를 감지하여 터치한 jewel과 드래그 한 방향의 jewel과 swap 되면서 이루어진다. Swap을 구현해야할 때 주의해야 할 특징은 다음과 같다.*입력을 한 즉시가 아닌 Swap Action( jewel이 실제로 화면에서 움직이는 행위 )이 이루어 지고 난 후 다음 동작( match 또는 rollback )이 이루어져야한다. *아래 코드들은 윈도우 애플리케이션 기준으로 작성한 코드이며, cocos2d-X엔진을 모티브로 작성한 엔진을 사용하여 실제 cocos2d-X 코드와 비슷하지만 내부적인 동작도 같은..
개요assert는 버그의 발생을 빠르고 쉽게 파악하기 위해 사용하는 매크로다. 이름에서 알 수 있듯 어떤 것을 단언하고 디버깅 중 참 거짓 검사를 통해 단언한 조건문이 거짓이 되면 에러 메세지를 띄우며 프로그램을 종료한다.assert 매크로는 릴리즈모드에서는 컴파일이 되지 않기 때문에 많이 써도 성능에 크게 영향을 주지 않는다. 현명하게 사용하면 버그없는(굉장히 적은) 프로그램을 만들 수 있겠다. 사용 방법assert를 사용하려면 다음 헤더를 추가해 주어야 한다. C : C++ : assert를 사용할 때 주의해야 할 점은 단언할 조건을 작성해야 한다는 것이다. 일반적인 논리에 따르면 참 일때 동작하는 코드들이 많지만 assert는 거짓일 때 동작하기 때문에 일어나면 안되는 조건이 아니라 꼭 일어나야 하..
- Total
- Today
- Yesterday
- rxswift
- Cocos2d-x
- 국내여행
- machine learing
- C/C++
- C
- SHADER
- C++
- 자료구조
- SOCKET
- 수학
- scala
- ue4
- database
- Spring
- swift
- mongoDB
- 데이터베이스
- Java
- OS
- DesignPattern
- Git
- ios
- JSP
- SwiftUI
- 운영체제
- game
- winsock
- 알고리즘
- 드라마
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |