我正在尝试编程一个小骰子应用程序,其中包括三个骰子,应该有一些行动,例如“滚动所有骰子”或“把一方骰子,如果它是一个1或6”。
现在我还没有完成,但我的代码并不是真的那么典型。这就是为什么我问你,如果你能帮我减少我的代码,我只是重复了很多。这肯定是可能的一半行我猜。
我很高兴得到任何帮助/提示。
这是我的主要:
package com.example.notfall_kit
import android.os.Bundle
import android.widget.Button
import android.widget.ImageButton
import android.widget.ImageView
import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.isVisible
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// Find the Button, the 3 ImageButtons and the 3 ImageViews in the layout
val rollButton: Button = findViewById(R.id.wuerfelButton)
val centerButton: ImageButton = findViewById(R.id.imageButtonCenter)
val leftButton: ImageButton = findViewById(R.id.imageButtonLeft)
val rightButton: ImageButton = findViewById(R.id.imageButtonRight)
val centerImage: ImageView = findViewById(R.id.imageViewCenter)
val leftImage: ImageView = findViewById(R.id.imageViewLeft)
val rightImage: ImageView = findViewById(R.id.imageViewRight)
// What happens when pressing "WÜRFELN" Button
rollButton.setOnClickListener { rollDice()
}
// What happens when pressing the center dice ImageButton
centerButton.setOnClickListener{
centerImage.isVisible = true
centerButton.isVisible = false
}
// What happens when pressing the left dice ImageButton
leftButton.setOnClickListener{
leftImage.isVisible = true
leftButton.isVisible = false
}
// What happens when pressing the right dice ImageButton
rightButton.setOnClickListener{
rightImage.isVisible = true
rightButton.isVisible = false
}
}
private fun rollDice() {
// Create a new Dice object with 6 sides and roll it
val dice = Dice(6)
// Create 3 dices and roll them, see Class "Dice" for roll-function
val diceRollCenter = dice.roll()
val diceRollLeft = dice.roll()
val diceRollRight = dice.roll()
// Find the ImageButtons in the layout for the 3 dices
val diceImageCenter: ImageButton = findViewById(R.id.imageButtonCenter)
val diceImageLeft: ImageButton = findViewById(R.id.imageButtonLeft)
val diceImageRight: ImageButton = findViewById(R.id.imageButtonRight)
//Change the images of the center dice
when (diceRollCenter) {
1 -> diceImageCenter.setImageResource(R.drawable.dice_1)
2 -> diceImageCenter.setImageResource(R.drawable.dice_2)
3 -> diceImageCenter.setImageResource(R.drawable.dice_3)
4 -> diceImageCenter.setImageResource(R.drawable.dice_4)
5 -> diceImageCenter.setImageResource(R.drawable.dice_5)
6 -> diceImageCenter.setImageResource(R.drawable.dice_6)
}
//Change the images of the left dice
when (diceRollLeft) {
1 -> diceImageLeft.setImageResource(R.drawable.dice_1)
2 -> diceImageLeft.setImageResource(R.drawable.dice_2)
3 -> diceImageLeft.setImageResource(R.drawable.dice_3)
4 -> diceImageLeft.setImageResource(R.drawable.dice_4)
5 -> diceImageLeft.setImageResource(R.drawable.dice_5)
6 -> diceImageLeft.setImageResource(R.drawable.dice_6)
}
//Change the images of the right dice
when (diceRollRight) {
1 -> diceImageRight.setImageResource(R.drawable.dice_1)
2 -> diceImageRight.setImageResource(R.drawable.dice_2)
3 -> diceImageRight.setImageResource(R.drawable.dice_3)
4 -> diceImageRight.setImageResource(R.drawable.dice_4)
5 -> diceImageRight.setImageResource(R.drawable.dice_5)
6 -> diceImageRight.setImageResource(R.drawable.dice_6)
}
//call compareDices function to check if there is a 1 or a 6
compareDices(diceRollCenter,diceRollLeft, diceRollRight)
}
private fun compareDices(Center: Int, Left: Int, Right:Int) {
// Create 3 Images on top of the display and find them in the layout
val diceImageCenter: ImageView = findViewById(R.id.imageViewCenter)
val diceImageLeft: ImageView = findViewById(R.id.imageViewLeft)
val diceImageRight: ImageView = findViewById(R.id.imageViewRight)
// Find the ImageButtons in the layout for the 3 dices
val centerButton: ImageButton = findViewById(R.id.imageButtonCenter)
val leftButton: ImageButton = findViewById(R.id.imageButtonLeft)
val rightButton: ImageButton = findViewById(R.id.imageButtonRight)
// Only if the center-dice shows 1 or 6, the dice can moved to the top
if (centerButton.isVisible) {
when (Center) {
1 -> diceImageCenter.setImageResource(R.drawable.dice_1)
6 -> diceImageCenter.setImageResource(R.drawable.dice_6)
else -> println("JAUCHE")
}
}
// Only if the left dice shows 1 or 6, the dice can moved to the top
if (leftButton.isVisible) {
when (Left) {
1 -> diceImageLeft.setImageResource(R.drawable.dice_1)
6 -> diceImageLeft.setImageResource(R.drawable.dice_6)
else -> println("JAUCHE")
}
}
// Only if the right dice shows 1 or 6, the dice can moved to the top
if (rightButton.isVisible) {
when (Right) {
1 -> diceImageRight.setImageResource(R.drawable.dice_1)
6 -> diceImageRight.setImageResource(R.drawable.dice_6)
else -> println("JAUCHE")
}
}
}
}
这是我的班级:
package com.example.notfall_kit
class Dice(val numSides: Int) {
fun roll(): Int {
return (1..numSides).random()
}
}
1条答案
按热度按时间mbzjlibv1#
你可以使用的基本模式是创建你正在重复使用的东西的列表,这样你就可以在循环中设置它们。
您可以创建描述视图和图像Id的类属性,以便它们易于重用。我们将它们 Package 在
by lazy
中,因此在onCreate()
之前定义它们是安全的。在
onCreate()
中,可以迭代列表来设置它们:为了帮助您使用
rollDice()
函数,您应该创建要使用的图像的列表属性:然后在
rollDice()
中,你应该创建三个骰子作为一个列表,并迭代它们。因为drawables在一个列表中,你不需要用when语句设置它们。注意,我把
compareDices
改成了一个骰子的列表,而不是三个参数,它也是通过迭代列表来工作的,因为我们使用了三个列表,所以我用索引来迭代,而不是用zip
。