From 75c980e2b6a212b3195c9e6bed11f01437281f95 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=88=98=E8=88=AA=E5=AE=87?= <3364451258@qq.com> Date: Sun, 31 May 2026 13:45:02 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E6=A3=8B=E7=9B=98?= =?UTF-8?q?=E5=A4=A7=E5=B0=8F=E9=80=89=E6=8B=A9=E5=99=A8=20(9x9=20~=2019x1?= =?UTF-8?q?9)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 4.7 --- src/components/menu/AiGameSetup.tsx | 12 +++++++++++- src/components/menu/LocalGameSetup.tsx | 13 ++++++++++++- src/components/menu/OnlineSetup.tsx | 12 +++++++++++- 3 files changed, 34 insertions(+), 3 deletions(-) diff --git a/src/components/menu/AiGameSetup.tsx b/src/components/menu/AiGameSetup.tsx index a55974a..c43a60e 100644 --- a/src/components/menu/AiGameSetup.tsx +++ b/src/components/menu/AiGameSetup.tsx @@ -1,6 +1,7 @@ import { useState } from 'react'; import { useTranslation } from 'react-i18next'; import { useGameStore } from '../../store/gameStore'; +import { MIN_BOARD_SIZE, MAX_BOARD_SIZE } from '../../core/constants'; import type { Color, GameConfig } from '../../core/types'; interface Props { @@ -11,13 +12,14 @@ interface Props { export default function AiGameSetup({ onBack, onStart }: Props) { const { t } = useTranslation(); const startGame = useGameStore((s) => s.startGame); + const [boardSize, setBoardSize] = useState(15); const [difficulty, setDifficulty] = useState(3); const [playerColor, setPlayerColor] = useState('Black'); const [useForbidden, setUseForbidden] = useState(true); const handleStart = async () => { const config: GameConfig = { - boardSize: 15, + boardSize, useForbiddenRules: useForbidden, useTimer: false, timeLimitSecs: 60, @@ -33,6 +35,14 @@ export default function AiGameSetup({ onBack, onStart }: Props) { return (

{t('menu.ai_game')}

+
diff --git a/src/components/menu/OnlineSetup.tsx b/src/components/menu/OnlineSetup.tsx index 7959cd9..ad318e5 100644 --- a/src/components/menu/OnlineSetup.tsx +++ b/src/components/menu/OnlineSetup.tsx @@ -1,6 +1,7 @@ import { useTranslation } from 'react-i18next'; import { useGameStore } from '../../store/gameStore'; import { useState } from 'react'; +import { MIN_BOARD_SIZE, MAX_BOARD_SIZE } from '../../core/constants'; import type { GameConfig } from '../../core/types'; interface Props { onBack: () => void; onStart: () => void; } @@ -9,9 +10,10 @@ export default function OnlineSetup({ onBack, onStart }: Props) { const { t } = useTranslation(); const startGame = useGameStore((s) => s.startGame); const [ip, setIp] = useState(''); + const [boardSize, setBoardSize] = useState(15); const baseConfig: GameConfig = { - boardSize: 15, useForbiddenRules: true, useTimer: false, + boardSize, useForbiddenRules: true, useTimer: false, timeLimitSecs: 60, aiDifficulty: 3, playerColor: 'Black', isServer: false, remoteAddress: '', }; @@ -29,6 +31,14 @@ export default function OnlineSetup({ onBack, onStart }: Props) { return (

{t('menu.online_game')}

+
setIp(e.target.value)} placeholder={t('menu.ip_placeholder') as string} />