Android Studio中Kotlin 4x3老虎机获胜图案识别问题求助
老虎机获胜图案匹配逻辑修正方案
常见错误定位
- 图案状态读取时机错误:若在旋转动画未完全结束时就调用判断函数,会读取到转轮的中间状态而非最终停止的图案。
- 遍历逻辑方向错误:4x3布局(4个转轮列,每个转轮显示3行图案)的获胜判断,需针对指定获胜线的对应行匹配,而非遍历转轮的所有行。
- 匹配条件不严谨:原代码可能仅判断单一行列,未覆盖多获胜线场景,或存在字符串大小写/拼写不一致导致的匹配失败。
修正后代码示例
假设你的转轮类有displayedPatterns属性,存储当前显示的3个图案(索引0=顶行,1=中间行,2=底行):
// 核心获胜判断函数 fun checkWinningCombinations(): Boolean { // 定义4x3布局支持的所有获胜线(每个元素对应转轮的行索引) val winningLines = listOf( listOf(1, 1, 1, 1), // 横向中间线(最常见获胜线) listOf(0, 0, 0, 0), // 横向顶线 listOf(2, 2, 2, 2), // 横向底线 listOf(0, 1, 2, 1), // 左上-右下斜线 listOf(2, 1, 0, 1) // 右上-左下斜线 ) // 按布局顺序获取4个转轮实例 val reels = listOf(reel1, reel2, reel3, reel4) // 提取每个转轮当前显示的3个图案 val reelCurrentPatterns = reels.map { it.displayedPatterns } // 遍历每条获胜线,逐一匹配 for (line in winningLines) { val currentLinePatterns = mutableListOf<String>() // 取出当前获胜线对应的所有转轮图案 for ((reelIndex, rowIndex) in line.withIndex()) { currentLinePatterns.add(reelCurrentPatterns[reelIndex][rowIndex]) } // 判断当前线所有图案是否一致(可根据需求修改为特定组合,比如3个相同+1个特殊符号) if (currentLinePatterns.distinct().size == 1) { triggerWin(currentLinePatterns[0]) return true } } return false } // 获胜触发逻辑(示例) private fun triggerWin(pattern: String) { // 播放获胜音效、高亮对应线条、弹出奖励提示等 }
额外注意事项
- 确保在动画结束后执行判断:在旋转动画的
onAnimationEnd回调中调用checkWinningCombinations,避免读取到未稳定的图案状态。 - 统一图案标识:所有图案的字符串标识需完全一致(比如避免"cherry"和"Cherry"混用)。
- 对齐布局与代码顺序:XML布局中转轮的排列顺序,需与代码中
reels列表的顺序完全对应,防止匹配错位。
内容的提问来源于stack exchange,提问作者Sheila Ullom
相关产品推荐
相关产品推荐

