W801学习笔记二十二:英语背单词学习应用——下

news2024/12/28 20:15:32

续上篇:

W801学习笔记二十一:英语背单词学习应用——上

五、处理用户交互

由于英语也是采用了和唐诗一样的《三分钟限时挑战》《五十题竞速挑战》《零错误闯关挑战》,所以用户交互的逻辑和唐诗是一样的。所以,我们抽一个基类,让代码可以重用。

1、抽取基类

StudyBase 

class StudyBase : public IScean
{
	public:
		StudyBase(){};
		virtual ~StudyBase(){};
protected:
		u8 gameMode=0;
		u8 winMode=0;
		u8 isFinished=0;
		u16 correntCount =0;
		u16 wrongCount = 0;
		u32 totalTime=0;
		u32 lastTotalTime=0;
   //×○△□
		const char *controlInfo="EXIT: 返回     SELECT: 重新开始";
		const char *answerInfo="× 选择    ○ 选择    □ 选择    △ 选择";

		u16 answerBGColor[4] = {DBLUE, DRED, DGREEN, BROWN }; 
		
		void startPrepare();
		void errorDelay(u8 t);
		u8 checkFinish();
		void showScore();
		void showTime();
		
		u8 answerTitle[4][8] = {
			{0x20,0xA1,0xC1,0x20,0x25,0x73,0x20, 0x0}, // × %s ,
			{0x20,0xA1,0xF0,0x20,0x25,0x73,0x20, 0x0},
			{0x20,0xA1,0xF5,0x20,0x25,0x73,0x20, 0x0},
			{0x20,0xA1,0xF7,0x20,0x25,0x73,0x20, 0x0}}; 
		
private:
		DisplayOption optionScore = {FONT_SIZE_1516, YELLOW, BLACK, 0, 0};
		DisplayOption optionCorrentCount = {FONT_SIZE_1516, GREEN, BLACK, 0, 0};
		DisplayOption optionWrongCount = {FONT_SIZE_1516, RED, BLACK, 0, 0};
		DisplayOption optionTime = {FONT_SIZE_1516, YELLOW, BLACK, 0, 0};
		DisplayOption optionDeCount = {FONT_SIZE_3232, WHITE, DRED, 1, 0};
		
		DisplayOption optionDelay = {FONT_SIZE_2424, WHITE, DRED, 0, 0};
		
		void finish();

};

StudyBase.cpp

void StudyBase::errorDelay(u8 t){
	for(;t>0;t--){
		Display_String2(400, 50, &optionDelay,"  %d  ",t);
		tls_os_time_delay(1000);
	}
	Display_Fill_Rectangle2(400, 50, 80, 80, BLACK);
}


u8 StudyBase::checkFinish(){
	switch (winMode) {
		case 1:
		if(totalTime > 180000) {
			finish();
			return 1;
		}
		break;
		case 2:
		if(correntCount+ wrongCount == 50) {
			finish();
			return 1;
		}
		break;
		case 3:
		if(wrongCount>0) {
			finish();
			return 1;
		}
		break;
	}
	return 0;
}

void StudyBase::finish(){
	isFinished = 1;
	show_status_info(controlInfo);
	optionDeCount.backColor = DBLUE;
	Display_String(Prepare_LOC, &optionDeCount, "   挑 战 结 束   ");
}


void StudyBase::showScore()
{
	int score = correntCount* 60 - wrongCount * 20;
	if(score<0 ) score =0;
	Display_String2(10, 5, &optionScore, "得分: %06d ", score);
	Display_String2(150, 5, &optionCorrentCount, "正确: %04d ", correntCount);
	Display_String2(270, 5, &optionWrongCount, "错误: %04d ", wrongCount);
}

void StudyBase::showTime()
{
	if(lastTotalTime == totalTime/1000){
		return;
	}
	lastTotalTime = totalTime/1000;
		
	if(winMode == 2)
		Display_String2(400, 5, &optionTime, "%02d:%02d", ((180000- totalTime) / 1000) / 60, ((180000- totalTime) / 1000) % 60);
	else
		Display_String2(400, 5, &optionTime, "%02d:%02d", (totalTime / 1000) / 60, (totalTime / 1000) % 60);	
}

2、继承基类

YingYu.h

typedef struct {
	uint16_t question;
    uint16_t answer[4];
	uint8_t ans;
} EngQuestion;

class YingYu : public StudyBase
{
   public:
      YingYu();   
      ~YingYu();  
		SceanResult tick(u32 ticks);
		int scean_init(cJSON*  param);

private:

   EngQuestion *currentQuestion;
   void start();
   void createQuestion();
   void createQuestionMode3();
   void showQuetion();
   void showAnswer();
   void correct();
   void wrong();

	DisplayOption optionQuetion = {FONT_SIZE_2424, YELLOW, BLACK, 1, 1};
	DisplayOption optionZY = {FONT_SIZE_2424, WHITE, BLACK, 1, 1};
	DisplayOption optionAnswer[4] = {
			{FONT_SIZE_1516, WHITE, answerBGColor[0], 0, 1},
			{FONT_SIZE_1516, WHITE, answerBGColor[1], 0, 1},
			{FONT_SIZE_1516, WHITE, answerBGColor[2], 0, 1}, 
			{FONT_SIZE_1516, WHITE, answerBGColor[3], 0, 1}};

	u16 Eng_Answer_LOC_X=20;

	u16 Eng_Answer_LOC_Y[4] = {195,220,245,270};

   char errEngWord[4][40];
   
	unsigned char *DataBuff;
      
	int YingYuCount;
};

3、完成实现

YingYu.cpp

int YingYu::scean_init(cJSON*  param){
	setKeyAdepterIntervalAll(200);
	setKeyAdepterInterval(KEY_GPIO_A, 65535);
	setKeyAdepterInterval(KEY_GPIO_B, 65535);
	setKeyAdepterInterval(KEY_GPIO_C, 65535);
	setKeyAdepterInterval(KEY_GPIO_D, 65535);
	
	winMode= cJSON_GetObjectItem(param,"w")->valueint;
    gameMode = cJSON_GetObjectItem(param,"m")->valueint;
	
	printf("start chinese. winMode=%d, gameMode=%d.\n", winMode, gameMode);
	
	fatfs_readFile(cJSON_GetObjectItem(param,"f")->valuestring, &DataBuff);
	YingYuCount = DataBuff[12] | (DataBuff[13]<<8) | (DataBuff[14]<<16)| (DataBuff[15]<<24);

	start();
	return 0;
}
void YingYu::start(){
	startPrepare();
	show_status_info(answerInfo);
	showScore();
	createQuestion();
	showQuetion();
}

 看看效果:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1649667.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

高级数据结构与算法习题(9)

一、判断题 1、Let S be the set of activities in Activity Selection Problem. Then the earliest finish activity am​ must be included in all the maximum-size subset of mutually compatible activities of S. T F 解析:F。设S是活动选择问题中的一…

Golang Map类型

文章目录 Map介绍Map的定义方式Map的增删查改新增和修改Map元素查找Map元素删除Map元素遍历Map元素 Map元素排序Map切片 Map介绍 Map介绍 在Go中&#xff0c;map是哈希表的引用&#xff0c;是一种key-value数据结构。map类型写作map[K]V&#xff0c;其中K和V分别对应key和value…

深度学习之基于Tensorflow卷积神经网络智能体操健身系统

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 一、项目背景 随着人们健康意识的提高和数字化技术的快速发展&#xff0c;智能健身系统逐渐成为健身领域的新趋势。…

为什么不建议在 Vue <style> 中使用 scoped?

前言 亲爱的小伙伴&#xff0c;你好&#xff01;我是 嘟老板。我们使用 Vue 开发页面时&#xff0c;经常需要在 <style> 标签下编写样式。不知你是否留意&#xff0c;在 <style> 标签下有一个属性经常出现 - scoped。你知道它起到什么作用吗&#xff1f;原理是怎样…

实现同一份数据的各种镜像

一个数据集通过某个轴&#xff08;通常是垂直或水平轴&#xff09;的镜像对称。这可以通过简单的数学运算来实现。 如果想要通过一块数据生成四份&#xff0c;可以通过以下步骤&#xff1a; 下面是一个简单的示例&#xff0c;展示了如何通过垂直轴&#xff08;左右对称&#…

瑞友天翼应用虚拟化系统SQL注入致远程代码执行漏洞复现

0x01 产品简介 瑞友天翼应用虚拟化系统是西安瑞友信息技术资讯有限公司研发的具有自主知识产权,基于服务器计算架构的应用虚拟化平台。它将用户各种应用软件集中部署在瑞友天翼服务器(群)上,客户端通过WEB即可快速安全的访问经服务器上授权的应用软件,实现集中应用、远程接…

普洱茶泡多少茶叶才算淡茶?

普洱茶淡茶一般放几克茶叶&#xff0c;品深茶官网根据多年专业研究与实践结果&#xff0c;制定了淡茶冲泡标准。在冲泡普洱茶淡茶时&#xff0c;茶叶的投放量是关键因素之一。淡茶冲泡标准旨在保持茶汤的清爽口感&#xff0c;同时充分展现普洱茶的独特风味。 根据《品深淡茶冲…

短视频账号矩阵系统saas、技术私有化开发--OEM贴牌加盟源码部署

短视频矩阵系统的SaaS&#xff08;Software as a Service&#xff09;授权方式独立开发涉及到多个技术层面的考虑&#xff0c;包括但不限于用户认证、授权机制、API访问控制、数据隔离等。以下是一些关键步骤和建议&#xff0c;帮助你开发一个成功的短视频矩阵系统SaaS授权方式…

【Linux】文件内容相关的命令,补充:管道符

1、查看文件内容 &#xff08;1-1&#xff09;查看文件内容&#xff1a;cat&#xff0c;tac&#xff0c;head&#xff0c;tail 查看文件内容cat 文件名查看文件内容并显示行号cat -n 文件名倒着查看文件内容&#xff08;从最后一行开始&#xff09;tac 文件名查看文件前10行…

中国3254座水库集水区特征(地形、土壤、地质、土地利用、气候、人为活动等)

中国3254座水库集水区特征数据集 中国3254座水库集水区特征&#xff08;地形、土壤、地质、土地利用、气候、人为活动等&#xff09;数据集 数据介绍 中国3254个水库共提供512个属性。这些属性是在水库上游集水区提供的&#xff0c;包含: 1&#xff09;两种类型的水库上游集水…

linux或ubuntu环境下需要自行安装vivado USB Program下载程序驱动

如果在linux或ubuntu环境下&#xff0c;不安装驱动是无法下载FPGA程序的。在linux或ubuntu环境下安装程序不要自动安装。 johnjohn-wang:~/vitis2021.2/Vivado/2021.2/data/xicom/cable_drivers/lin64/install_script/install_drivers$ sudo ./install_drivers

W801学习笔记二十一:英语背单词学习应用——上

英语背单词是比较常见的学习APP&#xff0c;参考唐诗宋词应用&#xff0c;本章做一个类似的应用。 一、单词数据清洗及格式转换 诗词数据的获取渠道很多&#xff0c;一般可以按照年级来分文件。如一到九年级&#xff0c;四六级&#xff0c;雅思等等。 1、先从网上某某地方下载…

数据结构学不会?数据结构可视化网站来了

目录 前言 图码网站 算法可视化 算法编辑器 数据结构全书 数据结构课程 总结 前言 数据结构与算法在计算机的学习中应该是许多小白最头疼的东西&#xff0c;明明听的时候那么容易&#xff0c;为什么转换成代码就那么抽象呢&#xff1f; 有没有一个网站可以数据结构与算…

Nginx从入门到精通速成

文章目录 一. **Nginx** **的简介**1.1 什么是 **nginx**1.2 正向代理1.3 反向代理1.4 **负载均衡**1.5 动静分离 二. **Nginx** **的安装**三. **Nginx** **的常用的命令**四. **Nginx** **的配置文件**五. **Nginx** **配置实例**反向代理实例**1**5.1 实现效果5.2 准备工作5…

领航法律科技,法大大多年深耕再获认可!

近日&#xff0c;“乘势破局 第八届新兴法律服务业高峰论坛”在上海隆重举行。作为国内领先的电子签厂商&#xff0c;法大大凭借在法律科技领域的多年深耕与沉淀&#xff0c;荣获“法律科技领航机构”称号。 据悉&#xff0c;新兴法律服务业高峰论坛作为国内首个聚焦“新兴法律…

Android版本依赖Version catalog

曾经我们使用config.gradle文件进行版本依赖配置&#xff0c;然后在project的build.gradle.kts中使用如下方式引入&#xff1a; apply(from "./config.gradle") 缺点&#xff1a;在project的module中引用无任何提示&#xff0c;无法跳转到指定引用 一、创建versio…

《QT实用小工具·五十九》随机图形验证码,带有一些可人的交互与动画

1、概述 源码放在文章末尾 该项目实现了可交互的动画验证码控件&#xff0c;趣味性十足&#xff1a; 字符变换动画 噪音动画 可拖动交互 项目demo演示如下所示&#xff1a; 项目部分代码如下所示&#xff1a; #ifndef CAPTCHAMOVABLELABEL_H #define CAPTCHAMOVABLELABEL…

物料厘不清?企业如何做好“物料管理”

物料包括原材料、半成品、成品、辅助用品以及生产过程中必然产生的边角余料、废料等。在制造企业中&#xff0c;各个部门的业务流程几乎都要用到物料&#xff1a; 销售和订单录入部门要通过物料确定客户定制产品的构形&#xff1b; 计划部门要根据物料来计划物料和能力的需求…

实验15 MVC

二、实验项目内容&#xff08;实验题目&#xff09; 编写代码&#xff0c;掌握MVC的用法。 三、源代码以及执行结果截图&#xff1a; inputMenu.jsp&#xff1a; <% page contentType"text/html" %> <% page pageEncoding "utf-8" %> &…

Nessus 部署实验

一、下载安装https://www.tenable.com/downloads/nessus 安装好之后&#xff0c;Nessus会自动打开浏览器&#xff0c;进入到初始化选择安装界面&#xff0c;这里我们要选择 Managed Scanner 点击继续&#xff0c;下一步选择Tenable.sc 点击继续&#xff0c;设置用户名和密码 等…