# go **Repository Path**: ys_games/go ## Basic Information - **Project Name**: go - **Description**: 围棋游戏系统 - JSP实现 前端:JSP + HTML + CSS + JavaScript 后端:Java Servlet 数据库:MySQL - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-03-27 - **Last Updated**: 2026-02-09 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 围棋在线对战平台 一个基于Java Web的在线围棋游戏平台,支持用户注册登录、创建房间、实时对弈、游戏记录等功能。 ## 项目概述 本项目是一个完整的在线围棋游戏系统,采用传统的Servlet/JSP架构实现,包含完整的用户系统、游戏房间管理、实时对弈功能以及游戏记录回放功能。 ## 技术栈 - **后端框架**: Java Servlet + JSP - **数据库**: MySQL - **实时通信**: WebSocket - **构建工具**: Maven - **Web服务器**: Tomcat ## 主要功能模块 ### 用户系统 - 用户注册与登录 - 密码加密存储(使用盐值加密) - Session管理 - 权限验证 ### 游戏功能 - 创建游戏房间 - 加入游戏房间 - 实时落子对弈 - 自动提子判定 - 气数计算 - 打劫检测 - 胜负判定 - 悔棋功能(基于历史记录) ### 房间管理 - 创建/加入/离开房间 - 房间状态管理 - 玩家配对 - 房间列表查看 ### 游戏记录 - 完整棋谱记录 - 对局历史查询 - 胜负统计 - 详细对局信息查看 ## 系统架构 ``` ├── 数据库层 │ ├── 用户表 (users) │ ├── 房间表 (rooms) │ └── 棋谱表 (game_records) │ ├── 数据访问层 (DAO) │ ├── UserDAO - 用户数据访问 │ ├── GameRoomDAO - 房间数据访问 │ └── GameRecordDAO - 棋谱数据访问 │ ├── 业务逻辑层 │ ├── GoGame - 围棋核心逻辑 │ │ ├── 落子验证 │ │ ├── 气数计算 │ │ ├── 提子处理 │ │ └── 打劫检测 │ └── 工具类 │ ├── DBUtil - 数据库连接 │ └── PasswordUtil - 密码加密 │ ├── Web层 │ ├── Servlet控制器 │ │ ├── LoginServlet/RegisterServlet │ │ ├── CreateRoomServlet/JoinRoomServlet │ │ ├── MoveServlet/GameEndServlet │ │ └── GameHistoryServlet/GetRoomServlet │ ├── Filter过滤器 │ │ ├── AuthFilter - 登录验证 │ │ ├── CharacterEncodingFilter - 编码过滤 │ │ └── CsrfFilter - CSRF防护 │ └── WebSocket │ └── GameWebSocketServlet - 实时通信 │ └── 视图层 (JSP) ├── login.jsp - 登录页面 ├── register.jsp - 注册页面 ├── index.jsp - 首页 ├── lobby.jsp - 大厅页面 ├── game.jsp - 游戏页面 └── history.jsp - 历史记录页面 ``` ## 快速开始 ### 环境要求 - JDK 8+ - MySQL 5.7+ - Maven 3.x - Tomcat 8+ ### 数据库配置 1. 创建数据库: ```sql CREATE DATABASE go_game; USE go_game; ``` 2. 执行SQL脚本(db/go.sql)创建表结构 3. 修改数据库配置(DBUtil.java): ```java private static final String URL = "jdbc:mysql://localhost:3306/go_game"; private static final String USER = "your_username"; private static final String PASSWORD = "your_password"; ``` ### 部署步骤 1. 使用Maven构建项目: ```bash mvn clean package ``` 2. 部署到Tomcat的webapps目录 3. 启动Tomcat服务器 4. 访问 http://localhost:8080/your_project_name ## 核心算法说明 ### 气数计算 围棋的核心算法包括气的计算: - 气指的是棋子上下左右相邻的空位 - 气数为0的棋子将被提取 - 提子时会移除所有无气的棋子群 ### 打劫规则 系统实现了打劫规则,防止无限循环的提子: - 记录每一步的棋盘状态 - 检测是否形成打劫 - 禁止回到之前的状态 ### 胜负判定 采用中国规则: - 计算双方围取的地域 - 考虑提子数量 - 自动判定胜负 ## API接口 | 接口 | 方法 | 功能 | |------|------|------| | /LoginServlet | POST | 用户登录 | | /RegisterServlet | POST | 用户注册 | | /LogoutServlet | GET | 用户退出 | | /CreateRoomServlet | POST | 创建房间 | | /JoinRoomServlet | GET | 加入房间 | | /MoveServlet | POST | 落子操作 | | /GameHistoryServlet | GET | 获取历史记录 | | /GetRoom | GET | 获取房间信息 | | /gameEnd | POST | 游戏结束 | ## WebSocket接口 - 端点:`/game/{roomId}/{userId}` - 用于实时推送棋盘状态和游戏事件 ## 安全特性 - 密码使用盐值加密存储 - 登录状态验证(AuthFilter) - 字符编码统一处理(CharacterEncodingFilter) - CSRF攻击防护(CsrfFilter) - Session超时管理 ## 项目结构 ``` src/main/java/com/weiqi/ ├── dao/ # 数据访问层 ├── filter/ # 过滤器 ├── game/ # 游戏核心逻辑 ├── model/ # 数据模型 ├── servlet/ # Servlet控制器 ├── util/ # 工具类 └── websocket/ # WebSocket处理 ``` ## 扩展功能建议 1. AI对战模式 2. 观战系统 3. 复盘功能 4. 赛事系统 5. 排行榜 6. 即时聊天 ## 许可证 本项目仅供学习研究使用。