const service = require("../../services/game-service"); const { GAME_MODES, DEFAULT_SETTINGS } = require("../../utils/constants"); Page({ data: { name: "周末藏猫猫", mode: DEFAULT_SETTINGS.mode, modes: Object.values(GAME_MODES), durationOptions: [15, 20, 30, 45, 60], durationIndex: 2, prepareOptions: [1, 3, 5, 8], prepareIndex: 1, maxPlayerOptions: [4, 6, 8, 10, 12, 20], maxPlayerIndex: 2, seekerOptions: [1, 2, 3, 4], seekerIndex: 1, clueOptions: [3, 5, 8, 10], clueIndex: 1, radiusOptions: [200, 300, 500, 800, 1000], radiusIndex: 2, skillsEnabled: true, safetyAccepted: false, submitting: false }, updateName(event) { this.setData({ name: event.detail.value }); }, chooseMode(event) { this.setData({ mode: event.currentTarget.dataset.mode }); }, onDurationChange(event) { this.setData({ durationIndex: Number(event.detail.value) }); }, onPrepareChange(event) { this.setData({ prepareIndex: Number(event.detail.value) }); }, onMaxPlayerChange(event) { const maxPlayerIndex = Number(event.detail.value); const maxPlayers = this.data.maxPlayerOptions[maxPlayerIndex]; let seekerIndex = this.data.seekerIndex; while ( seekerIndex > 0 && this.data.seekerOptions[seekerIndex] >= maxPlayers ) { seekerIndex -= 1; } this.setData({ maxPlayerIndex, seekerIndex }); }, onSeekerChange(event) { const seekerIndex = Number(event.detail.value); const seekers = this.data.seekerOptions[seekerIndex]; const maxPlayers = this.data.maxPlayerOptions[this.data.maxPlayerIndex]; if (seekers >= maxPlayers) { wx.showToast({ title: "寻找者必须少于人数上限", icon: "none" }); return; } this.setData({ seekerIndex }); }, onClueChange(event) { this.setData({ clueIndex: Number(event.detail.value) }); }, onRadiusChange(event) { this.setData({ radiusIndex: Number(event.detail.value) }); }, onSkillsChange(event) { this.setData({ skillsEnabled: event.detail.value }); }, onSafetyChange(event) { this.setData({ safetyAccepted: event.detail.value.length > 0 }); }, openRules() { wx.navigateTo({ url: "/pages/rules/rules" }); }, submit() { if (!this.data.name.trim()) { wx.showToast({ title: "请填写房间名称", icon: "none" }); return; } if (!this.data.safetyAccepted) { wx.showToast({ title: "请先确认安全规则", icon: "none" }); return; } this.setData({ submitting: true }); const data = this.data; try { const room = service.createRoom({ name: data.name.trim(), mode: data.mode, durationMinutes: data.durationOptions[data.durationIndex], prepareMinutes: data.prepareOptions[data.prepareIndex], maxPlayers: data.maxPlayerOptions[data.maxPlayerIndex], seekerCount: data.seekerOptions[data.seekerIndex], clueIntervalMinutes: data.clueOptions[data.clueIndex], radiusMeters: data.radiusOptions[data.radiusIndex], skillsEnabled: data.skillsEnabled }); wx.redirectTo({ url: `/pages/lobby/lobby?code=${room.code}` }); } catch (error) { this.setData({ submitting: false }); wx.showToast({ title: error.message, icon: "none" }); } } });