feat: 猜成语游戏 - 完整题库、管理后台、答题弹窗
- 创建 idioms 表(102条谜语式成语题库)和 idiom_game_rounds 表 - 后台成语管理页面:增删改题目 + 游戏参数(金币/经验/间隔)内联设置 + 出题按钮 - IdiomQuizController:出题/答题/当前回合查询,Redis 防并发抢答 - IdiomGameStarted / IdiomGameAnswered 广播事件 - 前端答题弹窗模块:聊天消息带【答题】按钮,点击弹出输入框 - GameConfig 注册 idiom 游戏,由 admin.game-configs 统一管理开关
This commit is contained in:
@@ -274,6 +274,7 @@ Route::middleware(['chat.auth'])->group(function () {
|
||||
'fishing' => \App\Models\GameConfig::isEnabled('fishing'),
|
||||
'lottery' => \App\Models\GameConfig::isEnabled('lottery'),
|
||||
'gomoku' => \App\Models\GameConfig::isEnabled('gomoku'),
|
||||
'idiom' => \App\Models\GameConfig::isEnabled('idiom'),
|
||||
]);
|
||||
})->name('games.enabled');
|
||||
|
||||
@@ -291,6 +292,13 @@ Route::middleware(['chat.auth'])->group(function () {
|
||||
->middleware('throttle:chat-send')
|
||||
->name('chat.pat');
|
||||
|
||||
// 猜成语游戏
|
||||
Route::prefix('idiom-quiz')->name('idiom-quiz.')->group(function () {
|
||||
Route::post('/start', [\App\Http\Controllers\IdiomQuizController::class, 'start'])->name('start');
|
||||
Route::post('/answer', [\App\Http\Controllers\IdiomQuizController::class, 'answer'])->name('answer');
|
||||
Route::get('/current', [\App\Http\Controllers\IdiomQuizController::class, 'current'])->name('current');
|
||||
});
|
||||
|
||||
// 挂机心跳存点 (限制每分钟最多调用 6 次防止挂机脚本滥用)
|
||||
Route::post('/room/{id}/heartbeat', [ChatController::class, 'heartbeat'])
|
||||
->middleware('throttle:6,1')
|
||||
@@ -581,6 +589,16 @@ Route::middleware(['chat.auth', 'chat.has_position'])->prefix('admin')->name('ad
|
||||
Route::post('/{fishing}/toggle', [\App\Http\Controllers\Admin\FishingEventController::class, 'toggle'])->name('toggle');
|
||||
Route::delete('/{fishing}', [\App\Http\Controllers\Admin\FishingEventController::class, 'destroy'])->name('destroy');
|
||||
});
|
||||
|
||||
// ── 猜成语题库 ──
|
||||
Route::prefix('idioms')->name('idioms.')->group(function () {
|
||||
Route::get('/', [\App\Http\Controllers\Admin\IdiomController::class, 'index'])->name('index');
|
||||
Route::post('/', [\App\Http\Controllers\Admin\IdiomController::class, 'store'])->name('store');
|
||||
Route::put('/{idiom}', [\App\Http\Controllers\Admin\IdiomController::class, 'update'])->name('update');
|
||||
Route::post('/{idiom}/toggle', [\App\Http\Controllers\Admin\IdiomController::class, 'toggle'])->name('toggle');
|
||||
Route::delete('/{idiom}', [\App\Http\Controllers\Admin\IdiomController::class, 'destroy'])->name('destroy');
|
||||
Route::post('/settings', [\App\Http\Controllers\Admin\IdiomController::class, 'saveSettings'])->name('settings.save');
|
||||
});
|
||||
});
|
||||
|
||||
// ──────────────────────────────────────────────────────────────
|
||||
|
||||
Reference in New Issue
Block a user