npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

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를 처음 실행할 때 "네트워크의 다른 기기가 이 앱을 찾을 수 있게 허용하시겠습니까?" 같은 방화벽 허용 팝업을 띄웁니다 — 반드시 허용을 눌러야 방 만들기/방 찾기가 정상 동작합니다. 회사·공용 네트워크처럼 브로드캐스트가 막혀 있는 환경에서는 허용해도 방 목록에 아무것도 안 뜰 수 있는데, 이때는 아래 "수동으로 접속하기"를 쓰세요.

방 만들기 (호스트)

  1. 메인 메뉴에서 방 만들기를 고르고 게임을 선택합니다.
  2. 로비 화면 위쪽에 내 접속 주소: 192.168.x.x:7420처럼 자신의 접속 주소가 나타납니다 — 방화벽 때문에 참가자가 방 목록에서 방을 못 찾을 때 이 주소를 불러주세요.
  3. 참가자가 모이면 호스트만 **[Enter]**로 게임을 시작할 수 있습니다.
  4. 호스트가 나가면(종료/연결 끊김) 방 전체가 함께 종료됩니다. 방은 호스트의 프로세스 안에서만 돌아가기 때문에, 참가자들은 "방장의 연결이 끊겼습니다" 화면을 보고 메인 메뉴로 돌아갑니다 — 다시 하려면 누군가 새로 방을 만들어야 합니다.

방 참가하기

  1. 메인 메뉴에서 방 참가를 고르면 몇 초간 같은 네트워크의 방을 자동으로 찾습니다. 방향키로 고르고 **[Enter]**로 입장, **[r]**로 다시 찾기.
  2. 수동으로 접속하기: 방이 안 보이면(방화벽·다른 서브넷 등) **[i]**를 눌러 호스트가 불러준 주소를 192.168.0.5:7420 형식으로 직접 입력합니다.
  3. 닉네임이 이미 방 안의 누군가와 같으면(대소문자·자모 조합 차이 무시) 참가가 거절되고 닉네임을 새로 입력하라는 화면으로 돌아갑니다.

게임 중 끊김

누구든 게임 중 나가면(창을 닫거나 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 명령을 입력하세요 (정상 종료 시에는 원래 발생하지 않아야 합니다 — 재현되면 이슈로 남겨주세요).