iT邦幫忙

2021 iThome 鐵人賽

DAY 23
0

直接一點的說,今天的主題就是要讓骰子動起來,現在他已經躺在那邊準備好被你狠狠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 應該會給你一個視窗:

https://ithelp.ithome.com.tw/upload/images/20211008/2014063840LBPB5ujB.png

他建議 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 ,

下一篇見寫寫打家打家擺掰。


上一篇
DAY22 這邊先幫你上一個按鈕喔~(四)
下一篇
DAY24 這邊先幫你上一個按鈕喔~(六)
系列文
糟了!是世界奇觀!30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言