You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决Kotlin/Android Studio石头剪刀布游戏计分无法超过1的问题

问题根因分析

  • 变量作用域错误:你当前把win、tie、lose三个计分变量定义在paperPressed点击事件函数内部,每次点击按钮触发函数时,三个变量都会被重新初始化为0,函数执行结束后变量就会被销毁,下次点击又会从0开始计数,自然最多只能到1。
  • 随机数范围错误:Random.nextInt(2)的返回值范围是0、1两个整数,你后续逻辑中用到的代表剪刀的数值2永远不会被触发,要改成Random.nextInt(3)才能得到0、1、2三个随机值。
  • 计分逻辑错误:你当前在胜负判断完成后,直接给三个变量都执行了++操作,不管本局是赢、输还是平局,三个分数都会加1,逻辑完全不符合预期。

修复方案

  1. 将三个计分变量移到Activity的成员变量位置(也就是所有函数之外,类定义内部的位置),保证变量不会随着每次点击事件被重置,可以跨多次点击累计数值
  2. 修正随机数生成的参数为3,覆盖石头、剪刀、布三种选项
  3. 调整计分逻辑,仅在对应胜负结果出现时给对应计分变量+1

修正后的参考代码

首先是Activity成员变量定义部分:

// 放在类内部、所有函数外部的位置,作为全局成员变量
private var tie = 0
private var win = 0
private var lose = 0

然后是修改后的paperPressed函数:

fun paperPressed(view:View) {
    // 修正随机数范围为0-2
    val computerChoice = Random.nextInt(3)
    paperIcon.setColorFilter(Color.RED)
    rockIcon.setColorFilter(Color.BLACK)
    scissorsIcon.setColorFilter(Color.BLACK)
    when (computerChoice){
        0 -> aiChoice.text = "They chose rock."
        1 -> aiChoice.text = "They chose paper."
        2 -> aiChoice.text = "They chose scissors."
    }

    yourChoice.text = "You chose paper."
    when (computerChoice) {
        0 -> {
            whoWon.text = "You won!"
            // 赢局才给win+1
            win++
            winNumber.text = "$win"
        }
        1 -> {
            whoWon.text = "It was a tie!"
            // 平局才给tie+1
            tie++
            drawNumber.text = "$tie"
        }
        2 -> {
            whoWon.text = "You lost!"
            // 输局才给lose+1
            lose++
            lossNumber.text = "$lose"
        }
    }
}

内容的提问来源于stack exchange,提问作者kwitter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 00:27:02