罗明文
2024-06-19 481723ce3c05d74fec53b8567b9c79d77bdcc155
app/src/main/java/com/dollearn/student/ui/home/MemoryActivity.kt
@@ -1,8 +1,9 @@
package com.dollearn.student.ui.home
import android.os.CountDownTimer
import android.os.Handler
import androidx.core.os.bundleOf
import androidx.recyclerview.widget.GridLayoutManager
import cn.sinata.xldutils.utils.showAllowingStateLoss
import com.dollearn.student.R
import com.dollearn.student.dialog.TipDialog
import com.dollearn.student.network.entity.Card
@@ -19,32 +20,110 @@
    }
    private val list = arrayListOf<Card>()
    private val adapter = CardAdapter(list)
    private val TIME = 600*1000L
    private var timer:CountDownTimer? = null
    private var lastTime = 600 //剩余秒
    private var totalCount = 0
    private var rightCount = 0
    private var handler: Handler? = null
    var time = 0 //学习秒数
    private val PLAY_VOICE = 1
    private val STUDY_TIME = 2
    private val player by lazy { com.dollearn.student.utils.AudioUtils() }
    private var index = 0
    override fun initClick() {
        tv_exit.setOnClickListener {
            if (tv_exit.text == "提交"){
                //todo 分数问题
                ResultActivity.startResult(this,0,0,0,7,totalCount,rightCount,100,time,data!!.data.id)
                finish()
            }else
                finish()
        }
    }
    override fun initView() {
        handler = object : Handler(android.os.Looper.getMainLooper()){
            override fun handleMessage(msg: android.os.Message) {
                super.handleMessage(msg)
                when(msg.what){
                    STUDY_TIME->{
                        time++
                        lastTime --
                        tv_timer.text = "${lastTime}S"
                        if (lastTime == 0){
                            val tipDialog = TipDialog()
                            tipDialog.arguments = bundleOf("msg" to "答题时间已结束,停止作答!","isAlert" to true,"ok" to "查看成绩")
                            tipDialog.setDismissCallback(object :TipDialog.OnDismiss{
                                override fun onDismiss() {
                                    ResultActivity.startResult(this@MemoryActivity,0,0,0,7,totalCount,rightCount
                                        ,100,time,data!!.data.id)
                                }
                            })
                            tipDialog.showAllowingStateLoss(supportFragmentManager,"finish")
                        }else
                            sendEmptyMessageDelayed(STUDY_TIME,1000)
                    }
                    PLAY_VOICE->{
                        player.startPlayMusic(this@MemoryActivity,list[index].url)
                    }
                }
            }
        }
        handler?.sendEmptyMessageDelayed(STUDY_TIME,1000)
        rv_list.layoutManager = GridLayoutManager(this,5)
        rv_list.adapter = adapter
        list.addAll(data.photoList.map { Card(it.id,1,it.photo) })
        list.addAll(data.voiceList.map { Card(it.id,2,it.voice) })
        list.shuffle()
        adapter.notifyDataSetChanged()
        timer = object :CountDownTimer(TIME,1000){
            override fun onTick(millisUntilFinished: Long) {
            }
            override fun onFinish() {
                val tipDialog = TipDialog()
                tipDialog.arguments = bundleOf("msg" to "答题时间已结束,停止作答!")
    /**
     * 翻开卡片
     */
    fun flyover(position:Int){
        val card = list[position]
        if (card.type == 2){
            index = position
            handler?.sendEmptyMessage(PLAY_VOICE)
            }
        if (adapter.position1!=-1&&adapter.position2!=-1){ //已经翻开2张卡片,比较结果是否匹配
            totalCount++
            val card1 = list[adapter.position1]
            val card2 = list[adapter.position2]
            if (card1.type!=card2.type&&card1.id == card2.id){//匹配成功
                adapter.releaseHolder()
                rightCount++
                tv_timer.postDelayed({
                    if (list.filter { !it.isBack }.size == list.size){ //全部答对
                        tv_exit.text = "提交"
                        handler?.removeMessages(STUDY_TIME) //停止计时
                    }
                },500)
            }else{
                tv_timer.postDelayed({
                    adapter.bothToBack()
                },500)
            }
        }
    }
    override fun onDestroy() {
        super.onDestroy()
        handler?.removeMessages(PLAY_VOICE)
        handler?.removeMessages(STUDY_TIME)
        handler = null
    }
}