game · gunmo.my

ANIME POKER

애니풍 캐릭터 5명과 치는 홀덤 · 7포커. 유저봇이 들락날락하는 실시간 테이블.

2026.10 – BETA플레이
타이틀 화면 — 다섯 캐릭터가 테이블에 둘러앉음
타이틀 화면 — 다섯 캐릭터가 테이블에 둘러앉음
2종목
홀덤 6인 · 7포커 5인
5명
애니풍 캐릭터
3단계
동네판 · 하우스 · VIP룸
BETA
2026.10

01개요

캐릭터를 골라 테이블에 앉으면 익명 유저들이 수시로 들어오고 나가는 포커 게임입니다. 돈과 카드는 전부 서버가 계산하고, 화면은 "무엇을 할지"만 보냅니다. 홀덤 · 7포커 규칙 엔진은 순수 TypeScript 모듈이라 웹과 서버가 같은 파일을 쓰고, 같은 테스트로 검증됩니다. 실제 돈이 아닌 사이트 안 점수로만 칩니다.

02기술 스택

화면
React 19TypeScriptTailwind CSS컨테이너 쿼리(cqmin) 무대 — 폰 세로 · PC 가로 자동 배치
서버
Expresssocket.io 게이트웨이(구독 · RPC)MongoDB (지갑 · 핸드 기록)
규칙
홀덤 · 7포커 엔진을 순수 TS 모듈로 — 웹과 서버가 같은 파일을 import엔진 단위 테스트 360여 개
에셋
AI 생성 원화 → 파이썬 가공(크로마키 · 셀 분리 · 덩어리 분리 · webp)

03한 판의 흐름

행동 보냄
콜 · 레이즈 얼마 · 카드 고르기 (RPC)
서버 엔진
차례 · 금액 · 규칙 검사 → 상태 갱신
테이블 구독
모두가 보는 공개 상태
내 패 구독
나만 받는 숨은 정보
  • 쇼다운 전에는 어떤 이벤트에도 남의 패가 실리지 않음 (구경꾼 시점 테스트로 고정)
  • 판이 끝날 때마다 사람 몫의 증감을 DB에 반영하고 핸드 기록을 남김
  • 시간 초과 · 접속 끊김 · 중간 이탈은 서버가 대신 처리 — 판은 항상 끝까지 돈다

04화면

로비 — 모드 · 판돈 3단계 · 열린 방
로비 — 모드 · 판돈 3단계 · 열린 방
홀덤 테이블
홀덤 테이블
7포커 — 삥 · 쿼터 · 하프 베팅
7포커 — 삥 · 쿼터 · 하프 베팅

05만든 것들

게임
  • 홀덤: 전원 기본 판돈(앤티) + SB/BB, 노리밋, 사이드팟 · 우선쇼 규칙까지 구현
  • 7포커: 버릴 카드 → 펼 카드 두 번 탭으로 시작, 체크 없이 삥 · 따당 · 쿼터 · 하프 또는 다이
  • 판돈 3단계 방 + 비밀번호 방, 자금 순위, 칩이 바닥나면 기본 칩 자동 지급(하루 10번)
같이 치는 느낌
  • 익명 유저봇이 수시로 들어오고 나감 — 별명 · 성향 · 실력 · 머무는 판 수가 모두 난수
  • 캐릭터가 테이블에 앉아 포즈 · 표정이 바뀌고, 이모티콘 · 대사 말풍선 · 올인 컷인
  • 이름표를 누르면 그 방에서 딴 돈 · 전적(승률)이 보임 — 봇도 똑같이 집계
플레이 UX
  • 외침(체크 · 레이즈 · 삥…)이 캐릭터에게서 판 가운데로 커지며 날아가는 대사 연출
  • 차례가 아닐 때도 같은 베팅 버튼 줄이 남아 미리 눌러 두면 차례에 자동 실행(한게임식 프리액션)
  • 3초 남으면 3 · 2 · 1 카운트다운, 지금 차례 표시 바, 메이드(트리플 이상)면 카드 뒤 금빛 버스트
  • 나가기는 판이 끝나면 나가는 예약 방식 — 중간 이탈로 판이 깨지지 않음

06문제와 해결

남의 패가 새지 않게

문제
상태를 그대로 쏘면 개발자 도구만 열어도 남의 패 · 다음 카드가 보일 수 있다.
원인
덱 · 패 같은 숨은 정보가 공개 상태와 한 덩어리로 다뤄졌기 때문.
해결
덱과 패는 서버 메모리에만 두고, 모두가 보는 테이블 구독과 나만 받는 내 패 구독을 분리. 쇼다운 전에는 어떤 이벤트에도 남의 카드가 실리지 않는 걸 구경꾼 시점 테스트로 고정했다.

봇이 봇처럼 보이던 것

문제
몇 명이 즉답으로만 치니 한눈에 봇 티가 났다.
원인
이름 · 성향 · 생각 시간이 고정값이었기 때문.
해결
별명 생성기 + 성향(공격성 · 블러프 · 콜 기준 · 페이스) 난수로 매번 다른 '유저'를 만들고, 입장 간격 · 머무는 판 수 · 생각 시간(1.2초~제한 직전)을 전부 흔들었다. 패 평가에도 노이즈를 섞어 가끔 실수하게 했다.

미리 행동 · 카운트다운의 경합

문제
프리액션이 지난 차례에 나가거나, 행동한 뒤에도 카운트다운이 떴다.
원인
행동 전송과 서버 상태 도착 사이의 짧은 틈 동안 화면은 아직 '내 차례'였기 때문.
해결
차례마다 고유한 마감시각(deadline)을 '이미 행동한 차례'의 키로 기억해 그 차례의 자동 실행 · 카운트다운을 막았다. 콜 예약은 눌러 둔 시점의 베팅 금액이 그대로일 때만 나간다.

AI 원화를 게임 에셋으로

문제
받은 시트는 머리카락이 칸을 넘어가고 배경색이 비쳤다.
원인
시트를 균등한 칸으로만 잘랐기 때문.
해결
파이썬으로 크로마키 제거 · 셀 분리에 연결 요소(덩어리) 분석을 더해 옆 칸에서 넘어온 조각을 지웠다. 앉은 그림은 '테이블에 가려지는 선'을 기준으로 줄을 맞춰 어떤 캐릭터든 같은 좌표에 앉는다.
Gunmo Lee