直接一点的说,今天的主题就是要让骰子动起来,现在他已经躺在那边准备好被你狠狠D甩出去了,你就不要客气,掷他。
避免大家忘记进度到哪边,所以补一下整体的 MainActivity 程序码(其实忘记的人是我欸嘿):
package com.example.diceroller
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Button
import android.widget.TextView
import android.widget.Toast
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val rollButton: Button = findViewById(R.id.button2)
rollButton.setOnClickListener {
Toast.makeText(this,"Dice Rolled!", Toast.LENGTH_SHORT).show()
//上面是利用 Toast 来提醒使用者,按钮已经按下去了
val resultTextView: TextView = findViewById(R.id.textView)
resultTextView.text = "6"
//上面是使用者会看到的骰子点数,目前预设是 6
}
}
}
阿...都回来了。
接下来把骰子的逻辑放进程序码中。
在骰子系列的第一篇呢,有试着把逻辑转换成程序码,就可以把这些程序码修改一下并放入 MainActivity 中。先在 class MainActivity 外建立一个 class Dice:
class Dice(val numSides: Int){ //numSides这个参数代表骰子会有的面数
fun roll(): Int {
return (1..numSides).random() //回传 1~骰子面数的随机数字
}
}
这时候 Android Studio 应该会给你一个视窗:
他建议 numSides 应该要是 private,既然他都这麽说了,直接点第一个选项 "Make 'numSides' 'private' "。
我们建了 Dice 这个 class 的目的就是,把产生随机点数的这个程序逻辑,交给 class Dice 去执行,接下来还要回 class MainActivity 去建立一个 rollDice 的 fun ,这个 fun 会去建立一个 Dice 的实例,再由这个实例去呼叫产生随机点数的 function,也就是 Dice.roll():
private fun rollDice(){ //建立一个名为 rollDice 的 funtion
val dice = Dice(6) //产生一个6面骰子的实例
val rollDice = dice.roll() //把产生的结果存入rollDice这个变数
val resultTextView: TextVite = findViewById(R.id.textView) //找到显示的 TextView
resultTextView.text = rollDice.toString() //把textView的文字存入产生的结果
}
因为我们在 class Dice 里的 roll() 回传的种类是 Int 数值的型态,所以在最後存入 resultTextView 的 text 之前,要先从 int 转换成 string,才会在後面加上 toString() 。
最後只要在监听 Button 的程序里呼叫 rollDice( ) 就可以产生结果啦:
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val rollButton: Button = findViewById(R.id.button2)
rollButton.setOnClickListener { //监听按钮是不是被点击了
Toast.makeText(this, "Dice Rolled!", Toast.LENGTH_SHORT).show()
rollDice()
}
}
private fun rollDice(){ //建立一个名为 rollDice 的 funtion
val dice = Dice(6) //产生一个6面骰子的实例
val rollDice = dice.roll() //把产生的结果存入rollDice这个变数
val resultTextView: TextView = findViewById(R.id.textView)
resultTextView.text = rollDice.toString()
}
}
class Dice(private val numSides: Int){ //numSides这个参数代表骰子会有的面数
fun roll(): Int {
return (1..numSides).random() //回传 1~骰子面数的随机数字
}
}
我就不放入结果展示啦,虽然少了骰子的图片,但其实逻辑差不多就是这样,接下来应该会说点别的,至於要讲解甚麽,我也不知道,一定会知道的。
今天一样就先 John ,
下一篇见写写打家打家摆掰。
<<: [2021铁人赛 Day23] Cryptography 密码学题目 01
>>: Day23-按钮分身术(上)_纯CSS汉堡图样与改变
开宗明义就以「知识」是什麽?作为开场序幕 你所认定的IT管理层面的知识是 资料库里的知识 学术篇章的...
在开发专案时可能会有多人同时commit和push的状况,很容易有conflict,这时候就需要使用...
写到最後三天了,想要聊聊和 Android 不完全相关的东西。感谢JetBrains 的开发,和 K...
策略模式 Strategy Pattern 策略模式,可以让物件在运作时更改其行为或算法,你可以透...
前言:在第16、17天的时候有介绍到堆积,今天要利用堆积的特性来实现排序法,忘记或不知道堆积是甚麽的...