fp-space
v0.0.6
Published
library for fp-space-game
Downloads
31
Readme
fp-space
A functional space shooter game library

Just run
npx fp-spaceUse --full to fill the entire terminal window:
npx fp-space --fullRun with source
git clone https://github.com/afrontend/fp-space.git
cd fp-space
npm install
npm startCLI options
| Option | Description |
|--------|-------------|
| -f, --full | Use full terminal size for the board |
Controls
| Key | Action |
|-----|--------|
| ← → | Move left / right |
| ↑ | Fire missile |
| Space | Pause / resume |
| h | Toggle help |
| s | Save state |
| l | Load saved state |
| q / Ctrl+C | Quit |
| Ctrl+D | Dump state (JSON) and quit |
Library API
Install as a dependency:
npm install fp-spaceconst game = require('fp-space');game.init(rows?, columns?)
Creates the initial game state. Defaults to a 15×15 grid.
let state = game.init(15, 15);game.tick(state)
Advances the game by one frame. Moves missiles up every tick; moves the meteorite down every 3rd tick. Detects collisions. Returns updated state.
state = game.tick(state);game.key(keyName, state)
Applies a key input. Valid key names: 'left', 'right', 'up', 'space'.
Returns updated state.
state = game.key('left', state);game.join(state)
Merges all panels into a single 2D array for rendering.
const grid = game.join(state);
grid.forEach(row => {
console.log(row.map(item => game.isBlank(item) ? '.' : '■').join(' '));
});game.isBlank(item)
Returns true if a cell is empty.
Minimal example
const game = require('fp-space');
let state = game.init(15, 15);
setInterval(() => {
state = game.tick(state);
const grid = game.join(state);
console.clear();
console.log(grid.map(row =>
row.map(item => game.isBlank(item) ? '.' : '■').join(' ')
).join('\n'));
}, 200);Demo GIF 업데이트
터미널 동작 미리보기를 자동으로 재생성합니다.
# 의존 도구 설치 (최초 1회)
brew install asciinema
brew install agg
brew install gh && gh auth login
# 데모 생성 및 GitHub Releases 업로드
npm run demo-gifnpm run demo-gif 실행 순서:
scripts/autoplay.js— AI가 게임을 자동 플레이하고 자동 종료asciinema rec— 터미널 출력을demo.cast로 녹화agg—demo.cast→demo.gif변환gh release upload— GitHub Releasesdemo-assets태그에 업로드README.md— GIF URL을 GitHub Releases 경로로 교체
master 브랜치에 푸시하면 .github/workflows/demo.yml이 위 과정을 자동으로 실행합니다.
License
MIT © Bob Hwang
