07

놀이 · 여가·게임

기능설계 ⑦ — 즐거움이 곧 건강이다

항목내용
기능 IDFEAT-PLAY
연결 시스템마스터 시스템④ 놀이(여가·인지) · ⑥ 정서존엄
한 줄 정의두뇌 게임·콘텐츠·모임으로 인지건강과 사회관계를 유지하고 일상에 재미를 더한다
관련 액터PWA실벗서버
설계 철학 — 게임은 "점수 경쟁"이 아니라 "오늘도 머리를 썼다"는 성취감과 "누구와 함께했다"는 관계를 줍니다. 난이도는 자동 적응.

설계 7계층 체크리스트

계층이 문서의 섹션
① UI놀이 홈 / 게임 플레이 SCR-PLAY-01·02
② Flow게임 선택 → 플레이 → 점수·적응 난이도
③ Datagames / play_sessions / course_progress
④ API게임 목록·세션 시작·결과 제출
⑤ Seq플레이 결과 → 인지점수 추이 시퀀스
⑥ Comp게임 엔진·진척 서비스 구조
⑦ Test검수 체크리스트

① UI · 화면 명세

놀이 홈 SCR-PLAY-01

영역요소 / 동작
오늘의 추천"오늘의 두뇌 운동 🧠" 큰 카드(어제와 다른 게임 추천)
게임 그리드숫자게임·기억력·낱말·화투 등 큰 아이콘
함께하기가족·친구와 함께하는 모임/대결 (선택)

게임 플레이 SCR-PLAY-02

영역요소 / 동작
큰 게임판큰 버튼·큰 글씨, 타이머는 부드럽게(압박 최소)
격려 피드백"잘하셨어요!" 즉시 칭찬, 틀려도 긍정적
결과오늘 점수 + "어제보다 ↑" 추이, 그만두기 자유

② Flow · 게임 플레이 흐름

게임 선택 세션 시작 플레이 결과 제출 난이도 적응·점수 기록

적응 난이도(Adaptive)

최근 성적다음 난이도
연속 고득점한 단계 ↑ (지루함 방지)
연속 저득점·중도포기한 단계 ↓ (좌절 방지)
안정적유지

③ Data · DB 스키마

MariaDB · UTF8MB4 · InnoDB
CREATE TABLE games ( id INT PRIMARY KEY AUTO_INCREMENT, game_key VARCHAR(40) UNIQUE, -- 'number','memory','word' title VARCHAR(60), category ENUM('brain','arcade','board','content'), is_active TINYINT DEFAULT 1 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE play_sessions ( id BIGINT PRIMARY KEY AUTO_INCREMENT, user_id BIGINT NOT NULL, game_id INT NOT NULL, level TINYINT, score INT, completed TINYINT DEFAULT 0, played_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE, FOREIGN KEY (game_id) REFERENCES games(id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
설계 포인트 — 인지건강 추이는 play_sessions 집계로 산출. 별도 점수 테이블 없이 세션 로그 하나로 충분.

④ API · 엔드포인트 명세

M경로설명
GET/play/games게임 목록 + 오늘의 추천
POST/play/sessions세션 시작(적응 난이도 산정)
POST/play/sessions/{id}/result결과 제출(점수·완료)
GET/play/trend인지건강 추이
POST /api/v1/play/sessions · 200
{ "success":true, "data":{ "session_id":9001, "level":2, "message":"오늘도 머리 운동 시작해요! 🧠" } }

⑤ Seq · 플레이 → 추이

PWA
게임 선택 → POST sessions → 적응 난이도 받음
PWA
로컬에서 게임 플레이(오프라인 가능) → 결과 제출
실벗
play_sessions 기록 → 다음 난이도 계산 → 격려 메시지
실벗
주간 추이 집계 → (정서존엄 d06) 기분과 연계 가능

⑥ Comp · 컴포넌트 / 모듈 구조

프론트엔드 (PWA)

features/play/ ├─ PlayHome.js ├─ GameRunner.js # 게임 공통 런너(오프라인) ├─ games/ # 게임별 플레이 모듈 └─ TrendView.js

백엔드 (PHP)

app/ ├─ Controllers/PlayController.php └─ Services/ ├─ PlayService.php # 세션·결과 └─ AdaptiveLevel.php # 적응 난이도 산정
모듈책임
AdaptiveLevel최근 성적으로 난이도 자동 조절. 좌절·지루함 방지가 목표(점수 극대화 아님).
GameRunner오프라인 플레이 지원. 결과는 온라인 복귀 시 동기화.

⑦ Test · 검수 체크리스트

ID시나리오기대 결과
T-01게임 선택 후 플레이세션 시작·결과 기록, 격려 피드백
T-02연속 고득점다음 난이도 한 단계 상승
T-03중도 포기좌절 방지 — 난이도 하향, 부정 피드백 없음
T-04오프라인 플레이로컬 진행, 복귀 시 결과 동기화
T-05주간 추이 조회play_sessions 집계로 추이 표시
완료 판정 — T-01~T-05 통과 시 FEAT-PLAY 완료. T-03(좌절 방지)·T-04(오프라인)가 어르신 경험의 핵심.
기능설계 ⑦ 완성 — 놀이를 7계층으로 설계했습니다. 즐거움과 인지건강을 함께 챙깁니다.