목록분류 전체보기 (104)
눈팅하는 게임개발자 블로그
스마트 포인터는 포인터를 사용할 때의 메모리 누수 가능성을 아예 차단하기 때문에 정말 좋은 도구이지만 얼마 전에 게임 서버에서는 스마트 포인터가 성능이 안 좋기 때문에 잘 사용하지 않는다라는 이야기를 들었다. 충격적이였다. 스마트 포인터를 배우고 나서는 이게 마치 절대적인 진리인 것마냥 생각했었는데. 이런 건 직접 검증해보는 편이 좋다. 스마트 포인터를 사용한 스택타입 template class StackType { public: StackType(); void Insert(const T& data); T Pop(); T GetTop() const; size_t GetLength() const; private: size_t mLength; std::shared_ptr mTop; }; 처음 템플릿으로 구현..
github : github.com/Palamore/Battle-GroundPicking Palamore/Battle-GroundPicking Network Programming Term Project. Contribute to Palamore/Battle-GroundPicking development by creating an account on GitHub. github.com 게임은 다음과 같이 진행된다. 4명의 플레이어가 하나씩 사각형 오브젝트를 움직이고. 칸을 정복하면(큰 사각형을 하나 만들면) 해당 영역이 정복된다. 가장 많은 영역을 정복한 플레이어가 승리한다.
해당 프로젝트는 자바 채팅 프로그램을 기반으로 이를 뜯어 고쳐서 만들기로 한다. 우선 기존 자바 채팅 프로그램의 프로토콜. 프로토콜 용도/내용 방향 "100" 채팅 서버 접속. 로그인 Client -> Server -> Clients "200" 채팅 메시지 전송. /sleep, /wakeup, /whisper 등의 기능 Client -> Server -> Clients 또는 Client -> Server "300" 로그아웃. Client -> Server -> Clients 그 외 수신한 오브젝트를 Broadcast. Client -> Server -> Clients 위의 기본적인 채팅 프로토콜에 땅따먹기 게임의 프로토콜을 추가한다. 프로토콜 용도/내용 방향 "100" 게임 서버 로그인 Client ->..
네트워크 프로그래밍 기말 텀 프로젝트로 진행할 네트워크 땅따먹기 게임. 기본적인 룰에 대한 명세는 다음과 같다. - 한 게임에 4명이 참가하며 모든 땅이 정복될 때까지 게임을 진행한다. - 하나의 게임 공간을 공유하여 게임 필드 위에 자신이 조작할 수 있는 오브젝트를 하나 가진다. - 오브젝트가 지나간 자리(칸)은 해당 플레이어의 고유 색으로 칠해지며, 하나의 영역(도형)을 완성한 경우 해당 영역 전체가 칠해지며 정복된다. - 게임 시작 후 종료까지 가장 많은 면적을 차지한 플레이어가 승리한다. - 필드 위에는 무작위로 효과를 가지는 아이템이 생성되며, 플레이어가 해당 아이템이 존재하는 칸에 닿으면 해당 아이템을 사용한다. - 아이템은 수평 1칸 색칠, 수직 1칸 색칠, 주변 7 * 7 칸 색칠의 효과가..
원본 사이트 learnopengl.com/Lighting/Light-casters LearnOpenGL - Light casters Light casters Lighting/Light-casters All the lighting we've used so far came from a single source that is a single point in space. It gives good results, but in the real world we have several types of light that each act different. A light source that cast learnopengl.com 번역 사이트 heinleinsgame.tistory.com/19?category=757483..
www.gilbut.co.kr/book/view?bookcode=BN002400 게임 서버 프로그래밍 교과서 알고리즘부터 아키텍처까지 www.gilbut.co.kr 해당 책의 내용 중 일부를 정리. 서버의 품질을 측정할 때 하나의 요소로서 확장성이란 것이 있다. 수직 확장 스케일 업(scale-up)이라고도 하며, 서버의 역할을 하는 컴퓨터의 하드웨어(프로세서 같은 부품들)을 더 좋은 것으로 교체하여 서버의 처리량을 늘리는 것. 수평 확장 스케일 아웃(scale-out)이라고도 하며, 서버의 역할을 하는 컴퓨터의 갯수를 늘려 서버의 처리량을 늘리는 것이다. 오류 가능성, 서버 소프트웨어 설계 비용, 단위 처리 속도의 세 가지 측면에서 보자면 수직 확장이 더 좋고. 확장 비용, 처리 가능 총량의 두 가지 ..
DeadLock 발생 조건 4가지 (Coffman Condition) - Mutual Exclusion(상호 배제) 모든 자원은 한 번에 하나의 스레드에게만 점유된다. 한 스레드가 해당 자원에 대한 소유권을 가졌다면 다른 스레드는 해당 자원에 접근할 수 없음. - Hold & Wait(소유 & 대기) 스레드가 한 자원의 소유권을 가진 상태에서 다른 자원의 소유권을 요청한 상태로 대기한다. - No Preemption(비선점) 스레드가 가진 자원에 대한 소유권을 강제로 뺏어올 수 없다. - Circular Wait(환형 대기) 한 그룹의 스레드들에 대해(자원 할당 그래프에서) 각 스레드들이 다른 스레드가 소유한 자원을 요청하는 원형의 고리가 형성된다. 위의 4가지 조건을 모두 만족하는 시스템에서는 교착상태..
www.gilbut.co.kr/book/view?bookcode=BN002400 게임 서버 프로그래밍 교과서 알고리즘부터 아키텍처까지 www.gilbut.co.kr 해당 책의 내용 중 일부를 정리. 소켓 버퍼는 송신 버퍼와 수신 버퍼를 하나씩 가지고 있다. 먼저 송신 버퍼는 일련의 바이트 배열과도 같다. 크기는 고정되어 있으나 마음대로 크기를 변경할 수도 있다. 송신 버퍼(Send Buffer) 송신 버퍼는 큐와 마찬가지로 FIFO(First in First Out, 선입선출)형태로 작동하는데, send함수에 data를 인자로 실행하면 data는 일단 송신 버퍼에 채워진다. 이후 송신 버퍼에 채워진 data는 잠시 후 통신 선로를 통해 점차적으로 빠져나간다. 따라서 송신 버퍼는 뭔가가 채워지더라도 곧 빈..
www.gilbut.co.kr/book/view?bookcode=BN002400 게임 서버 프로그래밍 교과서 알고리즘부터 아키텍처까지 www.gilbut.co.kr 해당 책의 내용 중 일부를 정리. OSI 모델의 계층 1~3에서는 패킷 유실이 발생할 수 있다. UDP의 경우 UDP에서는 패킷 유실이 발생하면 데이터그램 자체가 유실된다. 게다가 UDP 데이터그램의 크기가 클수록 유실될 확률도 높다. IP 패킷은 보통 1300바이트인데, 1만 바이트의 데이터그램을 UDP로 전송하면 운영체제는 이를 대략 1300바이트 정도 크기로 나누어서 보낸다.(IP 패킷 헤더 등이 있으므로 실제로는 조금의 차이가 있다.) 이 경우 대략 8개 정도의 패킷으로 나뉘어져 IP 패킷 8개가 수신측으로 전송된다. 이 중 하나라도 ..
www.gilbut.co.kr/book/view?bookcode=BN002400 게임 서버 프로그래밍 교과서 알고리즘부터 아키텍처까지 www.gilbut.co.kr 해당 책의 내용 중 일부를 정리. 게임에서 주로 사용하는 메시지 형식. 게임의 메시지(데이터)는 크게 텍스트 또는 바이너리 형식으로 정의된다. 텍스트 형식의 메시지는 사람이 읽을 수 있으며 다음과 같다. BuyItem Sword 1 텍스트 형식은 메시지를 받는 쪽에서 특정 글자가 나올 때까지(메타 데이터와 같은) 글자를 검색하거나 구문 분석기(parser)를 동원하는 것이 일반적이다. 과거에는 텍스트 형식을 게임 개발자가 자체 정의하는 경우가 많았지만 요즘은 HTTP나 JSON같은 표준화된 형식을 쓰는 것이 일반적이다. 반면 이진, 즉 바이너..