Rumah > Artikel > hujung hadapan web > Tic Tac Toe mudah tetapi paling banyak ditanya dalam Pusingan Frontend! KENAPA ?
Sebagai graduan baru, saya menemui Tic-Tac-Toe sebagai soalan temuduga yang kerap, terutamanya dalam peranan frontend. Ia adalah masalah serba boleh yang menguji kemahiran pembangunan bahagian hadapan, pemikiran logik dan kebolehan menyelesaikan masalah dengan berkesan menggunakan struktur data dan algoritma.
Saya memutuskan untuk melaksanakan Tic-Tac-Toe sendiri untuk mengukuhkan pemahaman saya. Walaupun ia mungkin kelihatan seperti permainan yang mudah, mencipta penyelesaian yang mantap melibatkan pertimbangan teliti beberapa faktor.
Saya berbesar hati untuk berkongsi kod saya dan menerangkan pendekatan saya. Saya percaya bahawa perkongsian pengetahuan adalah penting untuk pertumbuhan, dan membincangkan penyelesaian boleh membawa kepada cerapan dan penambahbaikan yang berharga.
import "./App.css" import TicTacToe from "./components/TicTacToe" const App = () => { return ( <div > <TicTacToe /> </div> ) } export default App
import useTicTacToe from "../hooks/useTicTacToe" const TicTacToe = () => { const {board, handleClick, getStatusMessage, resetGame} = useTicTacToe(); return ( <div className="main"> <div className="heading"> <h1> { getStatusMessage() } </h1> <button onClick={resetGame}>Reset Game</button> </div> <div className="board"> { board.map((player, i) => { return <button key={i} onClick={() => handleClick(i)} disabled = {player !== null}>{player}</button> }) } </div> </div> ) } export default TicTacToe
import { useState } from "react"; const intialGame = () => Array(9).fill(null); const useTicTacToe = () => { const [board, setBoard] = useState(intialGame()) const [isXNext, setIsXNext] = useState(true); const winning_patterns = [ [0,1,2], [3,4,5], [6,7,8], [0,4,8], [2,4,6], [0,3,6], [1,4,7], [2,5,8], ]; const calculateWinner = (currentBoard) => { for(let i = 0 ; i < winning_patterns.length ; i++) { const [a, b, c] = winning_patterns[i]; if(currentBoard[a] && currentBoard[a] === currentBoard[b] && currentBoard[a] === currentBoard[c]) { return currentBoard[a]; } } return null; } const resetGame = () => { setBoard(intialGame()); } const getStatusMessage = () => { const winner = calculateWinner(board); if(winner) return `Player ${winner} Won ?` if(!board.includes(null)) return `It's a Draw` return `Player ${isXNext === true ? "X" : "O"} Turn` } const handleClick = (index) => { const winner = calculateWinner(board); if(winner) return null; const newBoard = [...board]; newBoard[index] = isXNext ? "X" : "O"; setBoard(newBoard); setIsXNext(!isXNext); } return {board, calculateWinner, resetGame, getStatusMessage, handleClick} } export default useTicTacToe;
.board { width: 300px; height: 300px; display: grid; grid-template-columns: repeat(3, 1fr); justify-content: center; } .main { display: flex; justify-content: center; align-items: center; flex-direction: column; gap: 10px; } .heading { display: flex; justify-content: center; align-items: center; gap: 10px; } .board button { font-size: 35px; }
Atas ialah kandungan terperinci Tic Tac Toe mudah tetapi paling banyak ditanya dalam Pusingan Frontend! KENAPA ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!