# CrazyFootball **Repository Path**: Da-lez/crazy-football ## Basic Information - **Project Name**: CrazyFootball - **Description**: No description available - **Primary Language**: PHP - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-05-31 - **Last Updated**: 2022-02-06 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## WEB项目实战课程设计 #### 项目简介: 本项目是一个基于PHP Workerman实现的简单的在线多人足球的网页小游戏 #### 功能需求分析: 1. 用户注册与登录功能的页面和实现 2. 游戏页面的设计和实现 3. 开始游戏后需要与服务器进行websocket长连接 4. 对游戏进行抽象和简单建模,并用代码模拟游戏规则 5. 项目性能测试和优化,并进行前后端分离部署 #### 模块分析与设计: - 数据库设计 注册时将用户的用户名和密码信息记录供以登录。因此只需要一张用户表ball_user,其中字段为 ```mysql create database if not exists crazyfootball; use crazyfootball; DROP TABLE IF EXISTS `ball_user`; CREATE TABLE `ball_user` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'primary key', `username` varchar(30) CHARACTER SET utf8mb4 NOT NULL, `password` varchar(255) CHARACTER SET utf8mb4 NOT NULL, `create_time` datetime(0) NULL DEFAULT CURRENT_TIMESTAMP(0) COMMENT 'create time', `update_time` datetime(0) NULL DEFAULT CURRENT_TIMESTAMP(0) ON UPDATE CURRENT_TIMESTAMP(0) COMMENT 'update time', PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 5 CHARACTER SET = utf8mb4 ``` - 游戏设计 游戏的关键就是在多个客户端之间来同步数据,从而实现联机游戏。因此有两种同步模型:动作同步和状态同步。为了尽可能让游戏延迟变低,让客户端有一个完全一致的时间轴,实时的多人游戏应该选择动作同步。由于这是个实验性项目,为了简化游戏模型,本项目的核心规则采用状态同步,即与球相关的游戏逻辑将运行在服务器,其余运行在客户端,服务器只对客户端的操作进行转发。 #### 模块分析与实现: 1. 用户注册与登录的功能模块,需要前端(html+css+js)、后端(php)、数据库(mysql)交互实现 2. 多人在线游戏的功能实现需要由前端和后端双方的socket通信实现。前端使用socket.io-client js库,后端使用基于workerman框架实现的phpsocket.io库,实现双方的长连接通信 3. 游戏建模,在main.js和Ball.php文件中实现游戏规则 4. 前后端分离,利用nginx反向代理直接解决跨域问题 #### 代码实现与部署说明 该项目代码结构如下 ![项目代码结构](https://images.gitee.com/uploads/images/2021/0620/005439_136482bc_7937689.png "struct.png") 为了项目的实用性和可扩展性,将游戏逻辑实现与实体类Ball.php分离出来,添加tp框架支持,将前端静态资源也抽离出来,放在nginx静态服务器中单独部署,通过反向代理处理跨域问题,并对前端静态资源进行压缩和缓存优化。 #### 部署命令 [path] ... nginx && php think run && php ./app/start_io.php & #### 系统截图示例 1. 登录与注册页 ![登录页](https://images.gitee.com/uploads/images/2021/0620/005306_3a0fdb1b_7937689.png "login.png") 2. 游戏开始页 ![游戏开始页](https://images.gitee.com/uploads/images/2021/0620/005410_ed1fd79a_7937689.png "start.png") 3. 游戏中页面 ![游戏中页面](https://images.gitee.com/uploads/images/2021/0620/005424_e36c6b9b_7937689.png "game.png")