# Kotlin 112 期末作業 請使用Kotlin寫出類似下圖的[遊戲](https://laijunbin.github.io/cube-game/)。  ## Demo 影片 ### 一般版(基本要求) <iframe width="640" height="344" src="https://www.youtube.com/embed/Iyd6rpa-AkQ" title="Kotlin 1122 final demo" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe> ### 動畫版 <iframe width="640" height="344" src="https://www.youtube.com/embed/obJGj4o61jg?si=sxQsDaCShnaV2RiK" title="Kotlin 1122 final demo with animation" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe> # 要求 1. 在遊戲開始時,畫面上隨機產生6*6的方格,數字皆為1,顏色為以下三種隨機 * <div style="display: inline-block; width:12px; height:12px; background-color: #EF4444;"></div> #EF4444 * <div style="display: inline-block; width:12px; height:12px; background-color: #EAB308;"></div> #EAB308 * <div style="display: inline-block; width:12px; height:12px; background-color: #3B82F6;"></div> #3B82F6 2. 當有三個同顏色的方塊連在一起的時候可以合併數字,然後上面的方塊將會往下遞補,而遞補後空白的方格將會隨機重新產生方格 * 例如 1. 有三個方格皆為1,會合併為一個數字3的格子,而另外兩個會消失,上方的方格會往下遞補 2. 有三個方格分別為1 2 2,會合併成5 3. 有四個方格分別為1 2 3 3,會合併成9 3. 合併後的方格數字最大為10,若該格子數字已達到10,將會變色為 <div style="display: inline-block; width:12px; height:12px; background-color: #64748B;"></div> #64748B,此時當有三個以上數字為10的方格被點擊,將會將這些方格都消除。 4. 當點擊的格子沒有連續三個同顏色連在一起時,跳出訊息通知使用者不能點 5. 當遊戲中沒有連續三個同顏色的格子連在一起時,跳出彈跳視窗通知使用者遊戲結束 6. 遊戲分數的計算方式 * 合併方格時,用合併後的數字減去該區域中最大的數字為加分 * 舉例來說: 1. 合併三格 1 1 1 => 3,則加2分,因為3-1=2 2. 合併四格 1 1 1 1 => 4,加3分,4-1=2 3. 合併四格 1 2 3 4 => 10,加6分,10-4=6 4. 合併三格 2 2 3 => 7,加4分,7-3=4 5. 合併三格 5 7 7 => 10,加3分,10-7=3 * 消除方格時,消除幾個就加 10 * 個數 * 舉例來說: 1. 消除 10 10 10,10*3=30,加30分 2. 消除 5 個 10 則加 50分 7. 提供一個重新開始的按鈕,點擊後遊戲將會重新開始,重新產生方格,並可以正常遊戲。 8. <span style="color: red;">至少須完成一般版本,也鼓勵同學嘗試完成動畫版,可以參考下面的提示(Animation 與 Timer)</span> ## 你可能會用到的元件 1. LinearLayout 2. TextView 3. Button 4. AlertDialog 5. Toast ## 提示 ### AlertDialog 範例  ```kotlin import android.app.AlertDialog val builder = AlertDialog.Builder(this) builder.setTitle("Alert Title") builder.setMessage("Message Body") builder.show() ``` ### Toast 範例  ```kotlin import android.widget.Toast Toast.makeText(this, "You can't remove less than 3 cubes", Toast.LENGTH_SHORT).show() ``` ### Animation 範例 ```kotlin button.animate(). translationX(100f). translationY(100f). setDuration(500). start() ``` ### Timer 範例 在 `runOnUiThread` 中要使用外層的 `this` 需要明確指定,如範例,或參考[文件](https://kotlinlang.org/docs/this-expressions.html) ```java import java.util.Timer import kotlin.concurrent.schedule import android.app.AlertDialog Timer().schedule(500) { runOnUiThread { val builder = AlertDialog.Builder(this@MainActivity) builder.setTitle("Message") builder.setMessage("Hello World") builder.show() } } ``` # 提交 > Windows可以使用[Bandicam](https://www.bandicam.com/tw/)來錄影,也可以使用支援Windows、MAC的OBS但比較複雜一些;無論如何千萬不要使用手機對螢幕錄影,拜託! * 拍攝YouTube解說你的程式碼並玩至100分以上,過程中需有以下情境並確定畫質可以看清楚,以及有清楚錄製你的聲音 * 合併方格 * 消除方格 * 點擊不能合併的方格 * 遊戲結束 * 重新開始 * ==若沒有實作動畫,也請注意墜落的方塊是否正確== * 將主程式打包好提交到e3,並於作業說明貼上 youtube 連結 * 早點寫早點交,如果助教發現有問題會通知你,如果太晚交可能就算通知你也來不及改 ## 打包方法 
×
Sign in
Email
Password
Forgot password
or
Sign in via Google
Sign in via Facebook
Sign in via X(Twitter)
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
Continue with a different method
New to HackMD?
Sign up
By signing in, you agree to our
terms of service
.