soft-puzzle
v0.5.1
Published
터미널에서 즐기는 LAN 파티 게임 9종
Downloads
881
Readme
소프트퍼즐 (soft-puzzle)
같은 와이파이(LAN)에 모인 사람들이 터미널만으로 즐기는 카드게임 파티입니다. 설치할 앱도, 계정도, 인터넷도 필요 없습니다 — 한 명이 방을 만들면 나머지는 같은 네트워크에서 자동으로 그 방을 찾아 들어옵니다.
블랙잭·원카드·야추(Yacht)·마피아·다빈치 코드·라이어 게임·인디언 포커·윷놀이·라스베가스를 지원합니다.
요구 사항
- Node.js 22 이상
- 같은 LAN(같은 와이파이/공유기)에 연결된 2~6명
설치
npm에 게시된 뒤에는 아래로 설치합니다.
npm install -g soft-puzzle또는 설치 없이 그때그때 실행만 하려면:
npx soft-puzzle아직 게시 전이라 저장소에서 직접 써야 한다면, 이 저장소를 clone한 뒤:
npm install
npm run build
npm install -g ./packages/client실행
soft-puzzle닉네임을 한 번 입력하면 ~/.soft-puzzle.json에 저장되어 다음부터는 바로 메인
메뉴로 들어갑니다. (저장 위치를 바꾸고 싶다면 SOFT_PUZZLE_CONFIG 환경변수로
다른 경로를 지정할 수 있습니다.)
--ascii 옵션
soft-puzzle --ascii카드·주사위를 그리는 데 쓰는 박스 문자(┌─┐ 등)나 무늬 기호(♠♥♦♣)가 깨지는
구형 터미널(오래된 Windows PowerShell/cmd.exe의 conhost 등)에서는 이 옵션으로
순수 ASCII 아트로 강제 전환할 수 있습니다. Windows Terminal이나 ConEmu가 아닌
win32에서는 이 옵션 없이도 자동으로 ASCII로 그려집니다. 화면이 깨져 보이면
가장 먼저 이 옵션을 시도해 보세요.
방화벽 안내
방을 만들거나(호스트) 방을 찾을 때(참가자) 모두 로컬 네트워크 통신이 필요합니다.
macOS와 Windows 모두 soft-puzzle를 처음 실행할 때 "네트워크의 다른 기기가
이 앱을 찾을 수 있게 허용하시겠습니까?" 같은 방화벽 허용 팝업을 띄웁니다 — 반드시
허용을 눌러야 방 만들기/방 찾기가 정상 동작합니다. 회사·공용 네트워크처럼
브로드캐스트가 막혀 있는 환경에서는 허용해도 방 목록에 아무것도 안 뜰 수 있는데,
이때는 아래 "수동으로 접속하기"를 쓰세요.
방 만들기 (호스트)
- 메인 메뉴에서 방 만들기를 고르고 게임을 선택합니다.
- 로비 화면 위쪽에
내 접속 주소: 192.168.x.x:7420처럼 자신의 접속 주소가 나타납니다 — 방화벽 때문에 참가자가 방 목록에서 방을 못 찾을 때 이 주소를 불러주세요. - 참가자가 모이면 호스트만 **[Enter]**로 게임을 시작할 수 있습니다.
- 호스트가 나가면(종료/연결 끊김) 방 전체가 함께 종료됩니다. 방은 호스트의 프로세스 안에서만 돌아가기 때문에, 참가자들은 "방장의 연결이 끊겼습니다" 화면을 보고 메인 메뉴로 돌아갑니다 — 다시 하려면 누군가 새로 방을 만들어야 합니다.
방 참가하기
- 메인 메뉴에서 방 참가를 고르면 몇 초간 같은 네트워크의 방을 자동으로 찾습니다. 방향키로 고르고 **[Enter]**로 입장, **[r]**로 다시 찾기.
- 수동으로 접속하기: 방이 안 보이면(방화벽·다른 서브넷 등) **[i]**를 눌러
호스트가 불러준 주소를
192.168.0.5:7420형식으로 직접 입력합니다. - 닉네임이 이미 방 안의 누군가와 같으면(대소문자·자모 조합 차이 무시) 참가가 거절되고 닉네임을 새로 입력하라는 화면으로 돌아갑니다.
게임 중 끊김
누구든 게임 중 나가면(창을 닫거나 Ctrl+C) 서버가 즉시 감지합니다:
- 참가자가 나가면: 남은 사람들끼리 게임이 계속됩니다. 그 사람 턴이 오면 자동으로 넘어갑니다.
- 호스트가 나가면: 방 전체가 끝나고 전원이 "방장의 연결이 끊겼습니다" 화면을 봅니다.
- 누군가 제한 시간(90초) 안에 아무 행동도 하지 않으면: 화면의 남은 시간 표시가 0이 된 뒤 서버가 대신 기본 행동(패스에 가까운 동작)을 자동으로 골라 진행합니다.
공통 조작
| 키 | 동작 | | --- | --- | | 방향키 | 메뉴/목록 이동, 베팅액·카드 커서 이동 | | Enter | 선택/확인 | | Esc | 하위 화면·입력 취소 | | Tab | 방 안(로비·게임·결과)에서 채팅 입력 열기 | | Ctrl+C | 언제든 즉시 종료 (터미널은 정상 상태로 복원됩니다) |
채팅
방에 들어가면 로비·게임·결과 화면 어디서든 Tab으로 채팅 입력줄을 열 수 있습니다. Enter로 보내면 입력줄은 열린 채로 남고, Esc로 닫습니다. 입력줄이 열려 있는 동안은 게임 키가 동작하지 않으므로 채팅 중에 실수로 행동이 나가지 않습니다. 최근 8줄이 화면 아래에 표시되며, 한 번에 200자까지 보낼 수 있습니다. 터미널 폭이 140칸 이상이면 채팅은 게임 화면 오른쪽의 패널로 옮겨 가고, 창 크기를 바꾸면 배치도 바로 따라 바뀝니다.
게임별 조작
블랙잭
| 키 | 동작 | | --- | --- | | ↑ / ↓ | 베팅액 ±10 | | ← / → | 베팅액 ±100 (빠른 조절) | | Enter | 베팅 확정 / (베팅 후) 준비 | | h | 히트 | | s | 스탠드 | | d | 더블다운 | | e | 게임 종료(호스트) |
원카드
| 키 | 동작 | | --- | --- | | ← / → | 낼 카드 선택 | | Enter | 선택한 카드 내기 (7 낸 뒤에는 좌우로 무늬를 골라 Enter) | | Esc | 무늬 선택 취소 | | d | 카드 뽑기 |
야추 (Yacht)
| 키 | 동작 | | --- | --- | | 1~5 | 그 번째 주사위 홀드/해제 | | r | 리롤(다시 굴리기) | | c | 점수 기록할 칸 선택 모드 진입 → ↑/↓로 고르고 Enter로 확정 | | Esc | 점수 칸 선택 취소 |
마피아
4명 이상이 필요합니다. 밤에는 마피아가 처치할 대상을, 낮에는 생존자 모두가 탈락시킬 대상을 고릅니다. ↑ / ↓로 대상을 선택하고 Enter로 투표합니다. 모든 마피아를 찾으면 시민 팀이, 마피아 수가 시민 수와 같아지면 마피아 팀이 승리합니다.
채팅은 정석 규칙을 따릅니다. 낮에는 생존자 모두가 대화하고, 밤에는 마피아끼리만 [마피아] 채널로 비밀 대화를 나눕니다(다른 생존자는 밤에 채팅할 수 없습니다). 탈락한 사람은 낮·밤 모두 [탈락자] 채널로 탈락자끼리만 대화하며, 그 내용은 생존자에게 보이지 않습니다.
방장은 마피아 방을 만들 때 마피아 수(1~2명)와 특수직업을 설정할 수 있습니다. 마피아 수는 게임을 시작할 때의 참가자 수 절반보다 반드시 적어야 합니다. 의사는 밤 공격을 한 번 막고, 경찰은 대상의 마피아 여부를, 탐정은 대상의 정확한 직업을 확인합니다. 선택한 특수직업 수가 남는 참가자 자리보다 많으면 그중 일부만 무작위로 배정됩니다. 시민은 인원 제한 없이 배정되며, 특수직업을 모두 선택해도 최소 한 명의 시민이 항상 남습니다.
다빈치 코드
2명 이상이 필요합니다. 내 숫자 타일은 보이고 상대 타일은 숨겨집니다. 내 차례에 ↑ / ↓로 상대의 숨은 타일을 고르고, ← / →로 0~11 사이의 숫자를 선택한 뒤 Enter로 추리합니다. 정답이면 계속 추리하고, 오답이면 내 타일 하나가 공개되며 다음 차례로 넘어갑니다. 모든 타일이 공개된 참가자는 탈락하고, 마지막 한 명이 남을 때까지 진행합니다.
라이어 게임
3명 이상이 필요합니다. 시민은 같은 제시어를 받고 라이어만 제시어를 모릅니다. 대화한 뒤 ↑ / ↓와 Enter로 라이어라고 생각하는 참가자에게 투표합니다. 단독 최다 득표자가 라이어면 시민 팀, 아니면 라이어 팀이 승리합니다.
인디언 포커
2명 이상이 필요합니다. 내 카드는 보이지 않고 상대 카드만 보입니다. 차례가 오면 Enter로 콜하거나 f로 폴드합니다. 매 라운드 참가비 1칩을 내고, 콜하면 1칩을 더 겁니다. 승자는 팟을 가져가며 같은 숫자는 공동 승리로 나눕니다. 한 덱(52장)을 모두 소진할 때까지 라운드를 반복합니다.
윷놀이
2명 이상이 필요한 개인전입니다. 각자 말 4개를 참먹이에서 출발시켜 먼저 모두 나면 이깁니다.
Space로 윷을 던지면 도·개·걸·윷·모가 나오고, 표시된 가락 하나만 배가 나오면 빽도(한 칸 뒤로)입니다.
윷·모가 나오거나 상대 말을 잡으면 한 번 더 던지고, 쌓인 결과는 ← / →로 고르고 ↑ / ↓로 말을
골라 Enter로 원하는 순서대로 씁니다(판에 도착 칸이 *로 표시됩니다). 내 말 위에 도착하면 업어서
함께 움직이고, 상대 말 위에 도착하면 잡아서 집으로 돌려보냅니다. 모서리(모·뒷모)나 방(가운데)에
멈춘 말은 대각선 지름길로 갑니다. 쓸 수 있는 말이 없는 결과는 자동으로 버려집니다.
라스베가스
2명 이상이 필요합니다. 4라운드 동안 매 라운드 카지노 6곳(1~6번)에 $50,000 이상의 지폐가 깔리고, 각자 주사위 8개를 받습니다. 내 차례가 되면 남은 주사위가 자동으로 굴려지고, ← / → 또는 1~6으로 나온 눈 하나를 골라 Enter로 그 눈의 주사위를 전부 같은 번호 카지노에 겁니다. 모두 주사위를 다 쓰면 카지노마다 주사위를 많이 건 사람부터 높은 지폐를 가져가며, 같은 개수를 건 사람들은 모두 무효가 됩니다. 4라운드 뒤 돈이 가장 많은 사람이 이깁니다(동률이면 지폐가 많은 쪽).
결과 화면
한 판이 끝나면 결과가 뜹니다. 호스트는 [r] 다시하기, [l] 로비로, [q] 나가기를 선택할 수 있고, 참가자도 **[q]**로 먼저 나갈 수 있습니다.
문제가 있다면
- 방이 하나도 안 보인다 → 방화벽 허용을 눌렀는지 확인하고, 안 되면 호스트 주소로 수동 접속([i])하세요.
- 글자가 깨져 보인다(□□□, 물음표 등) →
--ascii로 다시 실행해 보세요. - 종료했는데 터미널이 이상해 보인다 → 새 터미널 탭을 열거나
reset명령을 입력하세요 (정상 종료 시에는 원래 발생하지 않아야 합니다 — 재현되면 이슈로 남겨주세요).
