当前位置: 首页 > news >正文

基于React 实现井字棋

一、简介

      这篇文章会基于React 实现井字棋小游戏功能。

二、效果演示

三、技术实现


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;}}// 判断对角线是否相同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实现,3行,3列。

2.表格元素点击

更新cell内容,更新次数。

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

3.判断游戏是否结束

判断每行,每列,斜线是否相等。

 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;}}// 判断对角线是否相同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])

http://www.lryc.cn/news/395332.html

相关文章:

  • 文件的换行符,Windows 的 CRLF 和 Linux 的 LF
  • 怎样优化 PostgreSQL 中对日期时间范围的模糊查询?
  • B端设计:任何不顾及用户体验的设计,都是在装样子,花架子
  • React@16.x(51)路由v5.x(16)- 手动实现文件目录参考
  • 从零开始读RocketMq源码(二)Message的发送详解
  • 怎样优化 PostgreSQL 中对布尔类型数据的查询?
  • mysql在linux系统下重置root密码
  • 设计模式探索:观察者模式
  • Perl语言入门到高级学习
  • DOM 基本操作 - 获取元素
  • Google 搜索引擎:便捷高效、精准查询,带来无与伦比的搜索体验
  • tomcat的介绍与优化
  • Python 插入、替换、提取、或删除Excel中的图片
  • 紧凑型建模的veriloga语句要怎么看?
  • 大语言模型系列-Transformer介绍
  • JavaDS —— 顺序表ArrayList
  • Sphinx 搜索配置
  • 如何在不关闭防火墙的情况下,让两台设备ping通
  • windows USB 设备驱动开发-USB 等时传输
  • 【文件共享 windows和linux】Windows Server 2016上开启文件夹共享,并在CentOS 7.4上访问和下载文件
  • 【知网CNKI-注册安全分析报告】
  • 【Python_GUI】tkinter常用组件——文本类组件
  • zdppy+onlyoffice+vue3解决文档加载和文档强制保存时弹出警告的问题
  • C语言从头学31——与字符串变量相关的几个函数
  • Laravel批量插入数据:提升数据库操作效率的秘诀
  • OpenCV:解锁计算机视觉的魔法钥匙
  • 手写简单模拟mvc
  • 【FreeRTOS】同步互斥与通信 FreeRTOS提供的方法
  • Kafka 面试题指南
  • 2024年7月5日 (周五) 叶子游戏新闻