OhMyGame
OhMyGame은 AI로 게임을 만들 수 있는 오픈소스 스튜디오로, 디자인·구축·플레이테스트·출판을 하나의 앱에서 모델 키와 함께 수행합니다
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기AI가 내 선택을 예측하는 한국어 웹게임 · 무작위 질문과 익명 선택 통계
저장소 README에서 가져옴
README 전체를 불러오는 중입니다.
README 전문 보기 ↗AI가 내 선택을 미리 예측하는 한국어 웹게임. 약 1분 30초 동안 16개의 선택을 하고, 마지막에 예측을 펼쳐 봅니다.
Node.js 22.14 이상이 필요합니다. 외부 패키지 설치나 빌드 없이 실행합니다.
git clone https://github.com/hb188641/deulkyeotda.git
cd deulkyeotda
npm start
브라우저에서 http://127.0.0.1:5087을 엽니다. 키가 없으면 규칙 기반 데모로 동작합니다.
실제 AI를 사용하려면 .env.example을 .env로 복사하고, 본인의 OPENAI_API_KEY를 직접 입력합니다. 키는 서버에서만 사용하며 브라우저에 전달하지 않습니다. GAME_SESSION_SECRET에는 별도의 임의 비밀값을 넣을 수 있습니다. 기본 모델은 gpt-6-luna(추론 강도 low)이며 OPENAI_MODEL과 OPENAI_REASONING_EFFORT로 변경합니다. 추론을 지원하지 않는 모델은 OPENAI_REASONING_EFFORT=off로 설정합니다. 실제 AI 플레이는 본인 API 사용량에 청구됩니다.
cp .env.example .env
# .env를 편집한 뒤
npm start
PORT와 HOST로 실행 주소를 지정합니다. 저장소는 기본 data/game.sqlite이며 DATABASE_PATH로 변경할 수 있습니다. 서버 재시작 후에도 유지되므로 운영 시 이 파일을 백업하세요. 외부 공개 운영에는 HTTPS 프록시와 API 요청 제한을 별도로 구성하세요.
worker/index.mjs가 같은 API를 Cloudflare Workers에서 제공하고, 화면 파일은 정적 자산으로, 익명 기록은 D1에 저장합니다. 설정은 wrangler.jsonc에 있습니다.
wrangler d1 create deulkyeotda # 최초 1회, 출력된 database_id를 wrangler.jsonc에 반영
wrangler d1 migrations apply deulkyeotda --remote
wrangler secret put GAME_SESSION_SECRET # 임의 비밀값
wrangler secret put OPENAI_API_KEY # 선택, 없으면 규칙 기반 데모
wrangler deploy
남용 방지를 위해 Worker는 IP별로 /api/predict를 분당 10회, 나머지 API를 분당 60회로 제한합니다. 이 제한은 Cloudflare 위치별 근사치이며, IP는 카운터 키로만 쓰고 저장하지 않습니다. 모든 플레이어를 합친 하루(UTC) OpenAI 호출 수는 AI_DAILY_LIMIT(기본 1000)으로 제한하고 D1의 ai_usage 테이블에 날짜별 횟수만 기록합니다. 한도에 닿으면 AI 요청은 429로 거절되고 데모로 플레이할 수 있습니다. npm start로 실행하는 Node.js 서버에는 이 제한이 없습니다.
확신도는 모델의 자기 평가이며, 충분한 기록이 있으면 과거 적중률을 참고해 보정합니다. 검증된 개인 예측 확률이 아니며 성격·지능을 판단하지 않습니다.
홈에서 익명 답변으로 예측 개선에 참여를 선택한 AI 판만 저장합니다. 처음 방문 시 기본 체크되며, 직접 해제한 선택은 유지합니다., 데모·미완료·미참여 판은 저장하지 않습니다. 참여하지 않은 판에서는 누적 통계도 사용하지 않습니다. 선택 여부만 브라우저에 보관합니다.
게임 기록에는 판마다 새 식별자, 질문 버전, 완료 시각, 준비 답변, 사전 예측·확신도·실제 답변, 비교군을 저장합니다. 이름·계정·IP·기기 식별자는 저장하지 않습니다. 같은 봉인 토큰의 재제출은 중복 집계하거나 최초 기록을 덮어쓰지 않습니다. 운영 환경 자체의 로그 정책과는 별개입니다.
예측은 최근 90일의 최신 1,000판을 참고합니다. 같은 준비 질문에서 같은 답을 2개 이상 골랐고 일치가 불일치보다 많은 기록을 우선합니다. 질문별 유사 기록 20개부터 참고하고, 부족하면 전체 기록 50개부터 참고합니다. 모델에는 집계된 선택 비율과 표본 수만 추가 전달합니다. 다른 플레이어의 개별 답변은 보내지 않습니다.
통계를 참고할 수 있는 참여 판 중 약 80%는 통계를 사용하고 20%는 기존 방식으로 예측합니다. 두 그룹의 사전 예측과 실제 적중을 비교하며, 각 그룹 20판·100예측 이상일 때 게임 안내에 관측 적중률을 표시합니다. 데이터 누적만으로 정확도 향상을 보장하거나 주장하지 않습니다. AI 모델 가중치를 재학습하는 방식이 아닙니다.
동일한 원래 확신도 구간에 과거 통계 참고 판의 기록이 30예측 이상이면 표시 확신도를 보정합니다. 데이터 조회 실패 시 기존 AI 예측을 사용하고, 저장 실패 시 게임 결과와 함께 저장 실패를 알립니다. /api/learning은 집계만 반환하며 원본 답변 조회 API는 제공하지 않습니다.
| 경로 | 역할 |
|---|---|
index.html, public/ | 화면, 질문 목록, 선택·공유 흐름 |
lib/game/server.mjs | API 요청 검증, AI 호출, 예측 봉인·결과 계산 |
lib/game/learning.mjs | 유사 선택 통계, 확신도 보정, 익명 기록 |
scripts/server.mjs | Node.js HTTP 서버와 SQLite 연결 |
db/, drizzle/ | 저장 스키마와 SQL 마이그레이션 |
tests/ | 봉인·무작위 선정·저장·참여 해제·서버 검사 |
질문 내용이나 선택지 의미를 변경하면 lib/game/learning.mjs의 QUESTION_VERSION도 올려 이전 기록과 섞이지 않도록 합니다. 현재 서버는 최초 실행 시 스키마 v1을 자동 생성합니다. 후속 스키마 변경에는 추가 마이그레이션 구현이 필요합니다.
npm test
자동 검사는 가짜 모델 응답과 메모리 SQLite를 사용합니다. OpenAI를 호출하거나 API 비용을 발생시키지 않습니다.
배포된 Sites 게임의 프론트엔드와 예측·집계 로직을 가져오고, 공개 저장소에서는 Node.js/SQLite로 독립 실행하도록 구성했습니다. Sites 내부 배포 설정·인증 정보·운영 데이터는 포함하지 않습니다.
MIT. 수정·재배포·상업적 이용이 가능하며 저작권 및 라이선스 고지를 유지해야 합니다.