diff --git a/frontend/src/components/Board.tsx b/frontend/src/components/Board.tsx index 635358c..8208668 100644 --- a/frontend/src/components/Board.tsx +++ b/frontend/src/components/Board.tsx @@ -1,4 +1,4 @@ -import React, { useCallback, useRef, useState } from "react"; +import React, { useCallback, useEffect, useRef, useState } from "react"; import type { Board } from "../types/types"; import { generateBoard } from "../utils/board"; import { Cell } from "./Cell"; @@ -23,15 +23,20 @@ const calculateCellSize = () => { return Math.floor((containerSize - safePadding) / size); }; -const initialCellSize = calculateCellSize(); - export const BoardComponent: React.FC = ({ board, setBoard, flaggingMode, onGameOver, onGameClear, userName }) => { const [isGameActive, setIsGameActive] = useState(true); const [hasClickedOnce, setHasClickedOnce] = useState(false); + const [cellSize, setCellSize] = useState(calculateCellSize); const startTimeRef = useRef(0); const chainedblockRef = useRef(0); const openedblockRef = useRef(0); + useEffect(() => { + const handleResize = () => setCellSize(calculateCellSize()); + window.addEventListener("resize", handleResize); + return () => window.removeEventListener("resize", handleResize); + }, []); + const handleGameOver = () => { setIsGameActive(false); onGameOver(); @@ -58,7 +63,6 @@ export const BoardComponent: React.FC = ({ board, setBoard, flaggingMode, } }, [onGameClear, userName]); - const currentCellSize = initialCellSize; const handleClick = (r: number, c: number) => { if (!isGameActive) return; if (!hasClickedOnce) { @@ -85,9 +89,10 @@ export const BoardComponent: React.FC = ({ board, setBoard, flaggingMode, display: "grid", justifyContent: "center", alignContent: "center", - gridTemplateColumns: `repeat(${size}, ${currentCellSize+5}px)`, - paddingBottom: "50px", - width: `${(currentCellSize + 5) * size}px`, + gridTemplateColumns: `repeat(${size}, ${cellSize}px)`, + gridTemplateRows: `repeat(${size}, ${cellSize}px)`, + border: "1px solid black", + width: `${cellSize * size}px`, borderRadius: "8px", }}> {board.map((row, r) => @@ -95,7 +100,7 @@ export const BoardComponent: React.FC = ({ board, setBoard, flaggingMode, { diff --git a/frontend/src/components/Cell.tsx b/frontend/src/components/Cell.tsx index 27d6d65..ca8f7e3 100644 --- a/frontend/src/components/Cell.tsx +++ b/frontend/src/components/Cell.tsx @@ -63,8 +63,11 @@ export const Cell: React.FC = ({ cell, cellSize, onClick, board, hasClick style={{ width: cellSize, height: cellSize, - border: "1px solid #666", + padding: 0, + margin: 0, + border: "1px solid black", background: cell.isOpen ? "#ddd" : "#999", + color: "black", fontSize: `${cellSize * 0.5}px`, justifyContent: "center", alignItems: "center", diff --git a/frontend/src/components/timer.tsx b/frontend/src/components/timer.tsx deleted file mode 100644 index be89399..0000000 --- a/frontend/src/components/timer.tsx +++ /dev/null @@ -1,34 +0,0 @@ -import { useState, useEffect } from "react"; - -type TimerProps = { - start: number; - isActive: boolean; -}; - -function Timer({ start, isActive }: TimerProps) { - const [elapsedTime, setElapsedTime] = useState(0); - - useEffect(() => { - if (!isActive) return; - const timer = setInterval(() => { - setElapsedTime(Math.floor((Date.now() - start) / 1000)); - }, 1000); - - return () => clearInterval(timer); - }, [start, isActive]); - - const hours = Math.floor(elapsedTime / 3600); - const minutes = Math.floor((elapsedTime % 3600) / 60); - const seconds = elapsedTime % 60; - const format = (num: number) => String(num).padStart(2, '0'); - - return ( -

- {`⏰`} - {hours > 0 ? `${format(hours)}:` : ''} - {format(minutes)}:{format(seconds)} -

- ); -} - -export default Timer; \ No newline at end of file