m0_65749592 2024-06-14 18:00 采纳率: 35.5%
浏览 2
已结题

第一个图片这是检测相邻在一起的代码方法,第二个图片里面7*7矩阵

第一个图片这是检测相邻在一起的代码方法,第二个图片里面7*7矩阵,里面素材发光的就是代表中奖了,第二个图片里面的右上角中奖了发黄光的那个,然后还有一个wild万能素材参与了中奖因为万能是特殊素材可以变成普通素材,这个是没有问题的,但是我三个图片 ,万能素材没有参与连线 但是也是相邻在一起呀 帮我看看我代码什么问题 可以帮我改一下吗

img

img

img

  • 写回答

3条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-06-14 18:00
    关注

    引自免费微信小程序:皆我百晓生

    从描述来看,主要问题是关于如何正确识别万能素材(WILD)在匹配中参与的情况,尤其是在它不直接形成连线但仍然相邻于其他匹配素材时。根据提供的代码片段,似乎问题可能在于对万能素材的处理逻辑,特别是当它作为独立元素存在时。

    解析与修正

    代码分析

    checkAdjacentMaterial函数中,万能素材(值为1)被特别处理,以匹配其邻近的任何素材。然而,这仅在万能素材直接参与连接时有效。为了确保即使万能素材未直接参与连线也能被正确识别,我们需要调整逻辑,使其能够更全面地考虑所有相邻的万能素材。

    修改建议

    1. 修改条件判断:在检查相邻素材时,不仅需要考虑当前素材是否等于相邻素材,还需要检查相邻素材是否为万能素材。此外,对于万能素材,应该检查其周围是否有相同类型的素材,而不仅仅是直接相等的素材。

    2. 优化万能素材处理:当遇到万能素材时,不仅要更新currentArr,还要递归检查所有相邻素材,无论它们是否直接相等。

    代码修改示例

    以下是基于上述分析的代码修改建议:

    public void checkAdjacentMaterial(int[][] arr, int[][] arrCheck, int i, int j, SlotGameLineData data, int lastArrPosData){
        if (i < 0 || i >= 7 || j < 0 || j >= 7 || arrCheck[i][j] == 1 || arr[i][j] == 0) {
            return;
        }
        
        int currentArr = arr[i][j];
        
        // 如果当前素材是万能的话,进行额外处理
        if (arr[i][j] == 1) {
            for (int x = Math.max(0, i-1); x <= Math.min(i+1, 6); x++) {
                for (int y = Math.max(0, j-1); y <= Math.min(j+1, 6); y++) {
                    if (arr[x][y] != 1 && arrCheck[x][y] != 1) {
                        // 尝试用周围非万能素材的值替换当前素材,并继续检查
                        checkAdjacentMaterial(arr, arrCheck, x, y, data, arr[x][y]);
                    }
                }
            }
            return; // 万能素材处理完毕后不再继续当前路径
        }
        
        arrCheck[i][j] = 1;
        data.setColNum(data.getColNum() + 1);
        data.setMaterialPos(data.getMaterialPos() + i + "+" + j + ",");
        
        // 检查上下左右相邻素材+万能素材
        if (j > 0 && (currentArr == arr[i][j-1] || arr[i][j-1] == 1) && arrCheck[i][j - 1] != 1) {
            checkAdjacentMaterial(arr, arrCheck, i, j-1, data, currentArr);
        }
        if(j<6&&(currentArr==arr[i][j+1]||arr[i][j+1]==1)&&arrCheck[i][j+1]!=1){
            checkAdjacentMaterial(arr, arrCheck, i, j+1, data, currentArr);
        }
        if (i > 0 && (currentArr == arr[i-1][j] || arr[i-1][j]==1) && arrCheck[i-1][j] !=1){
            checkAdjacentMaterial(arr, arrCheck, i-1, j, data, currentArr);
        }
        if (i < 6 && (currentArr == arr[i+1][j] || arr[i+1][j]==1) && arrCheck[i+1][j] != 1) {
            checkAdjacentMaterial(arr, arrCheck, i+1, j, data, currentArr);
        }
    }
    

    注意事项

    • 这个修改增加了对万能素材的特殊处理,通过遍历其周围的素材,尝试用每个非万能素材的值替换万能素材,进而递归检查是否形成有效的匹配。
    • 由于万能素材的特殊性,一旦遇到万能素材,就不再继续当前路径的搜索,而是返回并尝试所有可能的替换,这样可以避免重复计算和无限递归。

    这个修改后的代码应该能更准确地处理所有与万能素材相关的匹配情况,包括那些看起来并未直接参与连线但实际上影响结果的情形。

    评论 编辑记录

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 6月14日
  • 创建了问题 6月14日

悬赏问题

  • ¥30 模拟电路 logisim
  • ¥15 PVE8.2.7无法成功使用a5000的vGPU,什么原因
  • ¥15 is not in the mmseg::model registry。报错,模型注册表找不到自定义模块。
  • ¥15 安装quartus II18.1时弹出此error,怎么解决?
  • ¥15 keil官网下载psn序列号在哪
  • ¥15 想用adb命令做一个通话软件,播放录音
  • ¥30 Pytorch深度学习服务器跑不通问题解决?
  • ¥15 部分客户订单定位有误的问题
  • ¥15 如何在maya程序中利用python编写领子和褶裥的模型的方法
  • ¥15 Bug traq 数据包 大概什么价