消消方块阵换皮表情
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

179 lines
4.0 KiB

//*********************
// create by 流云
// time: 2025.4.10
// desc: 答题模块
//*********************
import { game } from "cc";
/**
* 答题模块
*/
export class AnswerQuestions {
/**
* 选择事件
*/
static readonly EVENT_SELECT = "AnswerQuestions.EVENT_SELECT";
/**
* 一组答题结束事件
*/
static readonly EVENT_END = "AnswerQuestions.EVENT_END";
/**
* 问题
*/
Questions: Question[] = [];
/**
* 当前
*/
Curent: Question = null;
/**
* 是否自动下一个
*/
private _autoNext: boolean = false;
/**
* 初始化
*/
init(Questions: Question[], autoNext: boolean = false) {
this.Questions = Questions;
this._autoNext = autoNext;
this.Curent = null;
}
/**
* 下一个
*/
next() {
let index = this.Questions.indexOf(this.Curent);
if (index < this.Questions.length - 1) {
this.Curent = this.Questions[index + 1];
} else {
this.Curent = null;
game.emit(AnswerQuestions.EVENT_END);
}
}
/**
* 选择
* @param questionStr 问题
* @param selectItemStr 选项
*/
select(questionStr: string, selectItemStr: string) {
let question = this.Questions.find((item) => { return item.Question == questionStr });
if (question && question.Options.indexOf(selectItemStr) >= 0) {
// 如果是单选,则清空已选
if (question.IsRadio) {
question.SelectOptions = [];
}
let index = question.SelectOptions.indexOf(selectItemStr);
if (index >= 0) {
question.SelectOptions.splice(index, 1);
} else if (question.SelectOptions.length < question.Answer.length) {
question.SelectOptions.push(selectItemStr);
}
game.emit(AnswerQuestions.EVENT_SELECT, question);
if (question.IsFinishSelect && this._autoNext) {
this.next();
}
}
}
/**
* 验证所有题目是否完成
* @returns 是否完成
*/
checkAllFinish() {
return this.Questions.every((item) => { return item.IsFinishSelect });
}
/**
* 验证所有题目是否正确
* @returns 是否正确
*/
checkAllRight() {
return this.Questions.every((item) => { return item.IsRight });
}
/**
* 获取完成题目数量
* @returns 完成题目数量
*/
getFinshCount() {
return this.Questions.filter((item) => { return item.IsFinishSelect }).length;
}
/**
* 获取所有题目数量
* @returns 有题目数量
*/
getTotalCount() {
return this.Questions.length;
}
/**
* 获取正确题目数量
* @returns 正确题目数量
*/
getRightCount() {
return this.Questions.filter((item) => { return item.IsRight }).length;
}
/**
* 重置
*/
reset(question: string) {
let q = this.Questions.find((item) => { return item.Question == question });
if (q) {
q.SelectOptions = [];
}
}
/**
* 重置所有
*/
resetAll() {
this.Questions.forEach((item) => { item.SelectOptions = [] });
}
}
/**
* 问题
*/
export class Question {
/**
* 组名
*/
GroupName: string = "";
/**
* 问题
*/
Question: string = "";
/**
* 答案
*/
Answer: string[] = [];
/**
* 选项
*/
Options: string[] = [];
/**
* 已选
*/
SelectOptions: string[] = [];
/**
* 是否完成
*/
get IsFinishSelect() { return this.SelectOptions.length == this.Answer.length && this.SelectOptions.length > 0 }
/**
* 是否单选
*/
get IsRadio() { return this.Answer.length == 1 }
/**
* 是否正确
*/
get IsRight() { return this.IsFinishSelect && this.Answer.every((item) => { return this.SelectOptions.indexOf(item) >= 0 }) }
}