一个用于教学的开源图灵机模拟器 Web 应用,支持单带和多带(最多 5 带)图灵机的可视化模拟。
图灵机是计算理论中的基础概念,本项目旨在通过可视化界面帮助学生理解和学习图灵机的工作原理。
- 自由模式 (Free Mode) - 自由设计图灵机,添加状态和转换规则
- 学习模式 (Learning Mode) - 内置经典图灵机示例,边学边练
- 挑战模式 (Challenge Mode) - 完成预设挑战题,检验学习成果
- 多带支持 - 支持最多 5 条 tape 的多带图灵机
- 实时模拟 - 可视化展示图灵机执行过程
- AI 助手 - 内置 AI 助手,帮助理解图灵机概念
- 用户系统 - 支持学生/教师角色,作业提交与批改
| 自由模式 | 学习模式 | 挑战模式 |
|---|---|---|
| 自由设计图灵机 | 内置经典示例 | 闯关挑战 |
| 自定义状态和规则 | 分步学习理解 | 验证通过 |
- 框架: Spring Boot 3.4.4
- 数据库: MySQL 8.0
- ORM: JPA + MyBatis
- 认证: JWT (JSON Web Token)
- 实时通信: WebSocket (STOMP)
- 框架: Angular 19
- 语言: TypeScript
- 图表: D3.js
- 状态管理: RxJS
- 容器化: Docker + Docker Compose
- Web 服务器: Nginx
turing-machine/
├── src/
│ ├── main/
│ │ ├── java/com/example/webpj/ # Java 后端源码
│ │ │ ├── controller/ # 控制器层
│ │ │ ├── service/ # 服务层
│ │ │ ├── entity/ # 实体类
│ │ │ ├── mapper/ # MyBatis Mapper
│ │ │ ├── dto/ # 数据传输对象
│ │ │ ├── config/ # 配置类
│ │ │ └── util/ # 工具类
│ │ ├── angular/ # Angular 前端源码
│ │ │ └── src/app/
│ │ │ ├── components/ # 组件
│ │ │ ├── services/ # 服务
│ │ │ ├── models/ # 数据模型
│ │ │ └── pages/ # 页面
│ │ └── resources/
│ │ ├── mapper/ # MyBatis XML
│ │ └── application.yml # 配置文件
│ └── test/ # 测试代码
├── docker-compose.yml # Docker Compose 配置
├── Dockerfile.backend # 后端 Docker 镜像
├── Dockerfile.frontend # 前端 Docker 镜像
├── pom.xml # Maven 依赖配置
└── turing_machine.sql # 数据库初始化脚本
# 克隆项目
git clone https://github.com/wenuanhappy/turing-machine.git
cd turing-machine
# 启动所有服务(MySQL + 后端 + 前端)
docker-compose up -d服务启动后访问:
- 前端界面: http://localhost:80
- 后端 API: http://localhost:8080
- JDK 17+
- Node.js 18+
- MySQL 8.0
- Maven 3.8+
# 创建数据库
mysql -u root -p
CREATE DATABASE webapp;
EXIT;cd turing-machine
# 安装依赖并打包
mvn clean package -DskipTests
# 启动后端服务
java -jar target/WebPJ-0.0.1-SNAPSHOT.jar或使用 Maven 直接运行:
mvn spring-boot:runcd src/main/angular
# 安装依赖
npm install
# 启动开发服务器
npm start前端启动后访问 http://localhost:4200
# 使用本地开发配置(包含源码挂载)
docker-compose -f docker-compose.local.yml up -d| 变量名 | 说明 | 默认值 |
|---|---|---|
SPRING_DATASOURCE_URL |
MySQL 连接地址 | jdbc:mysql://mysql:3306/webapp |
SPRING_DATASOURCE_USERNAME |
数据库用户名 | root |
SPRING_DATASOURCE_PASSWORD |
数据库密码 | Root@111111 |
SPRING_PROFILES_ACTIVE |
激活的配置文件 | prod |
| 服务 | 端口 | 说明 |
|---|---|---|
| MySQL | 3306 | 数据库 |
| Backend | 8080 | 后端 API |
| Frontend | 80 | 前端界面 |
- 访问 http://localhost:80
- 点击"注册"按钮
- 填写用户名、密码、邮箱
- 选择角色:学生(STUDENT) 或 教师(TEACHER)
- 登录 - 使用注册的账号密码登录
- 选择模式 - 自由模式/学习模式/挑战模式
- 设计图灵机 - 添加状态、设置初始状态、添加转换规则
- 输入数据 - 在 tape 上输入初始数据
- 运行模拟 - 点击运行按钮,查看执行过程
{
currentState: "q0", // 当前状态
inputSymbols: ["0"], // 读取的符号
outputSymbols: ["1"], // 写入的符号
moveDirections: ["R"], // 移动方向 (L/R/S)
nextState: "q1" // 下一状态
}多带图灵机示例:
{
currentState: "q0",
inputSymbols: ["0", "1"], // 同时读取两条 tape
outputSymbols: ["1", "0"],
moveDirections: ["R", "L"],
nextState: "q1",
syncAction: "sum" // 可选的同步操作
}| 接口 | 方法 | 说明 |
|---|---|---|
/api/auth/register |
POST | 用户注册 |
/api/auth/login |
POST | 用户登录 |
/api/machine/save |
POST | 保存图灵机 |
/api/machine/list |
GET | 获取图灵机列表 |
/api/machine/execute |
POST | 执行图灵机 |
/api/challenge/list |
GET | 获取挑战题列表 |
/api/ai/chat |
POST | AI 助手对话 |
部署后可以注册新账号,或使用以���测试账号:
| 用户名 | 密码 | 角色 |
|---|---|---|
| demo | demo123 | STUDENT |
# 检查 Docker 状态
docker ps
# 查看容器日志
docker-compose logs检查 src/main/angular/src/environments/environment.ts 中的 API 地址配置。
确认 MySQL 服务已启动,数据库已创建,账号密码正确。
cd src/main/angular
ng generate component components/your-component- 在
controller/目录创建控制器 - 在
service/目录实现业务逻辑 - 在
entity/目录定义实体 - 在
mapper/目录定义数据库操作
本项目仅供学习交流使用。
- 感谢所有参与项目开发的同学
- 使用了智谱 GLM-4 API 提供 AI 助手功能