最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

React 實(shí)現(xiàn)井字棋的示例代碼

 更新時(shí)間:2024年07月09日 08:34:37   作者:卡卡舅舅  
本文主要介紹了React 實(shí)現(xiàn)井字棋,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

一、簡介

這篇文章會(huì)基于React 實(shí)現(xiàn)井字棋小游戲功能。

二、效果演示

三、技術(shù)實(shí)現(xiàn)

import {useEffect, useState} from "react";

export default (props) => {
  return <Board/>
}


const Board = () => {
  let initialState = [['', '', ''], ['', '', ''], ['', '', '']];
  const [squares, setSquares] = useState(initialState);
  const [times, setTimes] = useState(0);
  useEffect(()=>{
      // 判斷每行是否相同
      for (let i = 0; i < 3; i++) {
        if (squares[i][0] === squares[i][1] && squares[i][1] === squares[i][2] && squares[i][0] !== '') {
          alert(squares[i][0] + ' win');
          setTimes(0)
          setSquares(initialState)
          return;
        }
      }
      // 判斷每列是否相同
      for (let i = 0; i < 3; i++) {
        if (squares[0][i] === squares[1][i] && squares[1][i] === squares[2][i] && squares[0][i] !== '') {
          alert(squares[0][i] + ' win')
          setTimes(0)
          setSquares(initialState)
          return;
        }
      }
      // 判斷對(duì)角線是否相同
      if (squares[0][0] === squares[1][1] && squares[1][1] === squares[2][2] && squares[0][0] !== '') {
        alert(squares[0][0] + ' win');
        setTimes(0)
        setSquares(initialState)
        return;
      }
      if (squares[0][2] === squares[1][1] && squares[1][1] === squares[2][0] && squares[0][2] !== ''){
        alert(squares[0][2] + ' win');
        setTimes(0)
        setSquares(initialState)
        return;
      }


  },[times])
  return <div style={{width:'130px', margin: '0 auto'}}>
    <table style={{borderCollapse: 'collapse'}}>
      {squares.map((row, rowIdx) => {
        return <tr key={rowIdx}>
          {
            row.map((col, colIdx) => {
                return <td key={rowIdx + '-' + colIdx} style={{border: '1px solid #000', width: '40px', height: '40px'}}>
                  <div style={{width: '40px', height: '40px', textAlign: 'center', lineHeight:'40px'}} onClick={
                    () => {
                      const newSquares = [...squares];
                      if (newSquares[rowIdx][colIdx] !== '') {
                          return;
                      }
                      newSquares[rowIdx][colIdx] = times % 2 === 0 ? 'X' : 'O';
                      setSquares(newSquares);
                      setTimes(times + 1);

                    }
                  }>{col}</div>
                </td>
              }
            )
          }
        </tr>
      })}

    </table>
  </div>
}

1.布局

基于table實(shí)現(xiàn),3行,3列。

2.表格元素點(diǎn)擊

更新cell內(nèi)容,更新次數(shù)。

     const newSquares = [...squares];
     if (newSquares[rowIdx][colIdx] !== '') {
         return;
     }
     newSquares[rowIdx][colIdx] = times % 2 === 0 ? 'X' : 'O';
     setSquares(newSquares);
     setTimes(times + 1);

3.判斷游戲是否結(jié)束

判斷每行,每列,斜線是否相等。

 useEffect(()=>{
      // 判斷每行是否相同
      for (let i = 0; i < 3; i++) {
        if (squares[i][0] === squares[i][1] && squares[i][1] === squares[i][2] && squares[i][0] !== '') {
          alert(squares[i][0] + ' win');
          setTimes(0)
          setSquares(initialState)
          return;
        }
      }
      // 判斷每列是否相同
      for (let i = 0; i < 3; i++) {
        if (squares[0][i] === squares[1][i] && squares[1][i] === squares[2][i] && squares[0][i] !== '') {
          alert(squares[0][i] + ' win')
          setTimes(0)
          setSquares(initialState)
          return;
        }
      }
      // 判斷對(duì)角線是否相同
      if (squares[0][0] === squares[1][1] && squares[1][1] === squares[2][2] && squares[0][0] !== '') {
        alert(squares[0][0] + ' win');
        setTimes(0)
        setSquares(initialState)
        return;
      }
      if (squares[0][2] === squares[1][1] && squares[1][1] === squares[2][0] && squares[0][2] !== ''){
        alert(squares[0][2] + ' win');
        setTimes(0)
        setSquares(initialState)
        return;
      }


  },[times])

到此這篇關(guān)于React 實(shí)現(xiàn)井字棋的文章就介紹到這了,更多相關(guān)React 井字棋內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

相關(guān)文章

  • 一文帶你搞懂useCallback的使用方法

    一文帶你搞懂useCallback的使用方法

    useCallback是用來幫忙緩存函數(shù)的,當(dāng)依賴項(xiàng)沒有發(fā)生變化時(shí),返回緩存的指針,而props涉及到復(fù)雜對(duì)象類型都是通過指針來傳遞到,下面這篇文章主要給大家介紹了關(guān)于useCallback使用的相關(guān)資料,需要的朋友可以參考下
    2023-02-02
  • 示例詳解react中useState的用法

    示例詳解react中useState的用法

    useState 通過在函數(shù)組件里調(diào)用它來給組件添加一些內(nèi)部 state,React 會(huì)在重復(fù)渲染時(shí)保留這個(gè) state,接下來通過一個(gè)示例來看看怎么使用 useState吧
    2021-06-06
  • React虛擬渲染實(shí)現(xiàn)50個(gè)或者一百個(gè)圖表渲染

    React虛擬渲染實(shí)現(xiàn)50個(gè)或者一百個(gè)圖表渲染

    這篇文章主要為大家介紹了React虛擬渲染實(shí)現(xiàn)50個(gè)或者100個(gè)圖表渲染的實(shí)現(xiàn),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • 基于React.js實(shí)現(xiàn)簡單的文字跑馬燈效果

    基于React.js實(shí)現(xiàn)簡單的文字跑馬燈效果

    剛好手上有一個(gè)要實(shí)現(xiàn)文字跑馬燈的react項(xiàng)目,然后ant-design上面沒有這個(gè)組件,于是只能自己手?jǐn)]一個(gè),文中的實(shí)現(xiàn)方法講解詳細(xì),希望對(duì)大家有所幫助
    2023-01-01
  • React搭配TypeScript使用教程及實(shí)戰(zhàn)案例

    React搭配TypeScript使用教程及實(shí)戰(zhàn)案例

    本文主要介紹了React搭配TypeScript使用教程及實(shí)戰(zhàn)案例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2026-02-02
  • 深入理解React Native原生模塊與JS模塊通信的幾種方式

    深入理解React Native原生模塊與JS模塊通信的幾種方式

    本篇文章主要介紹了深入理解React Native原生模塊與JS模塊通信的幾種方式,具有一定的參考價(jià)值,有興趣的可以了解一下
    2017-07-07
  • React?Immutable使用方法詳細(xì)介紹

    React?Immutable使用方法詳細(xì)介紹

    Immutable.js出自Facebook,是最流行的不可變數(shù)據(jù)結(jié)構(gòu)的實(shí)現(xiàn)之一。它實(shí)現(xiàn)了完全的持久化數(shù)據(jù)結(jié)構(gòu),使用結(jié)構(gòu)共享。所有的更新操作都會(huì)返回新的值,但是在內(nèi)部結(jié)構(gòu)是共享的,來減少內(nèi)存占用
    2022-09-09
  • React為什么需要Scheduler調(diào)度器原理詳解

    React為什么需要Scheduler調(diào)度器原理詳解

    這篇文章主要為大家介紹了React為什么需要Scheduler調(diào)度器原理詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-10-10
  • react合成事件與原生事件的相關(guān)理解

    react合成事件與原生事件的相關(guān)理解

    本文主要介紹了react合成事件與原生事件的相關(guān)概念,幫助大家區(qū)分這兩種事件,學(xué)習(xí)react的同學(xué)不妨了解下
    2021-05-05
  • react中的useImperativeHandle()和forwardRef()用法

    react中的useImperativeHandle()和forwardRef()用法

    這篇文章主要介紹了react中的useImperativeHandle()和forwardRef()用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-08-08

最新評(píng)論

金湖县| 新安县| 道真| 临桂县| 额尔古纳市| 包头市| 张家港市| 梁山县| 连江县| 军事| 南乐县| 青龙| 金乡县| 固安县| 洪雅县| 宁陵县| 德保县| 乐至县| 梨树县| 芦溪县| 黑山县| 邢台县| 伊金霍洛旗| 万荣县| 宁明县| 秀山| 海林市| 射阳县| 阜阳市| 祥云县| 阜平县| 盐池县| 工布江达县| 金山区| 电白县| 柳州市| 东宁县| 晋州市| 临城县| 镇远县| 鄂托克前旗|