0

0

如何在 React 中实现国际象棋风格的双色网格(奇偶行列匹配配色)

花韻仙語

花韻仙語

发布时间:2026-02-23 10:00:03

|

943人浏览过

|

来源于php中文网

原创

如何在 react 中实现国际象棋风格的双色网格(奇偶行列匹配配色)

本文详解如何在 React 中构建符合国际象棋棋盘逻辑的 19×19 双色网格——通过行列索引奇偶性一致判断实现黑白格交替,修正常见配色错误,并优化渲染结构与可维护性。

本文详解如何在 React 中构建符合国际象棋棋盘逻辑的 19×19 双色网格——通过行列索引奇偶性一致判断实现黑白格交替,修正常见配色错误,并优化渲染结构与可维护性。

在 React 中实现标准棋盘(如国际象棋或围棋用的 19×19 网格)时,关键在于颜色分布的数学逻辑:理想棋盘要求每个格子的颜色由其 (row, col) 坐标决定,且满足「当 row % 2 === col % 2 时为一种颜色(如浅色),否则为另一种颜色(如深色)」。这能确保对角相邻格同色、正交相邻格异色,形成经典“交错方格”效果。

你原始代码中的条件:

row % 2 === 1 || col % 2 === 1 ? "red" : "green"

会导致超过 75% 的格子被判定为 "red"(只要行或列为奇数即触发),破坏棋盘对称性。正确逻辑应是行列奇偶性一致

智标领航
智标领航

专注招投标业务流程的AI助手,智能、高效、精准、易用!

下载

✅ 正确判断方式:

const colorClassName = row % 2 === col % 2 ? "light-cell" : "dark-cell";

此外,使用单层循环 + Math.floor(i / 19) 和 i % 19 计算坐标虽可行,但易出错、可读性差。推荐改用嵌套循环,语义清晰、索引直观、便于后续扩展(如添加棋子状态、坐标校验等):

✅ 推荐实现(结构清晰 + 语义化类名)

import React, { useState, useEffect } from 'react';

function Board() {
  const [gridCells, setGridCells] = useState([]);

  const handleClick = (position) => {
    console.log("Cell clicked:", position); // e.g., "5_8"
  };

  useEffect(() => {
    const size = 19;
    const cells = [];

    for (let row = 0; row < size; row++) {
      for (let col = 0; col < size; col++) {
        const isLight = row % 2 === col % 2;
        const className = `grid-cell ${isLight ? 'light-cell' : 'dark-cell'}`;
        const id = `${row}_${col}`;

        cells.push(
          <div
            key={id}
            id={id}
            className={className}
            data-row={row}
            data-col={col}
            onClick={() => handleClick(id)}
          />
        );
      }
    }

    setGridCells(cells);
  }, []);

  return (
    <div id="GridContainer" className="chess-grid">
      {gridCells}
    </div>
  );
}

export default Board;

? CSS 样式建议(配合逻辑)

.chess-grid {
  display: grid;
  grid-template-columns: repeat(19, 1fr);
  gap: 0;
  width: fit-content;
  border: 2px solid #333;
}

.grid-cell {
  width: 24px;
  height: 24px;
  box-sizing: border-box;
}

.light-cell {
  background-color: #f0f0f0; /* 浅灰,对应白格 */
}

.dark-cell {
  background-color: #4a4a4a; /* 深灰,对应黑格 */
}

⚠️ 注意事项与进阶提示

  • 性能考量:19×19=361 个 DOM 节点属于轻量级,useEffect 初始化完全可行;若未来需动态重绘(如落子动画),建议用 React.memo 包裹单元格组件或采用虚拟滚动。
  • 可访问性:为
    添加 role="gridcell"、aria-label(如 "White square at row 3, column 4")可提升屏幕阅读器支持。
  • 棋子逻辑延伸:题目中提到 Black-queen 仅能在 row % 2 === 0 && col % 2 === 0(即 light-cell)移动,White-queen 限于 row % 2 === 1 && col % 2 === 1 —— 这些约束可在 handleClick 中结合 data-row/data-col 实时校验,无需修改网格渲染逻辑。
  • 避免内联样式污染:始终优先使用 CSS 类控制视觉,而非 style={{ backgroundColor }},利于主题切换与维护。
  • 掌握这一「行列奇偶一致性」配色原理,不仅适用于棋盘,也广泛用于数据表格斑马纹、响应式布局分组等场景——本质是二维坐标空间的模运算建模能力。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
DOM是什么意思
DOM是什么意思

dom的英文全称是documentobjectmodel,表示文件对象模型,是w3c组织推荐的处理可扩展置标语言的标准编程接口;dom是html文档的内存中对象表示,它提供了使用javascript与网页交互的方式。想了解更多的相关内容,可以阅读本专题下面的文章。

3878

2024.08.14

pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法

本专题系统整理pixiv网页版官网入口及登录访问方式,涵盖官网登录页面直达路径、在线阅读入口及快速进入方法说明,帮助用户高效找到pixiv官方网站,实现便捷、安全的网页端浏览与账号登录体验。

1030

2026.02.13

微博网页版主页入口与登录指南_官方网页端快速访问方法
微博网页版主页入口与登录指南_官方网页端快速访问方法

本专题系统整理微博网页版官方入口及网页端登录方式,涵盖首页直达地址、账号登录流程与常见访问问题说明,帮助用户快速找到微博官网主页,实现便捷、安全的网页端登录与内容浏览体验。

324

2026.02.13

Flutter跨平台开发与状态管理实战
Flutter跨平台开发与状态管理实战

本专题围绕Flutter框架展开,系统讲解跨平台UI构建原理与状态管理方案。内容涵盖Widget生命周期、路由管理、Provider与Bloc状态管理模式、网络请求封装及性能优化技巧。通过实战项目演示,帮助开发者构建流畅、可维护的跨平台移动应用。

213

2026.02.13

TypeScript工程化开发与Vite构建优化实践
TypeScript工程化开发与Vite构建优化实践

本专题面向前端开发者,深入讲解 TypeScript 类型系统与大型项目结构设计方法,并结合 Vite 构建工具优化前端工程化流程。内容包括模块化设计、类型声明管理、代码分割、热更新原理以及构建性能调优。通过完整项目示例,帮助开发者提升代码可维护性与开发效率。

34

2026.02.13

Redis高可用架构与分布式缓存实战
Redis高可用架构与分布式缓存实战

本专题围绕 Redis 在高并发系统中的应用展开,系统讲解主从复制、哨兵机制、Cluster 集群模式及数据分片原理。内容涵盖缓存穿透与雪崩解决方案、分布式锁实现、热点数据优化及持久化策略。通过真实业务场景演示,帮助开发者构建高可用、可扩展的分布式缓存系统。

111

2026.02.13

c语言 数据类型
c语言 数据类型

本专题整合了c语言数据类型相关内容,阅读专题下面的文章了解更多详细内容。

77

2026.02.12

雨课堂网页版登录入口与使用指南_官方在线教学平台访问方法
雨课堂网页版登录入口与使用指南_官方在线教学平台访问方法

本专题系统整理雨课堂网页版官方入口及在线登录方式,涵盖账号登录流程、官方直连入口及平台访问方法说明,帮助师生用户快速进入雨课堂在线教学平台,实现便捷、高效的课程学习与教学管理体验。

17

2026.02.12

豆包AI网页版入口与智能创作指南_官方在线写作与图片生成使用方法
豆包AI网页版入口与智能创作指南_官方在线写作与图片生成使用方法

本专题汇总豆包AI官方网页版入口及在线使用方式,涵盖智能写作工具、图片生成体验入口和官网登录方法,帮助用户快速直达豆包AI平台,高效完成文本创作与AI生图任务,实现便捷智能创作体验。

808

2026.02.12

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
React 教程
React 教程

共58课时 | 5.4万人学习

国外Web开发全栈课程全集
国外Web开发全栈课程全集

共12课时 | 1万人学习

React核心原理新老生命周期精讲
React核心原理新老生命周期精讲

共12课时 | 1.1万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号