From 7b57c2ab04da74514d75ab722088a039e257fef5 Mon Sep 17 00:00:00 2001 From: 无故事王国 <841720330@qq.com> Date: 星期五, 07 六月 2024 18:57:27 +0800 Subject: [PATCH] 提交fix --- DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenGame_1_VC.swift | 119 +++++++++++++++++++++++++++++++++++++++++++++-------------- 1 files changed, 91 insertions(+), 28 deletions(-) diff --git a/DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenGame_1_VC.swift b/DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenGame_1_VC.swift index 45f36b8..41bb3bc 100644 --- a/DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenGame_1_VC.swift +++ b/DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenGame_1_VC.swift @@ -7,9 +7,16 @@ import UIKit +let Games_1_Refresh_Noti = Notification.Name.init("Games_1_Refresh_Noti") + class HomeListenGame_1_VC: BaseVC { private var viewModel = FightAnswerViewModel() + private var listen1Model:Listen1Model! + + var rootViewModel:HomeListenFightViewModel! + + private var totalCount:Int = 1 //游戏的总数量 private lazy var label_class:UILabel = { let label = UILabel() @@ -26,6 +33,7 @@ label.textColor = UIColor(hexStr: "#EE1111") label.text = "请在10s内选择答案!" label.textAlignment = .center + label.isHidden = true label.font = .systemFont(ofSize: 14, weight: .medium) return label }() @@ -50,15 +58,42 @@ }() private var timer:Timer? - private var times:Int = 10 + private var times:Int = 60 + + private var answerSet = Set<Listen1SubModel>() + private var currentAnswer:Listen1SubModel?{ + didSet{ + if let v = currentAnswer{ + view_studyHandleView.vioceSoundUrl = v.correct + view_studyHandleView.voicePlayer.playerAt(url: v.correct) + } + } + } + + required init(listen1Model:Listen1Model){ + super.init(nibName: nil, bundle: nil) + self.listen1Model = listen1Model + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } override func viewDidLoad() { super.viewDidLoad() - ChooseLevelView.show { level in - GameBeginTipView.show { - self.startTimer() + if listen1Model != nil{ + times = listen1Model?.data?.time ?? 10 + collectionView.reloadData() + label_hint.isHidden = false + label_hint.text = "\(totalCount)" + if timer == nil{startTimer()} + + for v in listen1Model?.subjectList ?? []{ + answerSet.insert(v) } + print("--->开始答题:剩余:\(answerSet.count)") + currentAnswer = answerSet.randomElement() //随机 } } @@ -77,6 +112,7 @@ } view_class_title.addSubview(label_class) + label_class.text = "\(totalCount)" label_class.snp.makeConstraints { make in make.left.equalTo(11) make.right.equalTo(-12) @@ -114,7 +150,8 @@ view.layoutIfNeeded() } - private func startTimer(){ + + func startTimer(){ if timer == nil{ timer = Timer(timeInterval: 1.0, target: self, selector: #selector(runloopTime), userInfo: nil, repeats: true) } @@ -128,27 +165,37 @@ if times == 0{ timer?.fireDate = .distantFuture - DispatchQueue.main.asyncAfter(deadline: .now()+3) { - self.times = 10 - self.timer?.fireDate = .distantPast + if let c = currentAnswer{ + answerSet.remove(c) } + currentAnswer = answerSet.randomElement() //随机 + times = listen1Model?.data?.time ?? 0 + timer?.fireDate = .distantPast + totalCount += 1 + label_class.text = "\(totalCount)" + + //答题完成 + if self.answerSet.count == 0{completeQuestion()} } - } - - private func nextQuesAction(){ - } private func answerQuestion(){ view.layoutIfNeeded() - var answerType:Fight_lessonType = .none - answerType = .success + guard let row = viewModel.selectIndex.value?.row else { alertError(msg: "请选择");return } + + var answerType:Fight_lessonType = .none + + if currentAnswer?.id == listen1Model?.subjectList[row].id{ + answerType = .success + }else{ + answerType = .fail + } switch answerType { case .success: viewModel.answerType.accept(.success) collectionView.reloadData() - + rootViewModel.correctNum += 1 if let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "_ListenFight_Game_CCell", for: viewModel.selectIndex.value!) as? ListenFight_Game_CCell{ let newRect = cell.contentView.convert(cell.bounds, from: self.collectionView) let x = abs(newRect.origin.x) + self.collectionView.contentInset.left + 5 @@ -164,49 +211,65 @@ DispatchQueue.main.asyncAfter(deadline: .now()+0.5) { self.viewModel.answerType.accept(.none) self.collectionView.reloadData() - self.times = 11 - self.nextQuesAction() + self.times = self.listen1Model?.data?.time ?? 10 + self.totalCount += 1 + self.label_class.text = "\(self.totalCount)" + self.answerSet.remove(self.currentAnswer!) + self.currentAnswer = self.answerSet.randomElement() + print("--->下一题:\(self.currentAnswer?.id ?? 0) 剩余\(self.answerSet.count) 计数:\(self.totalCount)") + + //答题完成 + if self.answerSet.count == 0{ + self.completeQuestion() + } } } } case .fail: + rootViewModel.errorNum += 1 viewModel.answerType.accept(.fail) collectionView.reloadData() - DispatchQueue.main.asyncAfter(wallDeadline: .now()+2.5) { - self.viewModel.answerType.accept(.none) - self.collectionView.reloadData() - self.times = 11 - self.nextQuesAction() - } - case .none: break } + } + + private func completeQuestion(){ + print("答题完成") + self.label_hint.text = "答题完成" + self.timer?.invalidate() + self.rootViewModel.answerItems[0] = self.listen1Model + NotificationCenter.default.post(name: NextLession_Noti, object: ["gameId":listen1Model.data!.id,"gameIntegral":listen1Model.data!.integral]) } } extension HomeListenGame_1_VC:UICollectionViewDelegate{ func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { - viewModel.selectIndex.accept(indexPath) - answerQuestion() + let model = listen1Model!.subjectList[indexPath.row] + if answerSet.contains(model){ + viewModel.selectIndex.accept(indexPath) + answerQuestion() + } } } extension HomeListenGame_1_VC:UICollectionViewDataSource{ func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { + let model = listen1Model!.subjectList[indexPath.row] let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "_ListenFight_Game_CCell", for: indexPath) as! ListenFight_Game_CCell - if viewModel.selectIndex.value == indexPath{ cell.setState(state: viewModel.answerType.value) }else{ cell.setState(state: .none) } + + cell.setModel(model) return cell } func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { - return 12 + return listen1Model?.subjectList.count ?? 0 } } -- Gitblit v1.7.1