Skip to content

zhongWJCH/math-game

Repository files navigation

数学打地鼠多人 PK

English

一个面向课堂互动的“数学打地鼠”多人 PK 网页游戏。教师可以投屏创建房间,学生通过固定入口加入课堂,在手机、平板或电脑上抢答或轮流作答。项目使用 React + Vite + TypeScript 构建,并提供 Docker + Nginx 部署配置。

功能特性

  • 中文课堂界面,适合投屏、大屏和触摸设备
  • 教师端密码保护,默认密码:tech
  • 固定学生入口:/student
  • 学生自填姓名加入,教师端实时展示学生名单
  • 支持同屏抢答和轮流答题
  • 教师端开始后锁定关键设置,避免课堂中误操作
  • 教师端只负责展示和控制,联机模式下不能直接点击答案
  • 支持暂停、停止、重开、全屏、音效开关、解析显示开关
  • 支持一年级到六年级不同题型
  • 本地算法自动出题,预留 AI 出题接口
  • 支持 Docker Compose 部署,对外暴露 12400 端口

技术栈

  • React
  • Vite
  • TypeScript
  • WebSocket
  • Node.js
  • Nginx
  • Docker Compose

本地开发

npm install
npm run dev

默认开发地址:

http://localhost:5173

构建

npm run build

本地局域网联机

npm install
npm run build
npm run lan

启动后访问:

教师端:http://教师电脑IP:4174/
学生端:http://教师电脑IP:4174/student

教师端输入密码 tech 后创建房间。学生打开 /student,输入房间码和姓名即可加入。

Docker 部署

服务器上把整个项目复制过去,然后执行:

docker compose up -d --build

访问地址:

教师端:http://服务器IP:12400/
学生端:http://服务器IP:12400/student

如果服务器拉取 Docker Hub 镜像较慢,可以新建 .env

NODE_IMAGE=docker.m.daocloud.io/library/node:20-alpine
NGINX_IMAGE=docker.m.daocloud.io/library/nginx:1.27-alpine

然后重新构建:

docker compose build --no-cache
docker compose up -d

AI 出题接口

项目默认使用本地算法出题。AI 出题模式已经预留在 src/game/questionGenerator.ts,前端会请求 VITE_AI_QUESTION_ENDPOINT 指向的后端代理接口。

不要把 OpenAI 或其他大模型 API Key 写入前端代码。推荐做法:

  1. 在 Vercel Functions、Netlify Functions 或自己的 Node 服务中创建代理接口。
  2. API Key 只保存在服务端环境变量中。
  3. 前端 .env 只配置代理地址。

示例:

VITE_AI_QUESTION_ENDPOINT=/api/generate-question

AI 接口需要返回 JSON:

{
  "question": "35% 的 200 是多少?",
  "correctAnswer": "70",
  "options": ["70", "60", "80", "75"],
  "explanation": "200 × 35% = 70",
  "grade": 6,
  "difficulty": "normal"
}

About

Classroom multiplayer math whack-a-mole game built with React, TypeScript, WebSocket, Docker and Nginx.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors