반응형

전체 글 214

DirectX 9로 만든 데모: Nine Balls

DirectX 9로 만든 데모로 제목은 Nine Balls입니다. 특별한 의미는 없고 9개의 볼이 화면의 중심에 나오기에 제목을 그렇게 지었습니다. 오래 전에 취업용으로 P2P엔진 데모로 만들었던 것이 시작이었습니다. 이 글을 읽은 분들은 프로그래밍 공부 어떻게 하시나여? 이 데모는 간간히 3D 프로그래밍을 공부하면서 배운 것을 응용하여 적용하면서 확장된 데모입니다. 즉 3D 프로그래밍 학습용으로 만든 데모입니다. 서버 프로그래머여서 시간날 때 간간히 공부하다보니 다이렉트X가 9에서 11로 그리고 최근에는 12로 옮겨가는 추세여서 조금은 예전 프로그래밍을 한 거 같은 느낌도 듭니다. 하지만 3D를 공부하면서 느낀 점은 API에 집중하기보다는 관련 알고리즘이나 수학을 공부하는 것이 어떤 API를 사용하는가..

개발이야기 2022.08.14

슈퍼 마리오 오딧세이를 클리어 한 후에...

예전에 슈퍼패미콤으로 발매된 슈퍼마리오를 클리어한 후 실로 오랜 시간이 지난 후에 슈퍼 마리오 오딧세이를 플레이하여 클리어 하였습니다. 보잘 것 없지만 폭탄 방어자란 게임을 혼자 만든 후에 재밌는 게임은 어떻게 만들어야 하는가에 대한 무수히 많은 질문들이 떠올라 게임의 재미를 추구하기로 유명한 닌텐도의 게임을 플레이 해보았습니다. 간단한 게임이었지만 실제로 게임을 처음부터 끝까지 만드니 팀으로 개발할 때와는 달리 너무도 많은 한계를 경험하며 다른 게임은 어떻게 재미있는 게임을 만드는지가 궁금하여 플레이하게 되었습니다. 한마디로 이 게임을 말하자면 정말로 잘만든 게임이 무엇인지를 느끼게 해주었던거 같습니다. 게임의 코어적인 측면을 보자면 마리오 시리즈의 처음에 가져갔던 점프해서 적의 머리를 밟아 적을 없애..

기타 2022.07.17

폭격방어자 ver 1.1 업데이트

폭격방어자를 1.1로 업데이트 했습니다. 1인 개발로 만들었는데 유료라서 그런지 게임의 재미가 떨어져서 그런지 판매량이 절망수준이었습니다. 나름 일정기간 순위차트에 들었다는 것만이 위안이 되었습니다. 이번 업데이트는 그런 고민 속에서 만든 것이었습니다. 많이 플레이 해주기를 바라며 유료 가격도 반으로 줄였습니다. 다운로드 수가 적으니 유저의 전반적인 반응을 살피기는 어려웠습니다. 결국 지인들이 플레이 해보고 들려준 이야기와 비슷한 여러 다른 게임들을 해보며 느낀 점을 바탕으로 게임을 일정부분 재구성하였습니다. 또한 다양한 게임 아이디어를 새롭게 적용하여 기존 버전과는 조금 다르게 좀 더 치고 받는 성향의 게임이 되도록 개발하였습니다. 게임을 만드는 사람의 마음일 수도 있겠지만 무언가 부족한 기존 버전을 ..

개발이야기 2022.06.17

게임기획: 게임 난이도 조절 팁

잘 만든 게임의 몰입의 재미를 만드는 최고의 요소는 게임 난이도 일 것입니다. 아무리 잘 만든 게임이라고 해도 난이도가 너무 쉽거나 어려우면 게임의 재미를 느끼기 힘듭니다. 그래서 보통 게임들은 여러 난이도를 제공하기도 합니다. 게임난이도는 실제로 게임을 만들 때 가장 만들기 어려운 부분이기도 합니다. 이럴 때 사용할 만한 팁을 하나 말할까 합니다. 게임난이도를 조절할 때 보통은 테스트 스테이지를 만들 수 있을 것입니다. 이럴 때 속도, 공격력, 방어력 등등의 난이도를 만드는 요소들을 최고 수치로 요소별로 테스트해 봅니다. 그리고 해당 요소들을 가지고 게임에서 최고로 가져갈 수 있는 난이도 수준의 수치를 정합니다. 이후에는 개별적으로 테스트한 난이도를 조합하여 테스트를 해보고 최종 수치를 정합니다. 이렇..

개발이야기 2022.06.17

C++ 코루틴(coroutine) 활용 강좌: #4 : co_yield

이번 강좌는 co_yield 이용하여 값을 생산하면서 제어권을 다른 쪽으로 넘기는 예제를 살펴보도록 하겠습니다. 코루틴 상태 관련 객체로 cotask_enumarator을 정의하여 사용합니다. 구체적으로 값을 생산하는 함수A 예를 살펴보도록 하겠습니다. 이 예제는 Unity 등 C#에서 많이 쓰는 IEnumerator를 리턴하는 함수와 같은 cotask_func_enum 함수를 정의하고 있습니다. 이 예제는 C#에서 많이 쓰는 코루틴 기법을 C++에서 사용하는 법을 보여주고 있습니다. 예제 코드는 아래와 같습니다. #include #include #include #include #include #include using namespace std; template struct cotask_enumarato..

강좌 2022.05.24

C++ 코루틴(coroutine) 활용 강좌: #3 : co_return

이번 강좌는 co_await를 이용하여 함수 중간에 제어권을 다른 쪽으로 넘기다가 코루틴 함수의 끝에 co_return으로 값을 리턴하는 예제를 살펴보도록 하겠습니다. 예제는 실행 중간에 실행권을 멈추고 제어권을 다른 쪽으로 넘기면서 실행되다가 코루팀 함수의 끝에 값을 co_return으로 리턴하고 종료하는 코루틴 함수 A와 B를 보여주고 있습니다. C++ 코루틴(coroutine) 활용 강좌: #2 : co_await의 예제와 내용이 비슷한데 co_return으로 값을 리턴하고 코루틴 함수가 종료된다는 것만 틀립니다. 예제 코드는 아래와 같습니다. #include #include #include #include using namespace std; template struct cotask_return ..

강좌 2022.05.23

C++ 코루틴(coroutine) 활용 강좌: #2 : co_await

이번 강좌는 c++ coroutine의 기본적인 사용법과 co_await를 이용하여 함수 중간에 제어권을 다른 쪽으로 넘기는 것을 살펴보도록 하겠습니다. 구체적으로 실행 중간에 실행권을 멈추고 제어권을 다른 쪽으로 넘기면서 실행되는 함수 A와 B의 예를 살펴보도록 하겠습니다. 예제는 Win32의 Fiber를 사용하는 것과 비슷하게 느껴질 것입니다. 예제 코드는 아래와 같습니다. #include #include #include #include using namespace std; struct cotask_noreturn { struct promise_type; using handle_type = std::coroutine_handle; struct promise_type { std::exception_pt..

강좌 2022.05.20

C++ 코루틴(coroutine) 활용 강좌: #1 시작하며 그리고 기본 개념

코루틴이라는 것이 개념적으로는 쉬운 내용이고 C#과 같은 다른 언어에서는 언어의 기본 구현에 포함되어 간편하게 사용할 수 있습니다. 하지만 C++은 늦게 C++ 20 표준에 포함되었고 구현이 조금은 투박하게 느껴지는 관계로 사용하는게 쉽지는 않습니다. 이런 이유로 코루틴의 활용보다는 코루틴 사용을 위한 기반 내용에 초점이 맞추어져 있는 기존 글들과는 달리 활용에 맞추어 강좌를 만들었습니다. 이 강좌 시리즈에서는 표준에 맞게 C++로 구현한 코루틴 관련 상태 객체 소스를 바탕으로 실제로 코루틴을 사용하는 활용 예제를 살펴보도록 하겠습니다. C++ 표준에서 코루틴을 사용하기 위하여 직접 구현해야 하는 것 중 하나가 코루틴 관련 상태 객체인데 이 부분은 예제 소스로 제공하도록 하겠습니다. 실제로 자신의 프로젝..

강좌 2022.05.19

C++ REST API 사용 강좌 : #2 HTTP POST (boost beast 활용)

이번에는 C++ boost beast를 활용하여 JSON을 인자로 REST API을 호출하여 데이터를 받는 예제를 살펴보도록 하겠습니다. 이 강좌는 C++ REST API 사용 강좌 : #1 HTTP GET (boost beast 활용)에서 이러지는 강좌로 설명 소스가 비슷한 관계로 해당 글에서 설명한 내용(UTF-8, 비동기 처리 등)은 이 글에 없는 관계로 해당 글도 꼭 참고 부탁드립니다. 이번에 살펴볼 소스는 아래와 같습니다. #include #include #include #include #include #include using namespace std; int main(int argc, char* argv[]) { boost::asio::io_context ioc; boost::asio::ip..

강좌 2022.05.12

C++ REST API 사용 강좌 : #1 HTTP GET (boost beast 활용)

근래에는 TCP/IP로 바로 통신하는 프로그램보다는 REST API를 이용하여 통신하는 프로그램이 대세인 듯 보입니다. 여기서는 C++로 REST API를 사용하는 방법을 알아보도록 하겠습니다. 강좌는 boost를 사용하였으며 boost에서 HTTP 통신 관련 상위 라이브러리인 boost beast를 사용합니다. REST API의 기본이 되는 GET 메소드를 이용하여 데이터를 가져오는 방법을 살펴보겠습니다. GET 메소드를 이용하여 데이터를 가져오는 소스는 아래와 같습니다. 소스를 보면서 계속 설명하겠습니다. #include #include #include #include #include #include using namespace std; int main(int argc, char* argv[]) { ..

강좌 2022.05.11

C++ boost json array 생성 및 파싱 예제

boost json라이브러리를 사용할 때 json array를 생성하거나 파싱하는 예제입니다. 사용법은 예제가 간단하게 되어 있는 관계로 예제를 이해하시면 됩니다. #include #include using namespace std; using namespace boost; int main(int argc, char* argv[]) { json::value jv1 = { { "Hello", "World1" } }; json::value jv2 = { { "Hello", "World2" } }; json::object jo1; jo1["test1"] = jv1; jo1["test2"] = jv2; std::string str1 = json::serialize(jo1); cout

MFC WebView2(IE Edge, 엣지) 컨트롤

윈도우에서 웹을 보여주는 기존 인터넷익스플로어(IE)기반 컨트롤은 상대적으로 느리고 HTML5등 최신 웹에 대한 호환성도 좋지 않습니다. 그래서 MS가 인터넷익스플로어에서 엣지(Edge)로 웹브라우저를 변경했듯이 WebView2라는 엣지 기반의 웹을 보여주는 컨트롤을 외부 라이브러리로 제공하여 줍니다. 만들고 있는 C++ MFC 기반의 클라이언트에서 특정 정보들을 웹으로 보여주는 관계로 WebView2 컨트롤을 위 스크린 샷처럼 사용하여 보았습니다. 실제 코딩은 Code Project의 WebView2 Edge Browser in MFC C++ Application를 참조하여 만들었습니다. 적용하는데 반나절 정도 걸렸는데 적용하기가 IE기반 컨트롤에 비하여 조금은 까다롭습니다. 해당 소스를 보면 컨트롤을..

SPA 웹 #2: REST API Server: 노드(Node.js) vs 스프링부트(Spring Boot)

들어가면서 이 글은 SPA 웹 #1: Vue.js + REST API Server에서 이어지는 글입니다. REST API 서버를 노드(Node.js)와 스프링부트(Spring Boot)로 몽고DB를 이용하여 구현하여 보았습니다. 몽고DB를 이용한 것은 만들고 있는 시스템트레이딩 프로그램이 몽고DB를 이용하고 있기 때문입니다. 워낙 기술적으로 유명한 것들이라 기술적 호기심으로 두 개의 기술로 다 구현하여 보았습니다. 어떻게 보면 이번에 만든 것이 간단한 것이라 기술적 프리뷰로 어느쪽으로 계속 개발할지를 알아보는 프로토타입의 의미도 있었습니다. REST API를 이용하는 부분은 스크린샷의 1, 2, 3부분의 데이터 입니다. 노드(Node.js) 기본적으로는 앱 서버로 많이 이용되는 듯 보였습니다. 참고로 서..

개발이야기 2022.05.03

SPA 웹 #1: Vue.js + REST API Server

들어가면서 현재 만들고 있는 시스템 트레이딩 프로그램은 클라이언트와 서버를 C++로 만들고 있습니다. C++로 만들고 있다보니 간단한 시뮬레이션 조회를 만드는 것도 많은 시간을 필요로 합니다. 이런 생산성 문제를 해결하기 위하여 간단한 데이터 조회는 웹과 REST API 서버를 이용하여 빠르게 개발하려고 하였습니다. 이와 같은 생각으로 구성한 것이 Vue.js + REST API서버 조합이었습니다. 솔직히 이쪽 기술은 깊게는 잘 모르다보니 실제로 구현하면서 많은 것을 배우게 되었고 이글은 배운 내용과 최근의 개발 흐름에 대한 것입니다. Vue.js 처음에는 너무 유명해서 구현시 자바스크립트 라이브러리로 사용하려고 했는데 배우고 사용하다 보니 일반적인 자바스크립트 라이브러리가 아니라서 결국 Vue.js +..

개발이야기 2022.05.02
반응형