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