1
resposta

Criar um loop

Gostaria de criar um loop para que esse jogo continuasse sendo executado até que o "i"atingisse a quarta posição de qualquer um dos arrays listados ali. No final o jogo deve zerar as pontuações e começar novamente. Também quero saber porque o jogo não marca as pontuações corretamente, ele para em 1 e não marca as pontuações. Obrigado

`class MainActivity : AppCompatActivity() {

private lateinit var binding: ActivityMainBinding
private var finalResult = ""
private var i = 0
lateinit var userChoice: ImageView


override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    binding = ActivityMainBinding.inflate(layoutInflater)
    setContentView(binding.root)


        val maqOptions = arrayOf(binding.maqPedra, binding.maqPapel, binding.maqTesoura)
        val gameChoice = getGameChoice(maqOptions)

        binding.humPedra.setOnClickListener {
            userChoice = binding.humPedra
            printResult(userChoice, gameChoice)
            sumPoints()
        }
        binding.humPapel.setOnClickListener {
            userChoice = binding.humPapel
            printResult(userChoice, gameChoice)
            sumPoints()
        }
        binding.humTesoura.setOnClickListener {
            userChoice = binding.humTesoura
            printResult(userChoice, gameChoice)
            sumPoints()
        }
    }


    fun getGameChoice(optionsParam: Array<ImageView>) =
        optionsParam[((Math.random() * optionsParam.size).toInt())]

    fun printResult(userChoice: ImageView, gameChoice: ImageView): String {
        if ((userChoice == binding.humPedra && gameChoice == binding.maqTesoura) ||
            (userChoice == binding.humPapel && gameChoice == binding.maqPedra) ||
            (userChoice == binding.humTesoura && gameChoice == binding.maqPapel)
        ) {
            binding.resultado.text = "Você venceu"
            finalResult = "Você venceu"

        } else if ((userChoice == binding.humPedra && gameChoice == binding.maqPedra) ||
            (userChoice == binding.humPapel && gameChoice == binding.maqPapel) ||
            (userChoice == binding.humTesoura && gameChoice == binding.maqTesoura)
        ) {
            binding.resultado.text = "Empatado"
            finalResult = "Empatado"

        } else {
            binding.resultado.text = "Você perdeu"
            finalResult = "Você perdeu"
        }
        return finalResult
    }

private fun sumPoints() {

    val humLimite = arrayOf("1", "2", "3", "4", "5")
    val maqLimite = arrayOf("1", "2", "3", "4", "5")
    val humPontua = humLimite[i]
    val maqPontua = maqLimite[i]

    if(finalResult == "Empatado") {
        binding.maqResult.text = maqPontua
        binding.humResult.text = humPontua
        i+=i

    } else if (finalResult == "Você venceu") {
        binding.humResult.text = humPontua
        i+=i

    } else {
        binding.maqResult.text = maqPontua
        i+=i
    }
}

}

`

1 resposta

Olá! Tudo bem?

Para criar um loop que execute o jogo até que o "i" atinja a quarta posição de qualquer um dos arrays listados, você pode utilizar um loop while. Por exemplo:

while(i < 4 && i < humLimite.size && i < maqLimite.size) {
    // código do jogo
}

Dessa forma, o loop irá executar enquanto o "i" for menor que 4 e também menor que o tamanho dos arrays "humLimite" e "maqLimite".

Quanto ao problema de as pontuações não estarem sendo marcadas corretamente, parece que o erro está no método "sumPoints". Você está utilizando o operador "+=" para incrementar o valor de "i", mas o correto seria utilizar o operador "++". Além disso, você está multiplicando o valor de "i" por 2 ao invés de incrementá-lo em 1.

Uma possível solução para o método "sumPoints" seria:

private fun sumPoints() {

    val humLimite = arrayOf("1", "2", "3", "4", "5")
    val maqLimite = arrayOf("1", "2", "3", "4", "5")
    val humPontua = humLimite[i]
    val maqPontua = maqLimite[i]

    if(finalResult == "Empatado") {
        binding.maqResult.text = maqPontua
        binding.humResult.text = humPontua
        i++

    } else if (finalResult == "Você venceu") {
        binding.humResult.text = humPontua
        i++

    } else {
        binding.maqResult.text = maqPontua
        i++
    }

    if (i == 4) {
        // reiniciar as pontuações e o valor de "i"
        binding.humResult.text = "0"
        binding.maqResult.text = "0"
        i = 0
    }
}

Espero ter ajudado e bons estudos!