C++ 스네이크 게임 만들기 - 1

AI에게 C++로 할 수 있는 간단한 프로젝트를 소개해 달라고 했는데 그중 재밌어 보이는 것이 있어서 포스팅하게 되었습니다. 터미널 환경(CLI)에서 키보드만 사용해서 할 수 있는 고전 게임 “스네이크"입니다. 구성 1 2 3 4 5 6 7 8 . ├── .git ├── src/ │ └── main.cpp ├── .gitattributes ├── .gitignore ├── CMakeLists.txt └── README.md 핵심 내용 터미널 특정 좌표에 출력할 수 있어야 함 뱀이 움직일 수 있는 프레임이 있고 그 밖을 벗어나면 종료 먹이를 먹으면 꼬리가 길어지고 뱀 몸통을 가로지를 수 없음 터미널 제어 라이브러리 ncurses 터미널에서 글자와 기호로 화면을 구성하는 프로그램을 만들 때 쓰는 라이브러리 커서 이동, 색상 표시, 키보드 입력 처리, 화면 갱신 같은 기능을 제공 여러 창·메뉴·입력 폼을 터미널 안에 만들 수 있음 텍스트 편집기나 설정 화면처럼 그래픽 없이 작동하는 TUI(텍스트 사용자 인터페이스)​를 구현할 때 유용함 C 프로그램에서 자주 사용하며, ncurses....

2026년 11월 07일 · 3 min · 613 words · JongBin

C++ 이미지를 문자로 표현해보기 img2ascii

오늘의 만들어볼 간단한 프로젝트는 바로 이미지를 아스키코드로 변환해 주는 img2ascii입니다. 🌳 구성 1 2 3 4 5 6 7 8 9 . ├── .git/ ├── .gitattributes ├── third_party/ │ └── stb/ │ └── stb_image.h ├── src/ │ └── main.cpp └── CMakeLists.txt 작은 프로젝트지만 git과 cmake를 활용했고 이미지 파일을 로드하기 위해 nothings/stb 라이브러리를 사용했습니다. 👍 🚀 핵심 내용 💡 Info 전체 코드는 이곳에서 보실 수 있습니다. 2차원(가로, 세로)으로 이루어진 사진은 컴퓨터에서 1차원 배열로 이루어져 있습니다....

2026년 11월 04일 · 3 min · 565 words · JongBin

C++ 크로스 플랫폼(Cross-Platform) 구성 해보기

소켓 프로그래밍이 궁금해서 계속해 보던 중 윈도우와 리눅스 두 진영에서 같은 코드로 컴파일할 수 없을지 문득 생각이 들어서 알아보다가 포스팅하게 됐습니다. 😎 🔥 크로스 플랫폼 💡 크로스 플랫폼(Cross-Platform)은 하나의 소프트웨어, 코드, 프로그램이 윈도우, macOS, 리눅스, 안드로이드, iOS 등 서로 다른 여러 운영체제나 기기 환경에서 동시에 작동하는 것을 뜻합니다. 크로스 플랫폼 프레임워크·라이브러리 대표적인 것은 아래와 같습니다. 용도 도구 주 언어 특징 모바일·웹·데스크톱 앱 Flutter Dart 하나의 코드베이스로 여러 플랫폼 앱을 만들고, 자체 UI 렌더링 방식으로 화면 모양을 비교적 일관되게 유지해요....

2026년 10월 23일 · 3 min · 633 words · JongBin

C++ Lock-free 메모리풀 구현

이전 글에서는 메모리풀의 개념과 싱글 스레드에서 사용할 메모리풀을 구현해 보았습니다. 이번 글은 thread-safe 한 메모리풀을 구현해 볼겁니다! 😄 ✅ mutex 와 lock-free 로 만들 수 있는데 이번 글은 lock-free 를 이용해서 만들겠습니다. 🚀 Lock-free 메모리풀 ✨ 공유 자원 _header 및 CAS 문제 해결을 위해 Tag 추가 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 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 #ifndef __LF_MEMORY_POOL_H__ #define __LF_MEMORY_POOL_H__ #include<algorithm> #include<cstring> #include<atomic> template<typename T, size_t capacity = 1024> class LFMemoryPool { struct LinkedList { LinkedList *next; }; using TaggedLinkedList = std::pair<LinkedList *, uint64_t>; static constexpr size_t alignment = std::max(alignof(T), alignof(LinkedList)); static constexpr size_t blockSize = std::max(sizeof(T), sizeof(LinkedList)); public: LFMemoryPool() : _chunk{0,} , _header({nullptr, 0}) { TaggedLinkedList header = _header....

2025년 10월 20일 · 2 min · 382 words · JongBin

C++ 메모리풀 개념 및 구현

프로그램이 런타임 중에 동적으로 메모리를 할당하려면 new/delete 키워드를 사용하여 운영체제한테 메모리를 요구합니다. 이 때 시스템 콜을 시작으로(커널 모드 진입) 전역 힙에서 요청한 크기의 블록을 찾고 Free list 를 관리하며 필요한 경우 메모리 페이지 테이블 업데이트 등의 작업을 수행하고 여러 스레드가 동시에 힙에 접근하는 것을 막기 위해 동기화 작업도 진행됩니다. 현대의 응용 프로그래밍은 이런 내부적인 상황까지 고려하여 설계하지 않겠지만, 최적화 관점에서 볼 때 동적으로 생성하는 것(메모리, 스레드 등등)을 최소화하면 좋다는 것입니다! 😄...

2025년 10월 19일 · 3 min · 529 words · JongBin