讲师中心 微信公众号
AI工具推荐 视频效率加速

如何修复 Connect 4 游戏中水平连子计数失效的问题?

大婷大大_4788

大婷大大_4788

发布时间:2026-07-18 11:49:03

|

325人浏览过

|

来源于php中文网

原创

如何修复 Connect 4 游戏中水平连子计数失效的问题?

你的 Connect 4 实现中 checkWin 方法因行列索引传参顺序错误,导致水平方向(左/右)连子数量始终为 0,无法正确检测四连胜。核心问题是将「列索引」误作「行索引」传入,致使数组访问越界或读取错误位置。

你的 connect 4 实现中 `checkwin` 方法因行列索引传参顺序错误,导致水平方向(左/右)连子数量始终为 0,无法正确检测四连胜。核心问题是将「列索引」误作「行索引」传入,致使数组访问越界或读取错误位置。

在你当前的代码中,play() 方法在落子后调用 checkWin(gb, "1", p1choice, yIndex) —— 这里 p1choice 是玩家输入的列号(widthIndex),而 yIndex 是该列中实际落子的行号(heightIndex)。但 checkWin 方法签名却定义为:

public static void checkWin(String[][] gb, String p, int heightIndex, int widthIndex)

⚠️ 这导致参数被颠倒使用:方法内部将 heightIndex 当作列、widthIndex 当作行来访问二维数组 gb[heightIndex][widthIndex],而 Java 中二维数组约定是 gb[row][col](即 gb[i][j] 中 i 为行、j 为列)。因此,gb[heightIndex][widthIndex] 实际访问的是 gb[列][行],严重违背内存布局,造成:

  • 水平检查(左右遍历)始终在错误的“行”上操作(实为列),结果恒为 _ 或越界;
  • horizontalLeft 和 horizontalRight 始终为 0,无法累加;
  • 即使视觉上出现横连四子,逻辑也完全无法识别。

✅ 正确做法是统一索引语义并修正参数顺序:

  1. 修改 checkWin 方法签名,明确参数含义:

    public static void checkWin(String[][] gb, String p, int colIndex, int rowIndex) {
        // colIndex: 落子列(0~6),rowIndex: 落子行(0~6)
    }
  2. 同步更新所有调用处(play 方法内):

    checkWin(gb, "1", p1choice, yIndex);   // ✅ now: (col, row)
    checkWin(gb, "2", p2choice, yIndexP2); // ✅ now: (col, row)
  3. 重写检查逻辑,确保边界安全(推荐优化版):

    public static void checkWin(String[][] gb, String p, int colIndex, int rowIndex) {
        // 水平方向:向左 + 向右
        int horizontal = 1; // 自身计1
        // 向左
        for (int c = colIndex - 1; c >= 0 && gb[rowIndex][c].equals(p); c--) {
            horizontal++;
        }
        // 向右
        for (int c = colIndex + 1; c < gb[0].length && gb[rowIndex][c].equals(p); c++) {
            horizontal++;
        }
    
        // 垂直、对角线同理(此处略,原理一致)
        if (horizontal >= 4) {
            System.out.println("Game over. Player " + p + " wins!");
            System.exit(0); // 或设标志终止游戏循环
        }
    }

? 额外注意事项:

  • 你的棋盘是 String[7][7],但 Connect 4 标准为 6 行 × 7 列。当前 i=6 落子时会访问 gb[6][j]——这是第 7 行(索引从 0 开始),超出标准范围,易引发 ArrayIndexOutOfBoundsException。建议改为 String[6][7],并调整下落逻辑:初始 i = 5,循环条件 i >= 0。
  • play() 中 do-while(!cont) 的 cont 始终为 true,导致无限循环。应通过 checkWin 返回胜利状态或设置全局 gameOver 标志控制主循环。
  • 使用 equals() 替代 == 比较字符串内容(虽此处值为 "1"/"2" 字符串常量,但属良好实践)。

修复索引顺序后,水平连子检测将立即生效,游戏逻辑回归预期行为。这是初学者在二维数组坐标映射中最常见也最关键的陷阱之一——务必牢记:array[row][col] ≠ array[y][x] 在图形坐标系中需主动转换,而非默认等价。

在线游戏
在线游戏

海量精品小游戏合集,无需安装即点即玩,休闲益智、动作闯关应有尽有,秒开即玩,轻松解压,快乐停不下来

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
火山引擎

火山引擎是一款面向企业的云计算与AI服务平台。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

切问学术

切问学术是一款AI论文写作工具,复旦大学NLP团队推出的AI学术智能体。

音述AI
音述AI Hot

一款AI音频处理工具,主要用于音述AI是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

墨刀AI
墨刀AI Hot

一款AI图像与设计工具,主要用于产品经理的专属智能体,适合需要提升相关任务效率的用户。

UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

Seko
Seko Hot

一款AI视频创作工具,主要用于商汤科技推出的创编一体的AI短视频创作Agent,适合需要提升相关任务效率的用户。

相关专题

更多
Gradle插件开发入门教程
Gradle插件开发入门教程

本专题介绍Gradle插件开发的基本流程,涵盖插件类编写、自定义任务注册、扩展参数设计和插件应用方法,帮助你理解插件如何组织构建逻辑,减少多个项目之间的重复配置。

0

2026.10.22

Gradle Wrapper配置教程
Gradle Wrapper配置教程

本专题介绍Gradle Wrapper的基本作用,涵盖文件组成、生成方法、版本配置和任务调用,帮助你理解项目如何使用指定的Gradle版本,减少不同开发环境带来的构建差异。

0

2026.10.22

Golangci-lint检查器使用教程
Golangci-lint检查器使用教程

本专题整理Golangci-lint常用Linters的用途与配置方法,覆盖错误处理、无效代码、安全、复杂度、命名和依赖检查,帮助项目合理选规则。

0

2026.10.22

Gradle怎么构建Java项目
Gradle怎么构建Java项目

本专题介绍Gradle Java项目构建方法,涵盖Java插件配置、依赖声明、源码编译、测试执行和打包检查,帮助你理解各阶段的任务关系,逐步完成项目构建。

0

2026.10.22

PHP时间戳漏洞修复教程
PHP时间戳漏洞修复教程

本专题汇总PHP常见时间戳漏洞,包括2038年溢出、时区漂移、时间戳伪造、重放攻击、时间盲注与日志审计失效等,并给出升级64位环境、使用 DateTimeImmutable、统一UTC、严格超时校验、预处理绑定、hash_equals 比对等修复方案,帮助开发者快速排查和加固时间相关代码。

0

2026.10.22

Golangci-lint配置文件与规则设置
Golangci-lint配置文件与规则设置

本专题聚焦Golangci-lint YAML配置文件,讲清运行参数、规则启停、目录排除、问题过滤及严重级别设置,便于团队统一检查标准。

0

2026.10.22

Golangci-lint安装与入门教程
Golangci-lint安装与入门教程

本专题讲解Golangci-lint的安装、初始化、基础命令和首次代码检查,覆盖本地环境、Docker及多平台用法,帮助Go开发者快速上手。

0

2026.10.22

PHP2Shell高危漏洞修复教程
PHP2Shell高危漏洞修复教程

PHP2Shell漏洞是什么,哪些PHP版本和运行环境会受到影响,服务器应该如何检测与修复?本专题提供版本自查脚本、Linux与Docker升级命令、PHP-FPM和Apache排查步骤,以及修复验证、临时缓解和应急响应方案。

40

2026.10.22

剧云人物设定与关系管理教程
剧云人物设定与关系管理教程

本专题介绍剧云人物设定与关系管理,讲解角色小传、性格职业、人物目标、背景资料和关系网络的创建及维护方法。

0

2026.10.22

热门下载

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

精品课程

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

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn