Rumah > hujung hadapan web > tutorial js > Tic Tac Toe mudah tetapi paling banyak ditanya dalam Pusingan Frontend! KENAPA ?

Tic Tac Toe mudah tetapi paling banyak ditanya dalam Pusingan Frontend! KENAPA ?

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
Lepaskan: 2024-08-05 16:26:32
asal
493 orang telah melayarinya

Tic Tac Toe is simple but most asked in Frontend Rounds! WHY ?

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.

App.jsx

import "./App.css"
import TicTacToe from "./components/TicTacToe"
const App = () => {
  return (
    <div >
        <TicTacToe />
    </div>
  )
}
export default App
Salin selepas log masuk

TicTacToe.jsx

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
Salin selepas log masuk

Kail Reaksi Tersuai

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;
Salin selepas log masuk

Penggayaan

.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;
}
Salin selepas log masuk

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!

sumber:dev.to
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan