# 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
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up