From 7b57c2ab04da74514d75ab722088a039e257fef5 Mon Sep 17 00:00:00 2001
From: 无故事王国 <841720330@qq.com>
Date: 星期五, 07 六月 2024 18:57:27 +0800
Subject: [PATCH] 提交fix

---
 DolphinEnglishLearnStudent/Models/CommonModel.swift                                     |   25 +++
 DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenGame_2_VC.swift              |   79 +++++++++
 DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenSubVC.swift                  |   13 +
 DolphinEnglishLearnStudent/Moudle/Home/Listen/View/ChooseLevelView.swift                |    2 
 DolphinEnglishLearnStudent/Services/Services.swift                                      |   29 +++
 DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenFightVC.swift                |  118 ++++++++++++--
 DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenGame_1_VC.swift              |  119 +++++++++++---
 DolphinEnglishLearnStudent/Other/UIView/StudyHandleView.swift                           |    2 
 DolphinEnglishLearnStudent/Moudle/Home/Listen/CCell/ListenFight_Game_CCell.swift        |    5 
 DolphinEnglishLearnStudent/Moudle/Home/Listen/CCell/ListenFight_Game_CCell.xib          |    3 
 DolphinEnglishLearnStudent/Moudle/Home/Listen/CCell/ListenFight_Game_Pocket_CCell.swift |   72 ++++++++-
 DolphinEnglishLearnStudent/Moudle/Home/Listen/View/GameBeginTipView.swift               |    6 
 12 files changed, 401 insertions(+), 72 deletions(-)

diff --git a/DolphinEnglishLearnStudent/Models/CommonModel.swift b/DolphinEnglishLearnStudent/Models/CommonModel.swift
index f9b7941..890d4f7 100644
--- a/DolphinEnglishLearnStudent/Models/CommonModel.swift
+++ b/DolphinEnglishLearnStudent/Models/CommonModel.swift
@@ -258,9 +258,28 @@
 				var updateBy: String = ""
 				var updateTime: String = ""
 				var week: Int = 0
+				var answerCount = 0
+				var answerIntegral = 0
+				var answerTime = 0
+				var time = 0
+				var count = 0
+
 }
 
-class Listen1SubModel:HandyJSON{
+class Listen1SubModel:HandyJSON,Hashable{
+				
+				static func == (lhs: Listen1SubModel, rhs: Listen1SubModel) -> Bool {
+								return lhs.id == rhs.id
+				}
+
+//				var hashValue: Int{
+//								return id
+//				}
+
+				func hash(into hasher: inout Hasher) {
+
+				}
+
 
 				required init() {}
 
@@ -277,6 +296,10 @@
 				var type: String = ""
 				var updateBy: String = ""
 				var updateTime: String = ""
+
+
+				//游戏类型2专用
+				var isOpen:Bool = false
 }
 
 struct Listen4Model:HandyJSON{
diff --git a/DolphinEnglishLearnStudent/Moudle/Home/Listen/CCell/ListenFight_Game_CCell.swift b/DolphinEnglishLearnStudent/Moudle/Home/Listen/CCell/ListenFight_Game_CCell.swift
index 627d088..bf42c17 100644
--- a/DolphinEnglishLearnStudent/Moudle/Home/Listen/CCell/ListenFight_Game_CCell.swift
+++ b/DolphinEnglishLearnStudent/Moudle/Home/Listen/CCell/ListenFight_Game_CCell.swift
@@ -12,6 +12,7 @@
 				@IBOutlet weak var view_container: UIView!
 				@IBOutlet weak var view_top: UIView!
 				@IBOutlet weak var img_state: UIImageView!
+				@IBOutlet weak var img_cover: UIImageView!
 				
 				override func awakeFromNib() {
         super.awakeFromNib()
@@ -39,6 +40,10 @@
 								}
 				}
 
+				func setModel(_ m:Listen1SubModel){
+								img_cover.sd_setImage(with: URL(string: m.img))
+				}
+
 				override func layoutSubviews() {
 								super.layoutSubviews()
 								view_top.jq_addCorners(corner: [.topLeft,.topRight], radius: 8)
diff --git a/DolphinEnglishLearnStudent/Moudle/Home/Listen/CCell/ListenFight_Game_CCell.xib b/DolphinEnglishLearnStudent/Moudle/Home/Listen/CCell/ListenFight_Game_CCell.xib
index c08cdf4..a53b258 100644
--- a/DolphinEnglishLearnStudent/Moudle/Home/Listen/CCell/ListenFight_Game_CCell.xib
+++ b/DolphinEnglishLearnStudent/Moudle/Home/Listen/CCell/ListenFight_Game_CCell.xib
@@ -27,7 +27,7 @@
                                     <constraint firstAttribute="height" constant="40" id="E9b-fE-KSJ"/>
                                 </constraints>
                             </view>
-                            <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="qVZ-4r-nXX">
+                            <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="qVZ-4r-nXX">
                                 <rect key="frame" x="0.0" y="40" width="155" height="160"/>
                             </imageView>
                             <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="NUh-6J-pQi">
@@ -69,6 +69,7 @@
             </constraints>
             <size key="customSize" width="165" height="210"/>
             <connections>
+                <outlet property="img_cover" destination="qVZ-4r-nXX" id="fI2-K0-BPL"/>
                 <outlet property="img_state" destination="dMD-2P-QwE" id="asa-h2-2Ut"/>
                 <outlet property="view_container" destination="YTs-C9-W1k" id="SRu-Wj-Ued"/>
                 <outlet property="view_top" destination="Mmn-Bf-5Vy" id="Pdc-oD-g5f"/>
diff --git a/DolphinEnglishLearnStudent/Moudle/Home/Listen/CCell/ListenFight_Game_Pocket_CCell.swift b/DolphinEnglishLearnStudent/Moudle/Home/Listen/CCell/ListenFight_Game_Pocket_CCell.swift
index 248c440..10d902e 100644
--- a/DolphinEnglishLearnStudent/Moudle/Home/Listen/CCell/ListenFight_Game_Pocket_CCell.swift
+++ b/DolphinEnglishLearnStudent/Moudle/Home/Listen/CCell/ListenFight_Game_Pocket_CCell.swift
@@ -9,17 +9,27 @@
 
 class ListenFight_Game_Pocket_CCell: UICollectionViewCell {
 
-				private lazy var mask_img:UIImageView = {
+				lazy var mask_img:UIImageView = {
 								let image = UIImageView(image: UIImage(named: "bg_card"))
 								return image
 				}()
 
-				private lazy var answer_img:UIImageView = {
+				lazy var answer_img:UIImageView = {
 								let image = UIImageView()
 								image.jq_cornerRadius  = 10
 								image.backgroundColor = .red
 								return image
 				}()
+
+
+				lazy var voice_view:UIView = {
+												let voiceView = UIView()
+								voiceView.backgroundColor = UIColor(hexString: "#41A2EB")
+								voiceView.jq_cornerRadius = 10
+								return voiceView
+				}()
+
+				private var model:Listen1SubModel!
 
 
 				override init(frame: CGRect) {
@@ -34,14 +44,60 @@
 												make.edges.equalToSuperview()
 								}
 
-								let mask_tap = UITapGestureRecognizer(target: self, action: #selector(toFromAction))
-								mask_img.addGestureRecognizer(mask_tap)
-								mask_img.isUserInteractionEnabled = true
+								addSubview(voice_view)
+								voice_view.snp.makeConstraints { make in
+												make.edges.equalToSuperview()
+								}
 
-								let answer_tap = UITapGestureRecognizer(target: self, action: #selector(toBackAction))
-								answer_img.addGestureRecognizer(answer_tap)
-								answer_img.isUserInteractionEnabled = true
+								let contentVoiceView = UIView()
+								contentVoiceView.backgroundColor = .white
+								contentVoiceView.jq_cornerRadius = 8
+								voice_view.addSubview(contentVoiceView)
+								contentVoiceView.snp.makeConstraints { make in
+												make.left.equalTo(40)
+												make.right.equalTo(-40)
+												make.top.equalTo(55)
+												make.bottom.equalTo(-55)
+								}
 
+
+								let img1 = UIImageView(image: UIImage(named: "icon_play_1"))
+								contentVoiceView.addSubview(img1)
+								img1.snp.makeConstraints { make in
+												make.left.equalTo(23)
+												make.width.height.equalTo(32)
+												make.centerY.equalToSuperview()
+								}
+
+								let playBtn = UIButton(type: .custom)
+								playBtn.addTarget(self, action: #selector(playAction), for: .touchUpInside)
+								playBtn.setImage(UIImage(named: "icon_play"), for: .normal)
+								contentVoiceView.addSubview(playBtn)
+								playBtn.snp.makeConstraints { make in
+												make.right.equalTo(-23)
+												make.width.height.equalTo(32)
+												make.centerY.equalToSuperview()
+								}
+
+
+//								let mask_tap = UITapGestureRecognizer(target: self, action: #selector(toFromAction))
+//								mask_img.addGestureRecognizer(mask_tap)
+//								mask_img.isUserInteractionEnabled = true
+//
+//								let answer_tap = UITapGestureRecognizer(target: self, action: #selector(toBackAction))
+//								answer_img.addGestureRecognizer(answer_tap)
+//								answer_img.isUserInteractionEnabled = true
+
+				}
+
+				@objc func playAction(){
+								VoicePlayer.share().playerEnd()
+								VoicePlayer.share().playerAt(url: model.correct)
+				}
+
+				func setModel(_ model:Listen1SubModel){
+								self.model = model
+								answer_img.sd_setImage(with: URL(string: model.img))
 				}
 
 				required init?(coder: NSCoder) {
diff --git a/DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenFightVC.swift b/DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenFightVC.swift
index f18f61c..9aacf3b 100644
--- a/DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenFightVC.swift
+++ b/DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenFightVC.swift
@@ -44,6 +44,11 @@
 				var maxPage = BehaviorRelay<Int>(value: 5)
 				var listenType = BehaviorRelay<ListenType>(value:.lesson1)
 				var times:Int = 0
+				var quarter = BehaviorRelay<Int?>(value: 0)
+				var week = BehaviorRelay<Int?>(value: 0)
+
+				//游戏专属,游戏等级
+				var gameLevel = BehaviorRelay<Int>(value:0)
 
 				//回答错误数量
 				var correctNum:Int = 0{
@@ -120,9 +125,15 @@
 				private var timer:Timer!
 
 
-				init(listenType:ListenType) {
+				init(listenType:ListenType,quarter:Int? = nil,week:Int? = nil) {
 								super.init(nibName: nil, bundle: nil)
 								self.viewModel.listenType.accept(listenType)
+								self.viewModel.week.accept(week)
+								self.viewModel.quarter.accept(quarter)
+
+								if listenType == .game1 || listenType == .game2{
+												self.viewModel.maxPage.accept(1)
+								}
 				}
 				
 				required init?(coder: NSCoder) {
@@ -136,8 +147,6 @@
 												self?.quitAction()
 								}
 
-								pageVC.reloadData()
-
 								btn_exit.addTarget(self, action: #selector(quitAction), for: .touchUpInside)
 								btn_forward.addTarget(self, action: #selector(beforeAction), for: .touchUpInside)
 
@@ -145,6 +154,12 @@
 								if viewModel.listenType.value == .game1 || viewModel.listenType.value == .game2{
 												btn_forward.isHidden = true
 												label_pageNum.isHidden = true
+
+												if viewModel.listenType.value == .game1{
+																showGameLevel()
+												}
+								}else{
+												pageVC.reloadData()
 								}
 
 								timer = Timer(fire: .distantPast, interval: 1.0, repeats: true, block: {[weak self] _ in
@@ -169,6 +184,23 @@
 												}else{
 																make.bottom.equalTo(self.label_pageNum.snp.top).offset(-32)
 												}
+								}
+				}
+
+				private func showGameLevel(){
+								ChooseLevelView.show {[weak self] level in
+												guard let weakSelf = self else { return }
+												weakSelf.viewModel.gameLevel.accept(level)
+												Services.gameHearing(difficulty: level, quarter: weakSelf.viewModel.quarter.value!, week: weakSelf.viewModel.week.value!).subscribe(onNext: {result in
+																GameBeginTipView.show {
+																				if let data = result.data{
+																								weakSelf.data = data
+																								weakSelf.pageVC.reloadData()
+																				}
+																}
+												},onError: { _ in
+																weakSelf.showGameLevel()
+												}).disposed(by: weakSelf.disposeBag)
 								}
 				}
 
@@ -213,24 +245,16 @@
 
 												//完成
 												if nextPage >= weakSelf.viewModel.maxPage.value{
-
-																var toalIntegral:Int = 0
-																var ids = [Int]()
-																for v in weakSelf.viewModel.answerItems.values{
-																				if let v =  v as? Listen1Model{
-																								toalIntegral += v.data?.integral ?? 0
-																								ids.append(v.data?.studyId ?? 0)
-																				}
+																switch weakSelf.viewModel.listenType.value {
+																				case .game1,.game2:
+																								if let dict = noti.object as? Dictionary<String,Any>{
+																												weakSelf.gamesComplete(gameId: dict["gameId"] as! Int,integral: dict["gameIntegral"] as! Int)
+																								}
+																				case .lesson1,.lesson2,.lesson3,.lesson4,.lesson5:
+																								weakSelf.studyComplete()
+																				case .story1,.story2:break
 																}
 
-																Services.completeLearing(type: weakSelf.viewModel.listenType.value.rawValue, studyTime: weakSelf.viewModel.times, studyIds: ids, isComplete: false).subscribe(onNext: {data in
-
-																}).disposed(by: weakSelf.disposeBag)
-
-																weakSelf.timer.invalidate()
-																let vc = HomeStudyCompleteVC(correctNum: weakSelf.viewModel.correctNum, errorNum: weakSelf.viewModel.errorNum, totalCoin: toalIntegral)
-																vc.title = weakSelf.viewModel.listenType.value.rawTitle
-																				weakSelf.push(vc: vc)
 																return
 												}
 
@@ -243,6 +267,50 @@
 												self?.btn_forward.isHidden = currentPage <= 0
 												self?.label_pageNum.text = "已完成:\(weakSelf.viewModel.currentPage.value + 1)/\(weakSelf.viewModel.maxPage.value)"
 								}).disposed(by: disposeBag)
+				}
+
+				//学习类完成
+				private func studyComplete(){
+								var toalIntegral:Int = 0
+								var ids = [Int]()
+								for v in viewModel.answerItems.values{
+												if let v =  v as? Listen1Model{
+																toalIntegral += v.data?.integral ?? 0
+																ids.append(v.data?.studyId ?? 0)
+												}
+								}
+
+								Services.completeLearing(type: viewModel.listenType.value.rawValue, studyTime: viewModel.times, studyIds: ids, isComplete: false).subscribe(onNext: {data in
+
+								}).disposed(by: disposeBag)
+
+								timer.invalidate()
+
+								let vc = HomeStudyCompleteVC(correctNum: viewModel.correctNum, errorNum: viewModel.errorNum, totalCoin: toalIntegral)
+								vc.title = viewModel.listenType.value.rawTitle
+								push(vc: vc)
+				}
+
+				private func gamesComplete(gameId:Int,integral:Int){
+
+								var name = ""
+								if viewModel.listenType.value == .game1{
+												name = "超级听力"
+								}else{
+												name = "超级记忆"
+								}
+
+								let accuracy = Int(Double(viewModel.correctNum) / Double(viewModel.correctNum + viewModel.errorNum) * 100)
+
+								Services.completeGames(gameId: gameId, gameName: name, difficulty: viewModel.gameLevel.value, accuracy: accuracy, useTime: viewModel.times).subscribe(onNext: {data in
+
+								}).disposed(by: disposeBag)
+
+								timer.invalidate()
+
+								let vc = HomeStudyCompleteVC(correctNum: viewModel.correctNum, errorNum: viewModel.errorNum, totalCoin: integral)
+								vc.title = viewModel.listenType.value.rawTitle
+								push(vc: vc)
 				}
 
 				deinit{
@@ -264,6 +332,11 @@
 
 extension HomeListenFightVC:FFPageViewControllerDelegate{
 				func totalPagesOfpageViewController(_ pageViewConteoller: FFPageViewController) -> UInt {
+
+								//超级听力,只有一页
+								if viewModel.listenType.value == .game1 || viewModel.listenType.value == .game2{
+												return 1
+								}
 								return UInt(viewModel.maxPage.value)
 				}
 
@@ -304,12 +377,15 @@
 								}
 
 								if viewModel.listenType.value == .game1{
-												let vc = HomeListenGame_1_VC()
+												if data == nil{return UIViewController()}
+												let vc = HomeListenGame_1_VC(listen1Model: data as! Listen1Model)
+												vc.rootViewModel = viewModel
 												return vc
 								}
 
 								if viewModel.listenType.value == .game2{
-												let vc = HomeListenGame_2_VC()
+												let vc = HomeListenGame_2_VC(listen1Model: data as! Listen1Model)
+												vc.rootViewModel = viewModel
 												return vc
 								}
 
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
 				}
 }
diff --git a/DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenGame_2_VC.swift b/DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenGame_2_VC.swift
index 4697761..122a4e0 100644
--- a/DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenGame_2_VC.swift
+++ b/DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenGame_2_VC.swift
@@ -7,10 +7,17 @@
 
 import UIKit
 
+struct Game_2_SelectModel:Hashable{
+				var indexPath:IndexPath!
+				var model:Listen1SubModel!
+}
+
 class HomeListenGame_2_VC: BaseVC {
 
 				private var viewModel = FightAnswerViewModel()
-
+				var rootViewModel:HomeListenFightViewModel!
+				private var listen1Model:Listen1Model!
+				private var selectModels = [Game_2_SelectModel]()
 
 				private lazy var label_time:UILabel = {
 								let label = UILabel()
@@ -23,7 +30,7 @@
 
 				private lazy var collectionView:UICollectionView = {
 								let flowLayout = UICollectionViewFlowLayout()
-								let w = (JQ_ScreenW - 40 * 2 - 30) / 4.0
+								let w = (JQ_ScreenW - 40 * 2 - 50) / 5.0
 								flowLayout.itemSize = CGSize(width: w, height: w * 0.675)
 
 								flowLayout.minimumInteritemSpacing = 10
@@ -37,6 +44,16 @@
 
 				private var timer:Timer?
 				private var times:Int = 600
+
+				required init(listen1Model:Listen1Model){
+								super.init(nibName: nil, bundle: nil)
+								self.listen1Model = listen1Model
+								self.listen1Model.subjectList.shuffle()
+				}
+
+				required init?(coder: NSCoder) {
+								fatalError("init(coder:) has not been implemented")
+				}
 
 				override func viewDidLoad() {
 								super.viewDidLoad()
@@ -65,6 +82,7 @@
 												make.centerY.equalTo(label_surplusTitle)
 												make.height.equalTo(44)
 								}
+								
 
 								collectionView.delegate = self
 								collectionView.dataSource = self
@@ -131,22 +149,69 @@
 
 extension HomeListenGame_2_VC:UICollectionViewDelegate{
 				func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
-								viewModel.selectIndex.accept(indexPath)
-								_ = self.collectionView.dequeueReusableCell(withReuseIdentifier: "_ListenFight_Game_Pocket_CCell", for: indexPath) as! ListenFight_Game_Pocket_CCell
-	
 
+								if selectModels.last?.indexPath == indexPath{
+												print("重复点击");return
+								}
+
+								let model = listen1Model.subjectList[indexPath.row]
+
+								if selectModels.count >= 2{
+												selectModels.removeFirst()
+								}
+
+								selectModels.append(Game_2_SelectModel(indexPath: indexPath, model: model))
+
+								print(selectModels.map({"\($0.indexPath.row)"}).joined(separator: "——"))
+
+								if selectModels.count == 1{
+												let cell = self.collectionView.cellForItem(at: indexPath) as! ListenFight_Game_Pocket_CCell
+												cell.toFromAction()
+								}
+
+								if selectModels.count == 2{
+												let cell = self.collectionView.cellForItem(at: indexPath) as! ListenFight_Game_Pocket_CCell
+												cell.toFromAction()
+
+												let firstM = selectModels.first
+												let lastM = selectModels.last
+
+												if firstM != nil && lastM != nil{
+																if firstM!.model.id == lastM!.model.id{
+																				firstM!.model.isOpen = true
+																				lastM?.model.isOpen = true
+																				selectModels.removeAll()
+																				print("相同")
+																}else{
+																				print("不相同")
+																				let firstIndex = firstM!.indexPath
+																				let secondIndex = lastM!.indexPath
+
+																				let firstIndexCell = self.collectionView.cellForItem(at: firstIndex!) as! ListenFight_Game_Pocket_CCell
+																				let secondIndexCell = self.collectionView.cellForItem(at: secondIndex!) as! ListenFight_Game_Pocket_CCell
+
+																				DispatchQueue.main.asyncAfter(deadline: .now()+0.5){
+																								firstIndexCell.toBackAction()
+																								secondIndexCell.toBackAction()
+																								self.selectModels.removeAll()
+																				}
+																}
+												}
+								}
 				}
 }
 
 extension HomeListenGame_2_VC:UICollectionViewDataSource{
 				func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
+								let model = listen1Model.subjectList[indexPath.row]
 								let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "_ListenFight_Game_Pocket_CCell", for: indexPath) as! ListenFight_Game_Pocket_CCell
-
+								cell.setModel(model)
+								cell.voice_view.isHidden = !model.correct.isEmpty
 								return cell
 				}
 
 				func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
-								return 12
+								return listen1Model.subjectList.count
 				}
 }
 
diff --git a/DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenSubVC.swift b/DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenSubVC.swift
index 75f8cbe..01e0706 100644
--- a/DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenSubVC.swift
+++ b/DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenSubVC.swift
@@ -117,10 +117,19 @@
 								//自主游戏
 								if page == 5{
 												if indexPath.row == 0{
-																JQ_currentViewController().jq_push(vc: HomeListenFightVC(listenType: .game1))
+																				let fightVC = HomeListenFightVC(listenType: .game1,quarter: quarter,week: week)
+																fightVC.title = ListenType.game1.rawTitle
+																JQ_currentViewController().jq_push(vc:fightVC)
 												}
 												if indexPath.row == 1{
-																JQ_currentViewController().jq_push(vc: HomeListenFightVC(listenType: .game2))
+																Services.gameMemory(quarter: quarter, week: week).subscribe(onNext: {result in
+																				if let data = result.data{
+																								let fightVC = HomeListenFightVC(listenType: .game2)
+																								fightVC.title = ListenType.game2.rawTitle
+																								fightVC.data = data
+																								JQ_currentViewController().jq_push(vc: fightVC)
+																				}
+																}).disposed(by: disposeBag)
 												}
 								}
 
diff --git a/DolphinEnglishLearnStudent/Moudle/Home/Listen/View/ChooseLevelView.swift b/DolphinEnglishLearnStudent/Moudle/Home/Listen/View/ChooseLevelView.swift
index 4af6642..e60c9cd 100644
--- a/DolphinEnglishLearnStudent/Moudle/Home/Listen/View/ChooseLevelView.swift
+++ b/DolphinEnglishLearnStudent/Moudle/Home/Listen/View/ChooseLevelView.swift
@@ -15,7 +15,7 @@
 				@IBOutlet weak var tackView_level: UIStackView!
 
 				private var clouseLevel:((Int)->Void)!
-				private var level:Int = 1
+				private var level:Int = 0
 
 				override func awakeFromNib() {
 								super.awakeFromNib()
diff --git a/DolphinEnglishLearnStudent/Moudle/Home/Listen/View/GameBeginTipView.swift b/DolphinEnglishLearnStudent/Moudle/Home/Listen/View/GameBeginTipView.swift
index ab0d138..b3f179e 100644
--- a/DolphinEnglishLearnStudent/Moudle/Home/Listen/View/GameBeginTipView.swift
+++ b/DolphinEnglishLearnStudent/Moudle/Home/Listen/View/GameBeginTipView.swift
@@ -13,7 +13,8 @@
 
 				@IBOutlet weak var view_container: UIView!
 				@IBOutlet weak var label_time: UILabel!
-				
+				private var timer:Timer?
+
 				private var completeClouse:(()->Void)!
 				override func awakeFromNib() {
 								super.awakeFromNib()
@@ -34,7 +35,7 @@
 								} completion: { _ in
 												levelView.layoutIfNeeded()
 												var time:Int = 5
-												Timer.scheduledTimer(withTimeInterval: 1.0, repeats: true) { timer in
+												levelView.timer = Timer.scheduledTimer(withTimeInterval: 1.0, repeats: true) { timer in
 																time -= 1
 																levelView.label_time.text = "\(time)"
 																levelView.animation()
@@ -65,6 +66,7 @@
 				}
 
 				@IBAction func completeAction(_ sender: UIButton) {
+								timer?.invalidate()
 								UIView.animate(withDuration: 0.4) {
 												self.transform = .init(scaleX: 0.1, y: 0.1)
 												self.alpha = 0
diff --git a/DolphinEnglishLearnStudent/Other/UIView/StudyHandleView.swift b/DolphinEnglishLearnStudent/Other/UIView/StudyHandleView.swift
index 425f138..742f020 100644
--- a/DolphinEnglishLearnStudent/Other/UIView/StudyHandleView.swift
+++ b/DolphinEnglishLearnStudent/Other/UIView/StudyHandleView.swift
@@ -21,7 +21,7 @@
 				private var playComplete:(()->Void)?
 				private var playAtClouse:((Int)->Void)?
 
-				private var voicePlayer = VoicePlayer.share()
+				var voicePlayer = VoicePlayer.share()
 				var vioceSoundUrl:String?
 
 				override func awakeFromNib() {
diff --git a/DolphinEnglishLearnStudent/Services/Services.swift b/DolphinEnglishLearnStudent/Services/Services.swift
index 37d216b..a416956 100644
--- a/DolphinEnglishLearnStudent/Services/Services.swift
+++ b/DolphinEnglishLearnStudent/Services/Services.swift
@@ -91,6 +91,35 @@
 												.append(key: "isComplete", value: isComplete)
 								return NetworkRequest.request(params: params, method: .post,encoding: JSONEncoding.default, progress: true)
 				}
+
+				/// 完成游戏
+				class func completeGames(gameId:Int,gameName:String,difficulty:Int,accuracy:Int,useTime:Int)->Observable<BaseResponse<SimpleModel>>{
+								let params = ParamsAppender.build(url: All_Url)
+								params.interface(url: "/study/base/study/gameAchievement")
+												.append(key: "gameId", value: gameId)
+												.append(key: "accuracy", value: accuracy)
+												.append(key: "difficulty", value: difficulty)
+												.append(key: "useTime", value: useTime)
+												.append(key: "gameName", value: gameName)
+								return NetworkRequest.request(params: params, method: .post,encoding: JSONEncoding.default, progress: true)
+				}
+
+				class func gameHearing(difficulty:Int,quarter:Int,week:Int)->Observable<BaseResponse<Listen1Model>>{
+								let params = ParamsAppender.build(url: All_Url)
+								params.interface(url: "/study/base/study/gameHearing")
+								params.append(key: "quarter", value: quarter)
+								params.append(key: "difficulty", value: difficulty)
+								params.append(key: "week", value: week)
+								return NetworkRequest.request(params: params, method: .get, progress: true)
+				}
+
+				class func gameMemory(quarter:Int,week:Int)->Observable<BaseResponse<Listen1Model>>{
+								let params = ParamsAppender.build(url: All_Url)
+								params.interface(url: "/study/base/study/gameMemory")
+								params.append(key: "quarter", value: quarter)
+								params.append(key: "week", value: week)
+								return NetworkRequest.request(params: params, method: .get, progress: true)
+				}
 }
 
 // MARK: -- 登录部分

--
Gitblit v1.7.1