二维数组实现棋盘逻辑需明确尺寸、初始化、类型选择、落子校验、胜负判定和交互显示:用常量定义大小,双重循环初始化,int型存状态(0空/1黑/2白),输入转下标并边界与空位校验,胜负仅检查落子点四方向连五,打印时行列号从1起始。

用二维数组实现棋盘逻辑,核心是把棋盘看作一个坐标网格,每个格子用 [行][列] 定位,状态存得清、查得准、改得稳。
声明与初始化要明确尺寸和语义
Java 中二维数组是“数组的数组”,必须显式指定行列数。比如标准五子棋用 15×15 棋盘:
- 推荐写法:`private static final int BOARD_SIZE = 15;`,然后 `int[][] board = new int[BOARD_SIZE][BOARD_SIZE];` —— 统一常量,避免硬编码
- 初始化别依赖默认值:局部变量不自动初始化,务必用双重循环填 0(空位);若用字符数组,统一用 `'.'` 表示空位
-
类型选择有讲究:用
int(0=空,1=黑,2=白)比String或boolean更高效,比较和判胜都直白
落子操作必须做双重校验
用户输入的是“第几行第几列”(从 1 开始),但数组下标从 0 开始,中间这一步转换和检查不能省。
- 先转下标:
row = inputRow - 1;,col = inputCol - 1; - 再校验边界:
if (row = board.length || col = board[0].length) - 最后查是否为空:
if (board[row][col] != 0),否则提示“此处已有子” - 输入解析建议用
nextLine().trim().split("[,\s]+"),兼容逗号、空格、制表符,再转整数并捕获NumberFormatException
胜负判定要聚焦落子点、覆盖四方向
每次只检查刚落子的位置是否引发连五,不是遍历全盘——效率高且不易漏判。
- 定义四个方向向量:
int[][] dirs = {{0,1}, {1,0}, {1,1}, {1,-1}};(横、竖、主对角、副对角) - 对每个方向,从落子点向正反两个方向延伸计数,比如横向就往左扫 + 往右扫,同色连续数加起来 +1 ≥ 5 即胜
- 每次访问前必须越界检查:
int nx = row + i * dx, ny = col + i * dy;,再判断nx和ny是否合法 - 只统计等于当前玩家标记的格子,遇到 0 或对方颜色立即停止
打印与交互要兼顾用户习惯和调试需求
控制台输出既要让用户看得懂,也要方便你快速定位问题。
- 显示时行列号从 1 开始(如 “第3行第4列”),内部运算始终用 0 起始下标
- 打印棋盘用嵌套 for 循环,逐行输出;可用 Unicode 字符(如 ★、☆)或数字/字母区分棋子
- 调试时在关键位置加日志:
System.out.println("placing at [" + row + "][" + col + "]"); - 每次落子后立刻调用胜负检查,确认后立即终止游戏,避免重复判定或双方同时“赢”
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











