如何解决Kotlin/Android Studio石头剪刀布游戏计分无法超过1的问题
问题根因分析
- 变量作用域错误:你当前把
win、tie、lose三个计分变量定义在paperPressed点击事件函数内部,每次点击按钮触发函数时,三个变量都会被重新初始化为0,函数执行结束后变量就会被销毁,下次点击又会从0开始计数,自然最多只能到1。 - 随机数范围错误:
Random.nextInt(2)的返回值范围是0、1两个整数,你后续逻辑中用到的代表剪刀的数值2永远不会被触发,要改成Random.nextInt(3)才能得到0、1、2三个随机值。 - 计分逻辑错误:你当前在胜负判断完成后,直接给三个变量都执行了++操作,不管本局是赢、输还是平局,三个分数都会加1,逻辑完全不符合预期。
修复方案
- 将三个计分变量移到Activity的成员变量位置(也就是所有函数之外,类定义内部的位置),保证变量不会随着每次点击事件被重置,可以跨多次点击累计数值
- 修正随机数生成的参数为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
相关产品推荐
相关产品推荐

