React 实现五子棋人机对战小游戏

项目简介

本项目是一个基于 React + Vite + TailwindCSS 实现的五子棋人机对战小游戏,支持多种难度选择,界面美观,体验流畅。适合用于前端技术展示、算法教学、休闲娱乐等多种场景。

项目亮点

  • 三种难度:支持"易"、"中"、"难"三种 AI 难度,适合不同水平玩家。
  • 自适应棋盘:棋盘大小随难度自动调整,最高支持 20×20。
  • 极简美观 UI:采用 TailwindCSS,界面现代、响应式,棋子高光与阴影细腻。
  • 无依赖后端:纯前端实现,开箱即用。
  • AI 算法:内置启发式评分与邻域搜索,AI 具备一定挑战性。

适用场景

  • 前端项目作品集/简历展示
  • 算法与人工智能入门教学
  • 休闲娱乐小游戏
  • 代码重构与性能优化练习

核心代码分析

1. 棋盘与状态管理

  • 棋盘数据结构为二维数组,EMPTY=0,PLAYER=1,AI=2。

  • 通过 useState 管理棋盘、当前回合、胜负状态等。

    const [board, setBoard] = useState(createEmptyBoard(15));
    const [playerTurn, setPlayerTurn] = useState(true);
    const [winner, setWinner] = useState(null);

2. 胜负判定

  • checkWin(board, x, y, who, size):判断某一方是否五连。

3. AI 核心算法

  • 难度切换 :通过 difficulty 状态切换不同评分表和策略。
  • 评分函数evaluatePoint 评估每个空位的进攻/防守价值。
  • 启发式搜索findBestScoreMove/findBestScoreMoveSimple 选出最优落子点。
  • 邻域搜索findNearPlayer 优先在玩家棋子周围落子,提升效率。

易评分

复制代码
function findBestScoreMoveSimple(board, size) {
  const scoreTable = [0, 1, 10, 100, 1000, 100000];
  let bestScore = -Infinity;
  let candidates = [];
  for (let y = 0; y < size; y++) {
    for (let x = 0; x < size; x++) {
      if (board[y][x] === EMPTY) {
        let score =
          evaluatePoint(board, x, y, AI, scoreTable, size) +
          evaluatePoint(board, x, y, PLAYER, scoreTable, size) * 0.7;
        score +=
          Math.floor(size / 2) -
          Math.abs(x - Math.floor(size / 2)) -
          Math.abs(y - Math.floor(size / 2));
        if (score > bestScore) {
          bestScore = score;
          candidates = [{ x, y }];
        } else if (score === bestScore) {
          candidates.push({ x, y });
        }
      }
    }
  }
  if (candidates.length > 0) {
    return { candidates };
  }
  return null;
}

难、中评分

复制代码
function findBestScoreMove(board, size) {
  const scoreTable = [0, 10, 100, 1000, 10000, 1000000];
  let bestScore = -Infinity;
  let candidates = [];
  for (let y = 0; y < size; y++) {
    for (let x = 0; x < size; x++) {
      if (board[y][x] === EMPTY) {
        let score =
          evaluatePoint(board, x, y, AI, scoreTable, size) +
          evaluatePoint(board, x, y, PLAYER, scoreTable, size) * 0.8;
        if (score > bestScore) {
          bestScore = score;
          candidates = [{ x, y }];
        } else if (score === bestScore) {
          candidates.push({ x, y });
        }
      }
    }
  }
  if (candidates.length > 0) {
    return { candidates };
  }
  return null;
}

4. UI 渲染

  • 棋盘采用 SVG 绘制线条,棋子用渐变和阴影模拟立体感。
  • 胜负弹窗、难度切换按钮均为响应式设计。

React 实现五子棋人机对战小游戏 - 高质量源码分享平台-免费下载各类网站源码与模板及前沿动态资讯

相关推荐
一个处女座的程序猿O(∩_∩)O5 分钟前
React 多组件状态管理:从组件状态到全局状态管理全面指南
前端·react.js·前端框架
鹏多多8 分钟前
用useTransition解决React性能卡顿问题+实战例子
前端·javascript·react.js
陈振wx:zchen200815 分钟前
前端-Node.js
node.js
只愿云淡风清18 分钟前
ECharts地图数据压缩-ZigZag算法
前端·javascript·echarts
亿元程序员25 分钟前
都2025年了,还有面试问A*寻路的???
前端
Moment26 分钟前
Node.js v25.0.0 发布——性能、Web 标准与安全性全面升级 🚀🚀🚀
前端·javascript·后端
杨超越luckly30 分钟前
HTML应用指南:利用POST请求获取中国一汽红旗门店位置信息
前端·arcgis·html·数据可视化·门店数据
专注前端30年35 分钟前
【JavaScript】every 方法的详解与实战
开发语言·前端·javascript
速易达网络37 分钟前
Java Web登录系统实现(不使用开发工具)
java·开发语言·前端
IT_陈寒40 分钟前
Vite 3.0 性能优化实战:5个技巧让你的构建速度提升200% 🚀
前端·人工智能·后端