0

0

如何在Java中实现控制台五子棋游戏_二维数组棋盘绘制与输赢算法判断

P粉602998670

P粉602998670

发布时间:2026-03-11 13:33:39

|

970人浏览过

|

来源于php中文网

原创

棋盘用char[][]初始化为'.',落子直接写'x'或'o';输赢判断只在落子点用方向数组双向统计四向连子数≥5即胜;输入用hasnextint()校验并清缓冲区;平局判无空位且未分胜负。

如何在java中实现控制台五子棋游戏_二维数组棋盘绘制与输赢算法判断

char[][] 画棋盘,别用 int[][] 存状态

控制台五子棋的棋盘本质是“显示+逻辑”分离,但初学者常把状态和字符混在一起——比如用 0/1/2 存空位、黑子、白子,再手动映射成 '.''X''O' 去打印。这会让输赢判断和绘制耦合,改一个地方漏一个地方。

更直接的做法是:棋盘只用 char[][],初始化全填 '.',落子时直接写 'X''O'。打印时逐行输出,不用额外转换。

  • char[][] board = new char[15][15]; 初始化后必须用双循环赋值 board[i][j] = '.';,否则全是 \u0000(打印成空白或乱码)
  • 下标从 0 开始,但用户输入习惯是 1~15,读入后立刻减 1,别在判断逻辑里反复加减
  • 打印时每行末尾加 \n,列之间加空格(如 System.out.print(board[i][j] + " ");),否则棋盘挤成一团

判断五连用方向数组,别写八个 if

检测某位置是否形成五子,本质是检查上下、左右、两对角线共四个方向,每个方向延伸出连续相同棋子的长度。硬写八段逻辑(上/下/左/右/左上/右下/右上/左下)极易出错,且重复代码多。

用两个 int[] 表示方向偏移更稳:

立即学习Java免费学习笔记(深入)”;

int[] dx = {-1, 0, 1, 1}; // 上、右、下、右下
int[] dy = {0, 1, 0, 1}; // 对应的列偏移

对每个方向,从落子点出发,分别往正反两个方向数同色棋子个数,加起来+1就是该方向总长。只要任一方向 ≥5 就赢。

蛙蛙写作——超级AI智能写作助手
蛙蛙写作——超级AI智能写作助手

蛙蛙写作辅助AI写文,帮助获取创意灵感,提供拆书、小说转剧本、视频生成等功能,是一款功能全面的AI智能写作工具。

下载
  • 必须检查边界:每次 x + dx[i]y + dy[i] 都要 >= 0 && ,否则 <code>ArrayIndexOutOfBoundsException
  • 不能只数“单向”,比如只往右数3个,往左数1个,实际是4连;必须双向统计再求和
  • 只在刚落子的位置触发判断,不需要遍历全盘——性能差且可能误判(比如对方刚下完你没赢,你下完才检)

Scanner 读坐标时,hasNextInt()nextInt() 安全

用户输入 "3 a" 或直接回车,nextInt() 会卡住或抛异常,导致程序崩溃或进入奇怪状态。这不是输赢逻辑问题,但会让整个游戏无法持续交互。

正确做法是先用 hasNextInt() 探路,不匹配就清掉错误输入:

if (scanner.hasNextInt()) {
    row = scanner.nextInt() - 1;
} else {
    scanner.next(); // 丢弃非法输入
    System.out.println("请输入数字!");
    continue;
}
  • 每次读完一行后调用 scanner.nextLine() 清缓冲区,否则混合 nextInt()nextLine() 会导致跳过输入
  • 输入范围校验要放在解析之后:确认 rowcol 都在 0~14 内,且对应位置是 '.'
  • 别用 try-catch 包裹 nextInt() 来处理错误——掩盖了输入流状态混乱的本质问题

平局判断不是“棋盘满了”,而是“无空位且无人胜”

15×15 共 225 个点,但实战中极少下满——通常一方早早就赢了。如果只靠计数器到 225 判平局,会忽略“提前终局”的情况,也可能因计数失误(比如覆盖落子没减计数)导致逻辑错乱。

稳妥方式是:每次落子后,检查当前棋盘是否存在 '.'。没有空位 刚才没人获胜,才算平局。

  • 不要遍历全盘查 '.'——太慢。维护一个 int emptyCount,初始化为 225,每次成功落子后减 1
  • 1 的时机必须严格:只在落子有效、未获胜、未重复落子时才减;撤销操作(如有)要加回
  • 平局检测必须放在输赢判断之后,否则可能“赢了还报平局”

边界情况比想象中多:比如用户输错两次坐标,emptyCount 没变,但程序状态已乱;或者某次输入触发了异常退出,计数器没同步。这类细节不显眼,但一出问题就难定位。

热门AI工具

更多
DeepSeek
DeepSeek

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

豆包大模型
豆包大模型

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

通义千问
通义千问

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

腾讯元宝
腾讯元宝

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

文心一言
文心一言

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

讯飞写作
讯飞写作

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

即梦AI
即梦AI

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

ChatGPT
ChatGPT

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

相关专题

更多
python中print函数的用法
python中print函数的用法

python中print函数的语法是“print(value1, value2, ..., sep=' ', end=' ', file=sys.stdout, flush=False)”。本专题为大家提供print相关的文章、下载、课程内容,供大家免费下载体验。

192

2023.09.27

python print用法与作用
python print用法与作用

本专题整合了python print的用法、作用、函数功能相关内容,阅读专题下面的文章了解更多详细教程。

18

2026.02.03

if什么意思
if什么意思

if的意思是“如果”的条件。它是一个用于引导条件语句的关键词,用于根据特定条件的真假情况来执行不同的代码块。本专题提供if什么意思的相关文章,供大家免费阅读。

846

2023.08.22

string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

1010

2023.08.02

int占多少字节
int占多少字节

int占4个字节,意味着一个int变量可以存储范围在-2,147,483,648到2,147,483,647之间的整数值,在某些情况下也可能是2个字节或8个字节,int是一种常用的数据类型,用于表示整数,需要根据具体情况选择合适的数据类型,以确保程序的正确性和性能。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

610

2024.08.29

c++怎么把double转成int
c++怎么把double转成int

本专题整合了 c++ double相关教程,阅读专题下面的文章了解更多详细内容。

334

2025.08.29

C++中int的含义
C++中int的含义

本专题整合了C++中int相关内容,阅读专题下面的文章了解更多详细内容。

235

2025.08.29

页面置换算法
页面置换算法

页面置换算法是操作系统中用来决定在内存中哪些页面应该被换出以便为新的页面提供空间的算法。本专题为大家提供页面置换算法的相关文章,大家可以免费体验。

494

2023.08.14

C# ASP.NET Core微服务架构与API网关实践
C# ASP.NET Core微服务架构与API网关实践

本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

3

2026.03.11

热门下载

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

精品课程

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

共23课时 | 4.3万人学习

C# 教程
C# 教程

共94课时 | 11.1万人学习

Java 教程
Java 教程

共578课时 | 80.5万人学习

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

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