Skip to content
This repository was archived by the owner on Aug 15, 2025. It is now read-only.

KEDIT2007/PoetryGame

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

25 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

古诗词接龙联机版

这是一个基于 Node.js 和 Socket.IO 构建的网页版多人实时联机古诗词接龙游戏。

游戏特色

  • 实时联机: 与朋友们在同一个房间里实时对战。
  • 房间系统: 创建或加入游戏房间,每个房间的游戏进程完全独立。
  • URL路由: 每个房间都有专属链接 (e.g., /room/ABCD),方便分享和重连。
  • 断线重连: 刷新页面或短暂断开网络后,可以自动返回之前的游戏。
  • 民主投票: 诗句的有效性由房间内除提交者外的所有玩家共同投票决定,超时或掉线默认计为赞同。
  • 非阻塞验证队列: 玩家可以随时提交答案进入等待队列,系统会自动、依次处理,不会因为一次投票而阻塞所有人的输入。
  • 灵活撤回: 玩家可以随时撤回自己提交的、尚未被确认的答案,即使该答案正在被投票。
  • 数据持久化: 房间状态和已验证的诗句会被保存在服务器本地,重启服务器后游戏可以继续。
  • 后台管理: 提供一个密码保护的后台页面,用于管理房间、玩家和诗句缓存。
  • 永久房间: 管理员可以将特定房间设置为“永久”,即使房间内没有玩家也不会被销毁。

技术栈

  • 前端:
    • HTML5
    • CSS3
    • JavaScript (ES6+)
  • 后端:
    • Node.js
    • Express.js (用于提供静态文件和路由)
    • Socket.IO (用于实现实时双向通信)
    • Express Session, Cookie Parser, Body Parser (用于后台管理身份验证)
  • 数据存储:
    • 本地 JSON 文件 (用于持久化房间、诗句缓存和管理员配置)

项目结构

.
├── data/                     # 存储持久化数据
│   ├── admin.json            # 存储管理员密码的盐和哈希值
│   ├── rooms.json            # 存储所有房间的状态
│   └── valid_sentences.json  # 存储所有已被确认为有效的诗句
├── public/                   # 存放所有客户端静态文件
│   ├── index.html            # 游戏主页面HTML
│   ├── style.css             # 游戏页面样式
│   ├── client.js             # 游戏客户端逻辑
│   ├── admin.html            # 后台管理页面HTML
│   ├── admin.css             # 后台管理页面样式
│   └── admin.js              # 后台管理客户端逻辑
├── server.js                 # 后端主程序
├── package.json
└── README.md

安装与运行

1. 环境准备

确保你的电脑上已经安装了 Node.js (推荐 LTS 版本)。

2. 安装依赖

在项目根目录下,打开终端并运行以下命令来安装项目所需的所有依赖库:

npm install

这将会安装 express, socket.io, body-parser, cookie-parser, 和 express-session

3. 首次运行与管理员设置

第一次运行服务器前,需要设置管理员密码。运行以下命令启动服务器:

node setup.js

此时,请查看你的终端,会看到类似 请设置管理员密码: 的提示。在终端中输入你的密码并按回车。密码将被加盐哈希后保存在 data/admin.json 文件中,之后启动将不再需要此步骤。

4. 启动服务器

设置完密码或之后再启动服务器,只需运行:

node server.js

当你在终端看到 服务器正在端口 3000 上运行 的提示时,说明服务器已成功启动。

5. 开始游戏

打开你的网络浏览器 (推荐 Chrome 或 Firefox),访问以下地址:

http://localhost:3000

你将看到游戏大厅。你可以:

  • 创建新房间: 点击按钮,输入你的昵称,即可创建一个拥有随机ID的新房间。
  • 加入房间: 点击房间列表中的“加入”按钮,输入你的昵称,即可加入一个已存在的房间。
  • 通过URL加入: 将一个房间的链接 (例如 http://localhost:3000/room/ABCD) 分享给朋友,他们可以通过该链接直接尝试加入你的房间。

部署

推荐使用云服务器 (VPS) 进行公网部署,配合 PM2 和 Nginx 以获得最佳效果。

  1. 服务器: 购买一台云服务器(如阿里云/腾讯云),选择 Ubuntu 等主流 Linux 发行版。
  2. 环境: 在服务器上安装 Node.js, npm, 和 Git。
  3. 代码: 将项目代码上传到服务器。
  4. 进程守护: 使用 pm2 来启动并守护 server.js 进程,确保服务在后台持续运行并在崩溃后自动重启。
    npm install pm2 -g
    pm2 start server.js --name poetry-game
  5. 反向代理 (推荐): 使用 Nginx 作为反向代理,将来自 80 端口 (HTTP) 的请求转发到 Node.js 应用的 3000 端口。这对于配置域名和未来的 HTTPS 至关重要。注意:配置 Nginx 时,必须正确设置 UpgradeConnection 头,以确保 WebSocket (Socket.IO) 能够正常工作。

后台管理功能

访问 http://localhost:3000/admin 进入后台管理页面。

  1. 登录: 输入您在首次运行时设置的管理员密码。
  2. 房间管理:
    • 查看所有当前存在的房间及其在线人数。
    • 永久存在: 勾选此项,可使房间在无人时也不会被服务器自动销毁。永久房间内的玩家也不会因长时间离线而被踢出。
    • 管理玩家: 查看房间内的所有玩家(包括离线玩家),并可以强制将某个玩家从房间中移除。
    • 删除: 强制删除一个房间,房间内的所有玩家将被断开连接。
  3. 诗句缓存管理:
    • 搜索: 实时搜索已缓存的正确诗句。
    • 添加: 添加新的正确诗句到缓存中。
    • 删除: 从缓存中移除某个诗句。

游戏规则概览

  1. 进入大厅: 玩家首先进入游戏大厅,可以查看、创建或加入房间。
  2. 开始游戏: 房间内至少需要2名玩家才能开始游戏。游戏开始后,系统会给出一个起始字。
  3. 回答: 玩家需要根据当前的起始字,在输入框中输入一句不含标点符号的古诗词。
  4. 提交与排队:
    • 每个玩家在队列中最多只能有一个待验证的答案。
    • 所有提交的答案会进入一个验证队列,系统会按顺序处理。一旦队列中有一个答案被确认为正确,该轮抢答结束,队列将被清空。
  5. 验证与投票:
    • 系统会先检查答案是否在“已验证诗句”的缓存中。
    • 如果不在,该诗句将交由房间内除提交者外的所有其他玩家进行投票。
    • 投票限时15秒,超时或掉线默认计为赞同
    • 当赞同票数严格多于反对票数时,诗句被确认为有效。
  6. 得分与新回合:
    • 回答正确的玩家获得一分。
    • 该玩家将获得从他回答的诗句中选择一个新的起始字的权利。
    • 选定新字后,新一轮开始。
  7. 撤回: 玩家可以随时撤回自己提交的答案,即使它正在被投票。如果撤回的是正在投票的答案,该次投票将立即中断。

About

A simple poetry game that is completely AI-generated

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages