feat(chat): 完善五子棋功能,包含AI对战、PvP邀请、断线重连及界面美化

This commit is contained in:
2026-03-12 08:35:21 +08:00
parent b9c703b755
commit 1c42f05e20
17 changed files with 2740 additions and 6 deletions
+35 -1
View File
@@ -30,7 +30,6 @@ Route::post('/login', [AuthController::class, 'login'])->name('login.post');
// 处理退出登录
Route::post('/logout', [AuthController::class, 'logout'])->name('logout');
// 聊天室系统内部路由 (需要鉴权)
Route::middleware(['chat.auth'])->group(function () {
// ---- 第六阶段:大厅与房间管理 ----
@@ -177,6 +176,40 @@ Route::middleware(['chat.auth'])->group(function () {
Route::get('/my', [\App\Http\Controllers\LotteryController::class, 'my'])->name('my');
});
// ── 五子棋(前台)───────────────────────────────────────────────
Route::prefix('gomoku')->name('gomoku.')->group(function () {
// 获取五子棋配置(入场费、奖励,对外暴露给前端面板)
Route::get('/config', function () {
$c = \App\Models\GameConfig::query()->where('game_key', 'gomoku')->first();
$p = $c?->params ?? [];
return response()->json([
'ok' => true,
'pvp_reward' => (int) ($p['pvp_reward'] ?? 80),
'pve_levels' => [
['level' => 1, 'name' => '简单', 'fee' => (int) ($p['pve_easy_fee'] ?? 0), 'reward' => (int) ($p['pve_easy_reward'] ?? 20)],
['level' => 2, 'name' => '普通', 'fee' => (int) ($p['pve_normal_fee'] ?? 10), 'reward' => (int) ($p['pve_normal_reward'] ?? 50)],
['level' => 3, 'name' => '困难', 'fee' => (int) ($p['pve_hard_fee'] ?? 30), 'reward' => (int) ($p['pve_hard_reward'] ?? 120)],
['level' => 4, 'name' => '专家', 'fee' => (int) ($p['pve_expert_fee'] ?? 80), 'reward' => (int) ($p['pve_expert_reward'] ?? 300)],
],
]);
})->name('config');
// 查询当前用户是否有进行中的对局(用于重进时恢复)
Route::get('/active', [\App\Http\Controllers\GomokuController::class, 'active'])->name('active');
// 创建对局(pvp=随机邀请 | pve=人机对战)
Route::post('/create', [\App\Http\Controllers\GomokuController::class, 'create'])->name('create');
// 加入 PvP 对战
Route::post('/{game}/join', [\App\Http\Controllers\GomokuController::class, 'join'])->name('join');
// 落子
Route::post('/{game}/move', [\App\Http\Controllers\GomokuController::class, 'move'])->name('move');
// 认输
Route::post('/{game}/resign', [\App\Http\Controllers\GomokuController::class, 'resign'])->name('resign');
// 取消等待中的邀请
Route::post('/{game}/cancel', [\App\Http\Controllers\GomokuController::class, 'cancel'])->name('cancel');
// 获取当前棋盘状态
Route::get('/{game}/state', [\App\Http\Controllers\GomokuController::class, 'state'])->name('state');
});
// ── 游戏大厅:实时开关状态接口 ────────────────────────────────────
Route::get('/games/enabled', function () {
return response()->json([
@@ -187,6 +220,7 @@ Route::middleware(['chat.auth'])->group(function () {
'fortune_telling' => \App\Models\GameConfig::isEnabled('fortune_telling'),
'fishing' => \App\Models\GameConfig::isEnabled('fishing'),
'lottery' => \App\Models\GameConfig::isEnabled('lottery'),
'gomoku' => \App\Models\GameConfig::isEnabled('gomoku'),
]);
})->name('games.enabled');