프로그래밍
-
bool은 왜 1비트가 아닌 1바이트인가프로그래밍/c++ 2018. 2. 9. 16:13
Because every C++ data Because every C++ data type must be addressable.https://stackoverflow.com/questions/2064550/c-why-bool-is-8-bits-long가장 심플하고 좋은 대답인 듯 ~~?? 하지만 bool 벡터(std::vector)의 경우는 비트로 특수화 되어있다.http://en.cppreference.com/w/cpp/container/vector_bool
-
난수 동기화프로그래밍/기록, 개념, 용어 2018. 2. 6. 19:37
컴퓨터에서 진정한 의미의 난수는 없다. 유사 난수 발생기가 동기화 불일치의 원인이 될 때가 있다. 게임에서 임의성은 필수적인 요소이므로 이것이 빠질 수도 없다.클라이언트/서버 구조라면 서버에서 임의의 값을 지정함으로 동기화를 어떻게든 할 수 있다. 하지만 클라이언트 난수 시뮬레이션이 필요한 p2p에서라면? c, 그리고 c++에서의 난수 발생srand는 난수 발생기의 시드 값을 지정하고, rand는 난수를 생성한다. srand로 특정 시드를 지정하고 나면 rand는 같은 순서로 일련의 숫자를 생성한다.c 표준의 난수 발생기는(rand, srand) 어떤 난수 발생 알고리즘을 쓸지 명시되어있지 않다.따라서 유저A의 PC와 유저 B의 PC는 같은 rand 호출에도 내부적으론 다른 알고리즘으로 돌아갈 여지가 있..
-
코드를 생성해 파일에 코드를 주입하자프로그래밍 2018. 1. 17. 04:11
업무에 노가다를 줄여보고자 남는 시간에 코드를 만드는 코드를 만들었다. PQL이라는 이름을 붙인 쿼리 파일로부터 클라이언트에 삽입되는 코드를 만드는 것이 목적이었다.PQL은 이렇게 생겼다.select [ID:int], [Level:short], [Name:nvarchar(20)] from Character;그냥 sql의 select 쿼리에 저장할 타입을 지정한 것이다. 사실 이것도 내가 만든거라 이름도 내가 붙인거다. 필규 쿼리 랭귀지라고 -_-;여튼 저 문법을 통해서 만들어야 할 구조체를 알 수 있는데 위 PQL은 다음과 같은 구조체의 컨테이너에 로드가 될 것임을 알 수 있다.struct Character{ int id; short level; wchar_t name[20];};그런데 저 코드를 만드는..
-
비주얼 스튜디오 확장 vsix, 간단 활용 정리프로그래밍 2017. 12. 27. 11:28
회사 업무를 하다보면 패킷을 만들 일이 있는데 이 일은 전혀 재밌지 않다보니, 좀 더 편하고 재밌게 하고 싶었다. 비주얼 스튜디오에 있는 확장 기능 같은 것이 떠올랐으며 해당 기능을 개발하기 위해선 뭐를 해야하는지 간단히 알아봤다. (vs2017 기준)새 프로젝트 -> Visual C# -> Extensibility -> VSIX Project 로 VSIX 프로젝트를 만들 수 있다. 난 프로젝트 이름을 vermouse로 지었다. 어감이 좋아서. 위에서 만든 프로젝트에서 새 항목 -> Visual C# 항목 -> Extensibility -> Custom Command 이 중 눈여겨 볼 곳은 위에서 만든 Custom Command 파일과 .vsct 확장자 파일이다. Custom Command 파일에서 Me..
-
유용하다고 생각한 비쥬얼 스튜디오 디버깅 기능. 중단점 설정.프로그래밍 2017. 12. 25. 18:10
중단점(빨간콩)을 찍고 마우스를 데면 다음과 같은 창이 보인다.저기서 설정(톱니바퀴)를 누르면 다음과 같은 중단점 설정 기능이 나온다. 중단점 조건과 조건에 해당하는 작업을 걸 수 있다. 아래 이미지에서 예제에서 보이듯 x == 5처럼, 특정 상황에서만 걸리게 할 수 있는 것이다. 이런 거나if(x == 5){ int a = 0; // 예전엔 이런식으로 조건 중단점 찍음}이런 걸 안 할 수 있다는 거다.if(x == 5){ printf("x == 5");} 그냥 디버깅 코드를 직접 박는 거랑 다를 게 뭐냐? 라고 할 수도 있겠지만 결국 저 디버깅 코드들은 추가에도 새 빌드를, 제거에도 새 빌드를 돌려야 한다는 거다.빌드 시간이 꽤 긴 프로젝트라면? c++의 경우, 만약 여기저기 쓰이는 헤더에 걸려있다면?..
-
비주얼 스튜디오, 64비트 테스트는 32비트 프로세스에서 실행할 수 없습니다. 오류 해결프로그래밍/의문 2017. 12. 12. 14:28
비주얼 스튜디오에서 기본적으로 제공하는 c++ 테스트 프로젝트를 써보려고 했다. 테스트 할 프로젝트를 참조하고, 프로젝트를 dll로 익스포팅 하고, 모두 다 했을 텐데 테스트를 실행하자 오류가 발생했다! 오류 메세지는 64비트 테스트는 32비트 프로세스에서 실행할 수 없습니다. 테스트 타겟 프로젝트도 64비트로 빌드했고, 유닛 테스트 프로젝트도 64비트로 설정했는데 무엇이 문제인가 찾아봄 요게 문제였다. 비주얼 스튜디오의 플랫폼이 x64로 되어있다고 해서 테스트도 그걸 따라가는 게 아니더라. 저 메세지가 발생한다면 테스트->테스트 설정->기본 프로세서 아키텍처를 한 번 확인해보자.테스트 설정의 기본 프로세서 아키텍처를 64비트로 설정하자 오류는 해결되었다.
-
트라이브스의 네트워킹 모델프로그래밍 2017. 12. 10. 20:35
트라이브스는 1998년에 출시된 FPS 장르의 게임이다.이 게임은 128명 까지 접속 가능한 게임 모드를 재공했으며 이는 당시 기술로는 어려운 일이었다.트라이브스를 만드는 데 사용된 네트워크 모델은 여전히 상당 부분 유용하다.효율성을 문제로 비 신뢰성 프로토콜, UDP를 사용했으며, 크게 네 가지 종류로 데이터 요구 사항을 구분했다. 전달 미보장 데이터: 게임에 있어서 중요하지 않은 데이터. 네트워크 대역폭이 적으면 이 종류의 데이터부터 생략한다.최신 상태 데이터: 지금이 아니면 의미 없는 성격의 데이터. // 현재 HP를 알고 있다면 5초 전의 HP는 중요하지 않다.전달 보장 데이터: 수신과 순서가 보장되어야 하는 데이터. // 플레이어의 총 발사 등특급 전달 보장 데이터: 최우선적으로 보내져야 하며 ..
-
유니티 클라이언트와 c++ 서버 플랫 버퍼로 통신하기 성공~프로그래밍/의문 2017. 12. 4. 22:10
c++ 서버는 boost/asio 기반으로 만들었다. #include #include #include #include "packets.h" class flatbuffers_filter : public nta::receive_filter // 아직 작성되지 않음{public: virtual result feed(const std::byte* data, std::size_t size) { return drain(size); }}; class session : public nta::tcp::session {public: session(nta::tcp::session_params params) : nta::tcp::session(std::move(params)) { } virtual void on_opened(..