From 481723ce3c05d74fec53b8567b9c79d77bdcc155 Mon Sep 17 00:00:00 2001
From: 罗明文 <125975490@qq.com>
Date: 星期三, 19 六月 2024 02:27:53 +0800
Subject: [PATCH] save

---
 app/src/main/java/com/dollearn/student/ui/home/MemoryActivity.kt |  103 +++++++++++++++++++++++++++++++++++++++++++++------
 1 files changed, 91 insertions(+), 12 deletions(-)

diff --git a/app/src/main/java/com/dollearn/student/ui/home/MemoryActivity.kt b/app/src/main/java/com/dollearn/student/ui/home/MemoryActivity.kt
index 6ab0321..7fd64c2 100644
--- a/app/src/main/java/com/dollearn/student/ui/home/MemoryActivity.kt
+++ b/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) {
+    /**
+     * 翻开卡片
+     */
+    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 onFinish() {
-                val tipDialog = TipDialog()
-                tipDialog.arguments = bundleOf("msg" to "答题时间已结束,停止作答!")
-            }
-
         }
     }
 
+
+    override fun onDestroy() {
+        super.onDestroy()
+        handler?.removeMessages(PLAY_VOICE)
+        handler?.removeMessages(STUDY_TIME)
+        handler = null
+    }
 }

--
Gitblit v1.7.1