개요안녕하세요 Shyplants입니다!이번에는 기존 프로젝트에 SRS을 도입한 과정을 정리해 보겠습니다. 왜 SRS을 도입했는가?기존 회전 시스템은 다음과 같은 문제가 있었습니다. - 특정 미노들이 벽 근처에서 회전이 되지 않음- 회전 규칙 불명확 : 추후 도입할 T-Spin 판정에도 문제가 생길 것으로 추정됨 SRS 도입을 위한 사전준비기존 월드 좌표계는 콘솔과 일치시키는 것이 개발에 용이하여 y-down이었는데요.SRS 도입을 위해 정보를 찾아본 결과 Offset Table이라던가, 모든 정보가 y-up 체계를 따르고 있는 점을 확인했습니다.따라서 현재 프로젝트에서는 월드 좌표계를 y-up으로 재정립하였습니다. 이제 보드에서는 Left-Bottom이 인덱스 0이자, 좌표(0,0)가 되었고, 미노의 ..
개요안녕하세요 Shyplants입니다!저번 DevLog #5에서 서버사이드 안정적으로 동작을 위한 품질 개선에 이어이번 DevLog #6에서는 클라이언트 멀티플레이 품질 개선을 위한 작업내용을 정리해보려 합니다. 기존 MultiPlayState 구성도위 그림과 같이 기존 MultiPlayState는 주요 4가지 기능을 담당하는 코드가 한 클래스에 있어 복잡하고, SRP에 위배되었는데요.이를 다음과 같이 개선하였습니다. 개선된 MultiPlayState 구성도 개선된 모듈의 주요 역할은 다음과같습니다. [MultiPlayLogic]- 역할: 게임 규칙 (Move, Rotate, Hold, Drop, Ghost, Board Lock 등) [MultiPlayNetwork]- 역할: 서버 동기화 (SyncFla..
개요안녕하세요 Shyplants입니다!이번 DevLog #5는 네트워크 안정화 작업에 초점을 맞춘 작업을 정리해보려 합니다.지난 DevLog #4에서 룸 조인, 보드/미노 상태 전송 등 의도된 환경에서는 잘 작동하였지만,클라이언트 강제 종료 시 서버 크래시, Disconnect 타이밍 불일치 등 여러 문제가 발견되어 해당 문제 해결을 위해 작업했습니다. 발생한 핵심 문제들1) 클라이언트 강제 종료 -> 서버에서 크래시- 서버는 정상적인 종료 신호를 받지 못하여 비동기 read/write callback이 socket이 닫힌 뒤에도 호출되며 읽기 액세스 위반이 터지고 서버가 죽었습니다. 2) Disconnect가 여러 곳에서 중복 호출됨- ASIO 스레드, 메인 스레드 양쪽에서 여러 경로를 통해 Disco..
개요이번 DevLog에서는 싱글·멀티 플레이 공통으로 동작하는 게임오버 스테이트를 추가하고, 이를 안정적으로 관리하기 위한 상태머신 구조 개선 내용을 정리해보려 합니다. 게임오버 상태를 독립된 GameOverState로 분리싱글 플레이, 멀티 플레이 모두"게임오버 -> 게임 결과 출력 -> Title로 복귀" 흐름이 필요해졌습니다.해당 스테이트를 통해 게임 플레이 결과를 표기할 수 있고, 타이틀 스테이트로 돌아 갈 수 있는 선택을 추가할 수 있었습니다. StateMachine Pop 로직 개선개발 과정에서 겪었던 어려움이 있었는데요, 상황은 아래와 같습니다.싱글 플레이 기준으로 GameOverState에서 TitleState로 되돌아 가기 위해서는 스테이트를 담고 있는 스택을 두 번 Pop 해야 합니다...
개요지난 DevLog #2에서는 콤보 시스템과 FMOD 기반 사운드 시스템 추가로 게임 플레이 완성도를 높였는데요.이번 DevLog #3에서는 멀티 플레이(1 vs 1) 기능을 설계하고 구현한 과정을 정리해보려 합니다. 네트워크 프레임워크 선택유투버 javidx9의 Networking in C++ 시리즈를 기반으로 asio + thread + message queue 구조를 커스텀하여 서버/클라이언트 프레임워크를 제작했습니다. 해당 영상을 통해 주요 학습 & 사용한 기능으로는 다음과 같습니다.1. 비동기 io_context, 독립 스레드 운영2. 메시지 단위의 입출력 패턴3. async_read, async_write 기반 스트림 처리4. 패킷은 header + body 구조로 통일5. DataType ..
개요지난 DevLog #1에서는 테트리스 기본 시스템 구현과 앞으로 해야 할 것들을 정리해 보았는데요.이번 DevLog #2에서는 스폰 초기 회전 버그 수정, 콤보 로직 추가, FMOD기반 사운드 시스템 추가까지 완료된 내용을 작성해 보겠습니다. 스폰 초기 회전 버그 수정- 문제 상황초기 기획된 미노를 담을 보드 사이즈로는 가로 10, 세로 20 사이즈였습니다.이 상태에서 'I'미노가 가운데 중앙 맨 위에 스폰된 직후 회전하게 된다면 보드 사이즈 경계 밖으로 이동된다 판정(OOB)이 발생하였습니다.이 문제뿐만이 아니라 레퍼런스로 삼고 있는 TETR.IO에서는 미노를 보드 위에서 스폰되는데요, 이것 또한 구현하기 힘든 구조였습니다.결국 아래 그림과 같이 보드 사이즈를 수정하였습니다.- 결과초기 스폰위치에서..
개요게임 클라이언트 개발자로 이직하기 위해 다니던 기존 회사를 그만두고 아래와 같은 계획을 세웠습니다.1. C++ 공부 (현재는 Effective C++을 읽고 있습니다.)2. 게임 모작 게임 모작의 경우는 C++ Console -> DirectX11 -> Unreal Engine5 순서대로 만들어볼 예정입니다.이번 프로젝트는 C++ Console로 가장 만들어보고 싶은 게임 테트리스입니다! 사전 준비프로젝트를 원활하게 진행하기 위해서 유튜브에 C++ 콘솔게임을 검색해 본 결과 아래와 같은 강의시리즈를 발견했습니다.https://www.youtube.com/watch?v=B2RPgKxsEVs&list=PL3HUvSWOJR7W9YSPUHodF3SZxAS5_unau해당 강의는 "C++ TEXT RPG" 구현..
#pragma once#include #include #include #include #include namespace Shyplants{ template class MemoryPool { public: static constexpr size_t Alignment = alignof(T); static constexpr size_t AlignedBlockSize = ((BlockSize + Alignment - 1) / Alignment) * Alignment; MemoryPool() : m_currentBlock(nullptr), m_currentPos(nullptr), m_lastBlock(nullptr), m_freePos(nullptr) {..
- Total
- Today
- Yesterday
- C++게임개발
- DP
- asio
- 정보올림피아드
- 멀티플레이
- 브레젠험 알고리즘
- Codeforces
- 테트리스 모작
- UE5.3
- 백준
- opengl
- 홍정모의 게임 만들기 연습 문제 패키지
- 콘솔게임
- ICPC 후기
- C++
- 언리얼 프로젝트 재생성
- 숫자판 만들기
- tetris
- 초등부
- unreal enigne
- 언리얼 자동화
- C++게임
- gamedev
- ndisplay
- 테트리스
- 언리얼 프로젝트 재생성 자동화
- OpenVDB
- Unreal Engine
- DevLog
- 코드포스
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 | 29 | 30 |
