围棋-html版本

一、界面布局 软件采用左右两栏布局,左侧为棋盘及信息区,右侧为垂直排列的功能按钮,整体风格古典雅致。

  • 棋盘区:19×19 标准棋盘,采用立体感棋子、木质底色,并带有星标(天元、小目等)。棋盘支持点击落子,并有落点偏离提示。
  • 计时器:上方显示黑方(⚫)与白方(⚪)的剩余时间,默认每方 30 分钟(可修改源码中的 INIT_TIME 常量)。当前行棋方的计时器会有高亮边框。
  • 统计栏:下方显示黑方提子数、白方提子数以及当前落子手数。
  • 按钮组:右侧竖向排列八个功能按钮,涵盖对局控制、棋谱管理、界面个性化等。

二、核心对局功能 1. 落子规则

  • 点击棋盘交叉点即可落子,程序自动检测该位置是否为空。
  • 提子:落子后自动移除被包围且无气的敌方棋子,并累加提子计数。
  • 禁着点检测:
    • 自杀禁止:落子后若己方棋子无气则判为非法。
    • 劫争检测:禁止立即重复上一回合的全局局面(即"劫")。
  • 落子合法后,切换玩家并启动对应方计时器。

2. 虚一手(Pass) 点击"虚一手"按钮表示当前玩家放弃落子,轮由对方行棋。虚手也会记录在历史中,便于连续虚手后的协商终局。3. 悔棋 点击"悔棋"可逐步回退至上一手棋前的状态(包括提子数、手数、计时器均回退)。程序内部维护完整的历史栈,确保悔棋逻辑准确。4. 认输 点击"认输"立即结束对局,弹出胜负提示,计时停止,棋盘锁定。5. 新局 重置所有状态:棋盘清空、计时重置为 30 分钟、提子与手数归零、历史清空,并由黑方先手开始计时。

三、计时规则

  • 采用倒计时制,每方独立计时,当前行棋方计时递减。
  • 计时器每秒更新一次,时间耗尽时自动判负(超时方输)。
  • 切换玩家时计时器自动切换,游戏结束后计时停止。

四、棋谱管理
1. 导出棋谱 点击"导出棋谱"可将当前对局的落子序列保存为 JSON 文件。文件格式如下:

json复制下载{ "format": "qingstone-go", "boardSize": 19, "moves": { "color": "B", "row": 3, "col": 16 }, { "color": "W", "pass": true }, ... }每步棋记录颜色(B/W)、坐标(row, col)或虚手(pass: true)。文件名自动包含时间戳。
2. 导入棋谱 点击"导入棋谱"选择本地 JSON 文件,程序会按顺序自动落子,并实时校验每一步的合法性(如颜色顺序、禁着点等)。若棋谱非法,会提示错误并重置棋盘。


五、个性化设置
1. 棋盘颜色 点击"棋盘颜色"按钮,通过颜色选择器修改棋盘底色。线条与星标的颜色会根据底色自动加深(保持视觉对比度),实现一键换肤。
2. 背景颜色 点击"背景颜色"按钮可修改页面背景的径向渐变主色,程序自动生成对应的深色渐变,营造不同的对局氛围。


六、技术特色

  • 纯前端实现:HTML + CSS + JavaScript,无任何外部依赖,可离线运行。

  • 精确的围棋规则:实现了连通块气数计算、提子、劫争、自杀检测等核心算法。

  • 历史与动作双记录:既支持悔棋所需的完整状态快照(history),也保留了轻量的动作序列(moveHistory)用于导入导出。

  • 视觉细节:棋子使用径向渐变模拟立体感,棋盘线条粗细适中,点击时有轻微反馈(亮度变化)。

  • 响应式布局:棋盘尺寸基于 Canvas 固定 900×900 像素,但通过 CSS 限制最大宽度,在不同屏幕下均可正常显示。

    围棋 · 清石
    30:00
    30:00
    0
    0
    👆0
    复制代码
          <div class="button-group-vertical">
              <button class="go-button" id="passBtn">虚一手</button>
              <button class="go-button" id="undoBtn">悔棋</button>
              <button class="go-button" id="resetBtn">新局</button>
              <button class="go-button" id="resignBtn">认输</button>
              <button class="go-button" id="exportBtn">导出棋谱</button>
              <button class="go-button" id="importBtn">导入棋谱</button>
              <!-- 新增两个自定义颜色按钮 -->
              <button class="go-button" id="boardColorBtn">棋盘颜色</button>
              <button class="go-button" id="bgColorBtn">背景颜色</button>
          </div>
      </div>
相关推荐
Rain50915 小时前
2.1 Nest.js 项目初始化与模块化架构
开发语言·前端·javascript·后端·架构·数据分析·node.js
cjp56015 小时前
009. ASP.NET WEB API 用户关联esp32设备
前端·后端·asp.net
Insseals15 小时前
因斯特浮动模块快速接头✨五大核心优势
前端
沐土Arvin15 小时前
港澳台行政区域json
前端
程序员鱼皮16 小时前
我花 300 块,让 Claude Fable 5 开发桌面 APP,值么?
前端
William_Xu16 小时前
JavaScript 并发控制
前端
拾年27516 小时前
从零手写 Ajax:用原生 XHR 搭建前后端交互全流程
前端·javascript·ajax
光影少年16 小时前
懒加载与分包:React.lazy + Suspense
前端·react.js·掘金·金石计划
小林ixn16 小时前
你以为你懂 + 号?看完这篇 Bun + TS 实战,才发现以前全写错了
前端·javascript·typescript
namexingyun16 小时前
开源前端生态如何成为 AI UI 生成的“燃料“:shadcn/ui、Tailwind CSS、Storybook 技术价值全解剖
java·前端·人工智能·python·ui·开源·ai编程