스크린샷 2026-09-22 132031.png

뱀과 사다리 (shared-memory-game)

두 플레이어가 주사위를 굴려 보드를 이동하고, 문어 다리와 미니게임을 거쳐 먼저 도착 지점에 도달하는 2D 턴제 보드게임이다. 주사위의 무작위성과 퀴즈·타이핑·숫자 맞히기 결과에 따른 이동 변화를 결합했다.

프로젝트 한눈에 보기

항목 내용
장르 2D 턴제 보드게임
플레이 인원 2명
기술 및 실행 환경 C · SDL2 · SDL2_image · SDL2_ttf · CMake / Linux, Windows에서는 WSL 환경
핵심 기술 System V 공유 메모리 · POSIX 시그널 · fork · 파이프
관련 링크 GitHub 저장소

1. 프로젝트 개요

2024년 2학기의 게임서버프로그래밍입문 수업에서 기말고사 과제로 진행한 팀 프로젝트로, 뱀과 사다리를 모티브로 제작한 게임이다. Linux의 프로세스 간 통신 기능을 진행에 활용한다. 매니저 프로세스가 게임의 시작과 턴 전환을 시그널을 사용해 관리하고, 두 클라이언트가 공유 메모리를 통해 같은 게임 상태를 참조한다.

게임 진행

  1. 매니저에서 방 번호를 정하고, 두 클라이언트가 같은 번호로 참여한다.
  2. 자신의 차례에 게임 화면을 클릭하면 1~6 범위의 주사위 값만큼 이동한다.
  3. 문어 다리가 연결된 칸에 도착하면 지정된 다른 칸으로 이동한다.
  4. 미니게임 구역에서는 퀴즈·타이핑·업다운 중 하나가 무작위로 선택된다.
  5. 미니게임 성공 시 1~2칸 전진하고, 실패 시 1~2칸 후진한다.
  6. 매니저가 도착 여부를 판정하고, 각 플레이어의 화면에 승패 결과를 표시하도록 구성되어 있다.

실행 환경

동일한 Linux 환경에서 매니저 하나와 클라이언트 두 개를 실행하는 구조이다. 방 번호는 공유 메모리를 식별하는 키로 사용한다. 화면을 표시하려면 Linux 데스크톱 또는 WSLg 환경이 필요하다.

2. 주요 구현

공유 메모리를 이용한 게임 상태 공유

공통 구조체인 GameData에 플레이어 위치, 현재 턴, 승자, 게임 진행 여부, 보드 연결 정보와 미니게임 구역 정보를 저장한다. 매니저가 shmget으로 공유 메모리를 생성하고, 클라이언트가 동일한 방 번호로 해당 영역에 연결한다.