📖 前端改造
- 游戏公测
- 游戏分数数设置 (backEnd)
- 自动化 CI
- react-loadable 替换为 Suspense
- store 层改造
- 前端认证模式改造
- 集成 snowpack
- 优化图片引入(切片移动时有多余的网络请求,考虑 prefetch 后转 base64)
- 集成 Typescript
- socket 引入模式改造为 hooks
- socket 层懒加载能力
- 分化高可复用性组件
- mincu 接入
👷♀️ 整体改造
- 增量更新 & 版本控制
- 自定义房间列表
- 匹配模式
前端服务
yarn start
进入localhost:8080
进行调试
输入密码与学号(云家园)
-
创建房间 -> 输入队伍名(不重复) -> 选择人数(难度 -> 生成队伍序号 -> 准备游戏 -> 开始游戏(随机给图片)
-
加入房间 -> 输入房间号 -> 人满 ? 提示房间已满 : (进入房间 -> 已经开始游戏 ? 直接加入游戏 : 准备游戏 )
-
查看排行 ->(todo)
当队伍足够该难度人数时 游戏倒计时开始
设定了三个难度 以便于能够让所有人都进行游戏
难度 | 人数 | 拼图 | 分数设置 | 玩家手持切片数 |
---|---|---|---|---|
easy(3) | 3人 | 3x3 | (over/time)*3 | 3个 |
normal(4) | 4人 | 4x4 | (over/time)*4 | 4个 |
hard(5) | 5人 | 5x5 | (over/time)*5 | 5个 |
over为评价完成度的数值
每次有人进入房间时,向该人发送
{
"roomName": "F4", //队伍名
"roomId": 114512, //房间号
"members": [ //该房间用户信息
{
"username": "蔡徐坤", //用户名
"identity": "leader", //用户身份
"id": 1 //用来标示其在房间内的序号
},
{
"username": "吴亦凡",
"identity": "member",
"id": 2
},
{
"username": "王源",
"identity": "member",
"id": 3
},
{
"username": "赵子琦",
"identity": "member",
"id": 4
}
]
}
向房间内其他人发送
{
"message": "xxx加入房间",
"members": [ //该房间用户信息
{
"username": "蔡徐坤", //用户名
"identity": "leader", //用户身份
"id": 1 //用来标示其在房间内的序号
},
{
"username": "吴亦凡",
"identity": "member",
"id": 2
},
{
"username": "王源",
"dentity": "member",
"id": 3
},
{
"username": "赵子琦",
"identity": "member",
"id": 4
}
]
}
leader开始游戏时
{
"members": [ //该房间用户信息
{
"username": "蔡徐坤", //用户名
"identity": "leader", //用户身份
"id": 1 //用来标示其在房间内的序号
},
{
"username": "吴亦凡",
"identity": "member",
"id": 2
},
{
"username": "王源",
"dentity": "member",
"id": 3
},
{
"username": "赵子琦",
"identity": "member",
"id": 4
}
"starTime":
}
房间内所有成员接收
{
"username": "赵子琦", //用户名
"roomName": "F4", //队伍名
"roomId": 114512, //房间号
"picKind": 2, //选图
"difficult": 4, //难度
"jigsawList": [ //该房间此时的游戏进程
[0, 2, 3, 0],
[0, 6, 0, 8],
[9, 10, 11, 12],
[13, 14, 15, 16]
],
"pics": [1, 4, 5, 7], //该用户可操作的卡片
"endTime": 1234123,
"members": [ //该房间用户信息
{
"username": "蔡徐坤", //用户名
"identity": "leader", //用户身份
"id": 1 //用来标示其在房间内的序号
},
{
"username": "吴亦凡",
"identity": "member",
"id": 2
},
{
"username": "王源",
"dentity": "member",
"id": 3
},
{
"username": "赵子琦",
"identity": "member",
"id": 4
}
]
}
每次有人加入游戏时,向该人发送(根据token
返回)
{
"username": "赵子琦", //用户名
"roomName": "F4", //队伍名
"roomId": 114512, //房间号
"picKind": 2, //选图
"difficult": 4, //难度
"jigsawList": [ //该房间此时的游戏进程
[0, 2, 3, 0],
[0, 6, 0, 8],
[9, 10, 11, 12],
[13, 14, 15, 16]
],
"pics": [1, 4, 5, 7], //该用户可操作的卡片
"endTime": 1234123,
"members": [ //该房间用户信息
{
"username": "蔡徐坤", //用户名
"identity": "leader", //用户身份
"id": 1 //用来标示其在房间内的序号
},
{
"username": "吴亦凡",
"identity": "member",
"id": 2
},
{
"username": "王源",
"dentity": "member",
"id": 3
},
{
"username": "赵子琦",
"identity": "member",
"id": 4
}
]
}
并向该房间其他人广播 (ws会根据关键字回调相应函数)(服务器监听并将此人从数组中加入)
{
"username": "赵子琦",
"id": 4
}
移动拼图后 向该房间非己成员广播 并将list
序列化存储在在redis中
{
"list": [
[0, 2, 3, 4],
[0, 6, 0, 8],
[9, 10, 11, 12],
[13, 14, 15, 16]
],
"handleRow": 0,
"handleColumn": 3,
"user": "赵子琦"
"members": [ //该房间用户信息
{
"username": "蔡徐坤", //用户名
"identity": "leader", //用户身份
"id": 1 //用来标示其在房间内的序号
},
{
"username": "吴亦凡",
"identity": "member",
"id": 2
},
{
"username": "王源",
"dentity": "member",
"id": 3
},
{
"username": "赵子琦",
"identity": "member",
"id": 4
}
]
}
某人退出游戏 向该房间非某人成员广播 (ws会根据关键字回调相应函数)(服务器监听并将此人从数组中删除)
{
"username": "赵子琦",
"id": 4
}
向所有人广播此人退出信息, 游戏继续进行
强行上交矩阵/队伍与房间信息 并计算出分数(time=300)
队长提交矩阵/完成时间/队伍与房间信息 并计算出分数
返回的data
{
roomName: "白色相簿",
roomId: 13321452314,
members: [
{
username: "孙翔宇",
userId: 123,
identity: "leader",
class: "物理学类 183班",
ready: false,
id: 1
},
{
username: "赵子琦",
userId: 11,
identity: "member",
class: "数学与应用数学 193班",
ready: false,
id: 2
},
{
username: "田承涵",
userId: 13,
identity: "member",
class: "信息与计算科学 181班",
ready: true,
id: 3
}
],
message: "孙翔宇加入本房间",
difficult: 4,
};