Files
fast/format/GameInterface.php
xiadc be7ee40690 feat(zy): 实现比赛报名和自动分组功能
- 新增比赛报名逻辑,支持单双打和团队赛
- 实现自动分组算法,根据比赛规则生成对阵表
- 添加下一轮对阵安排功能,支持淘汰赛制
- 优化比赛结果处理,自动计算排名和得分
- 新增参赛人员列表接口,支持多种查询条件
2025-05-30 16:29:57 +08:00

147 lines
6.5 KiB
PHP
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
namespace format;
use app\admin\model\zy\game\Game;
/*
赛制文件
1. 团队类型1双打2单打3团队
2. 规则类型1八人转2超八转3混双转4固搭转5固定擂6活动擂7转转8分区转9擂台赛10守擂赛11追分赛12固搭追分赛13大循环群内赛14两队PK赛15战队淘汰赛16单项淘汰赛17分区循环淘汰赛
3. 需要引入新赛制请创建新的类文件,类文件需要实现GameInterface接口,并且文件名为`Game + 团队类型代码 + 规则类型代码.php`。
如:赛制为双打+转转则文件为format/Game17.php。
赛制为单打+擂台赛则文件为format/Game29.php。
*/
interface GameInterface
{
// 赛制说明
public function describe(): string;
/**首轮对阵安排
*
入参:
$game = Array
(
[id] => 1 //比赛id
[pid] => 0 //主比赛id
[act_id] => 1 //活动id
[gym_id] => 1 //球馆id
[club_id] => 4 //俱乐部id
[name] => 聚点第八届年终团体赛 //比赛名称
[team_type] => 1 //团队类型1双打2单打3团队
[rule_type] => 7 //规则类型1八人转2超八转3混双转4固搭转5固定擂6活动擂7转转8分区转9擂台赛10守擂赛11追分赛12固搭追分赛13大循环群内赛14两队PK赛15战队淘汰赛16单项淘汰赛17分区循环淘汰赛
[date] => 2025-05-17 //比赛日期
[week] => 2 //周几
[start_time] => 09:00:00 //开始时间
[end_time] => 12:30:00 //结束时间
[public_time] => 2025-05-02 09:00:00 //公布时间
[join_start_time] => 2025-05-03 09:00:00 //报名开始时间
[join_end_time] => 2025-05-04 09:00:00 //报名结束时间
[quit_time] => 2025-05-04 08:00:00 //免费退坑时间
[game_time] => 3.5 //比赛时长
[address] => 泰新路88号 //地址
[field] => 22 //场地号
[position] => //位置
[cost] => {"type":"1","man":"84","woman":"56","extra":"10","server":"1"} //费用
[limit_num] => 30 //报名人数限制
[join_num] => 0 //已报名人数
[attention] => 0 //关注人数
[status] => 0 //状态,-1取消0未开始1报名中2进行中3已结束
[describe] => 活动介绍 //介绍
[img] => /assets/img/qrcode.png //图片
[game_rule] => 比赛规则 //规则
[is_public] => 1 //是否公开0否1是
[bring_num] => 2 //可带人数
[is_bring] => 1 //是否可带人0否1是
[referee] => 1,2 //裁判用户id
[create_time] => 2025-04-30 10:45:58
[update_time] => 2025-05-26 10:34:14
)
$users = Array(
[
[id] => 1 // 比赛参与id
[user_id] => 1 //用户id
[name] => Yam Lai Yan //昵称
[avatar] => /assets/img/qrcode.png //头像
[gender] => 0 //性别0女1男
[game_join_id] => 1 //报名记录id
[game_id] => 1 //比赛id
[team] => //本次比赛团队
[order] => 1 //本次比赛顺序
[rank] => 0 //本次比赛排名
[mark] => //备注
[status] => 1 //状态0候补1正常2退坑
[signin] => 0 //签到状态0未签到1已签到
[score] => 0 //得分
[net_score] => 0 //净得分
[win] => 0 //胜局
[create_time] => 2025-04 - 24 05: 35:00
[update_time] => 2025-05 - 26 15:08: 55
],
)
出参:
return $math = Array(
[
[gym_id] => 1 //球馆id
[club_id] => 4 //俱乐部id
[act_id] => 1 //活动id
[game_id] => 1 //比赛id
[level] => 1 //轮次
[turn] => 1 //场次
[teamA] => {"name":"team01","user":[{"user_id":1,"gender":0,"avatar":"\/assets\/img\/qrcode.png","name":"Yam Lai Yan"},{"user_id":2,"gender":1,"avatar":"\/assets\/img\/qrcode.png","name":"Yuen Wai San"}]} //队伍A
[teamB] => {"name":"team23","user":[{"user_id":3,"gender":0,"avatar":"xjgH6E5VkQ","name":"Mo Ming Sze"},{"user_id":4,"gender":1,"avatar":"hSuH5AZVxt","name":"Chan Ka Keung"}]} //队伍B
],
)
*/
public function match(Game $game, array $users): array;
/**下一轮对阵安排
*
入参:
$maths = Array(
[
[id] => 1
[gym_id] => 1
[club_id] => 4
[act_id] => 1
[game_id] => 1
[level] => 1
[turn] => 1
[teamA] => {"name":"team01","user":[{"user_id":1,"gender":0,"avatar":"\/assets\/img\/qrcode.png","name":"admin1"},{"user_id":2,"gender":1,"avatar":"\/assets\/img\/qrcode.png","name":"admin2"}]}
[teamB] => {"name":"team23","user":[{"user_id":3,"gender":0,"avatar":"\/assets\/img\/qrcode.png","name":"admin3"},{"user_id":4,"gender":1,"avatar":"\/assets\/img\/qrcode.png","name":"admin4"}]}
[round1] => {"addedA":"3","addedB":"0","scoreA":"15","scoreB":"24"}
[round2] => {"addedA":"3","addedB":"0","scoreA":"15","scoreB":"24"}
[round3] => {"addedA":"3","addedB":"0","scoreA":"15","scoreB":"24"}
[scoreA] => 0
[scoreB] => 3
[winner] => {"name":"team23","user":[{"user_id":3,"gender":0,"avatar":"\/assets\/img\/qrcode.png","name":"admin3"},{"user_id":4,"gender":1,"avatar":"\/assets\/img\/qrcode.png","name":"admin4"}]}
[create_time] => 2025-05-30 15:24:28
[update_time] => 2025-05-30 15:54:34
],
)
$level 设定为第几轮数
出参:
return $math = Array(
[
[gym_id] => 1 //球馆id
[club_id] => 4 //俱乐部id
[act_id] => 1 //活动id
[game_id] => 1 //比赛id
[level] => 1 //轮次
[turn] => 1 //场次
[teamA] => {"name":"team01","user":[{"user_id":1,"gender":0,"avatar":"\/assets\/img\/qrcode.png","name":"Yam Lai Yan"},{"user_id":2,"gender":1,"avatar":"\/assets\/img\/qrcode.png","name":"Yuen Wai San"}]} //队伍A
[teamB] => {"name":"team23","user":[{"user_id":3,"gender":0,"avatar":"xjgH6E5VkQ","name":"Mo Ming Sze"},{"user_id":4,"gender":1,"avatar":"hSuH5AZVxt","name":"Chan Ka Keung"}]} //队伍B
],
)
如return $math 为空则比赛结束
*/
public function nextLevel(Game $game, array $maths, int $level): array;
// 奖金分配
public function prize(array $rank): array;
}