W801学习笔记十九:古诗学习应用——下

经过前两章的内容,背唐诗的功能基本可以使用了。然而,仅有一种模式未免显得过于单一。因此,在本章中对其进行扩展,增加几种不同的玩法,并且这几种玩法将采用完全不同的判断方式。

玩法一:三分钟限时挑战——在规定的时间内,比拼谁的得分更高。

在这种模式下,需要在 tick 方法中判断时间是否已经结束。

玩法二:五十题竞速挑战——限定为五十题,比较谁的正确率更高。

在这种模式下,需要在每回答完一题后,判断总共已经回答了多少题。

玩法三:零错误闯关挑战——只要出现错误就立即结束,看谁能坚持的时间最长。

在这种模式下,一旦回答错误,就立即结束游戏。

现在我们开始。

1、现在菜单中加入三种模式的选项。

[
	{
		"t": "三分钟限时挑战",
		"i": "-",
		"d": 0,
		"g": {},
		"s": [
			{
				"t": "语文",
				"i": "menu/yuwen.png",
				"d": 0,
				"g": {},
				"s": [
					{
						"t": "唐诗三百首",
						"i": "-",
						"d": 302,
						"g": {"w":1, "m":1},
						"s": []
					}
				]
			},
		]
	},
	{
		"t": "五十题竞速挑战",
		"i": "-",
		"d": 0,
		"g": {},
		"s": [
			{
				"t": "语文",
				"i": "menu/yuwen.png",
				"d": 0,
				"g": {},
				"s": [
					{
						"t": "唐诗三百首",
						"i": "-",
						"d": 302,
						"g": {"w":2, "m":1},
						"s": []
					}
				]
			},
		]
	},
	{
		"t": "零错误闯关挑战",
		"i": "-",
		"d": 0,
		"g": {},
		"s": [
			{
				"t": "语文",
				"i": "menu/yuwen.png",
				"d": 0,
				"g": {},
				"s": [
					{
						"t": "唐诗三百首",
						"i": "-",
						"d": 302,
						"g": {"w":3, "m":1},
						"s": []
					}
				]
			}
		]
	},
	{
		"t": "关于",
		"i": "menu/test16.png",
		"d": 102,
		"g": {},
		"s": []
	}
]

通过在g属性中添加w属性,把玩法传递进去。

2、在游戏初始化中,获取玩法。

YuWenTs.cpp

int YuWenTS::scean_init(cJSON*  param){
。。。
	winMode= cJSON_GetObjectItem(param,"w")->valueint;

。。。

	start();
	return 0;
}

menu.cpp

SceanResult Menu::tick(u32 ticks){
。。。
	if(KEY_SEL){ //进入
		cJSON* item =  (cJSON*) ctlList->selectItem()->tag;
		int sceanId = cJSON_GetObjectItem(item,"d")->valueint;
		if(sceanId!= 0){
			IScean *scean =createScean(sceanId);
			if(scean !=NULL){
				scean->scean_init(cJSON_GetObjectItem(item,"g"));
				ListPushBack(sceanList, scean);
			}
			return SceanResult_Done;
		}
		cJSON* sitem =  cJSON_GetObjectItem(item,"s");
		
		if(cJSON_GetArraySize(sitem) > 0){
			ListPushBack(menuList, sitem);			
			showMenu();
			return SceanResult_Done;
		}
		return SceanResult_Done;
	}
	ctlList->tick(ticks);
	ran_max(10);
	return SceanResult_Done;
}

3、在需要进行结束判断的地方,加入判断。

YuWenTs.cpp

SceanResult YuWenTS::tick(u32 ticks){
	if(KEY_EXIT) {
		printf("goto top menu from About.\n");
		return SceanResult_EXIT;
	}
	if(isFinished){
		if(KEY_SEL) {
			start();
			return SceanResult_Done;
		}
	
	}else{
		totalTime+=ticks;
		showTime();


		if(checkFinish()){
			return SceanResult_Done;
		}

		
		。。。		
		ran_max(10);
	}
	return SceanResult_Done;
}

void YuWenTS::showTSAnswer(){
	Display_String(answerX, answerY, &optionMiss, dataLine(answerIdx));
	for(int i=0;i<4;i++)
	if(currentQuestion->ans !=i)
		Display_Fill_Rectangle2(answerLocX, answerLocY[i]-2, SCREEN_WIDTH - answerLocX, 21 ,BLACK);	
}

void YuWenTS::correct(){
	correntCount++;
	showScore();
	if(checkFinish()==0){
		createTSQuestion();
		showTSQuetion();
		showTangshi();
	}
}

void YuWenTS::wrong(){
	wrongCount++;
	showScore();
	showTSAnswer();
	errorDelay(3);
	if(checkFinish()==0){
		createTSQuestion();
		showTSQuetion();
		showTangshi();	
	}
}

4、实现checkFinish()

u8 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;
}

在进行代码设计时,要做好代码复用的考量,扩展几个玩法实际上并不需要太多的代码。这里是第一次进行扩展0,所以重点在于菜单传参的运用。

W801学习笔记十七:古诗学习应用——上

W801学习笔记十八:古诗学习应用——中​​​​​​​ 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot自动连接数据库的解决方案

在一次学习设计模式的时候&#xff0c;沿用一个旧的boot项目&#xff0c;想着简单&#xff0c;就把数据库给关掉了&#xff0c;结果报错 Consider the following: If you want an embedded database (H2, HSQL or Derby), please put it on the classpath. 没有数据库的需…

75.网络游戏逆向分析与漏洞攻防-角色与怪物信息的更新-伪造服务端更新属性消息欺骗客户端

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 如果看不懂、不知道现在做的什么&#xff0c;那就跟着做完看效果&#xff0c;代码看不懂是正常的&#xff0c;只要会抄就行&#xff0c;抄着抄着就能懂了 内容…

IRFBC30PBF 进口原装现货 TO-220直插 N沟道 600V/3.6A 场效应管

IRFBC30PBF是一款通用型高性能MOSFET&#xff0c;它可以应用于多种电子和电力电子设备中。以下是一些可能的应用案例&#xff1a; 1. 开关电源&#xff1a;在开关电源设计中&#xff0c;IRFBC30PBF可以作为高频开关来控制电源的通断&#xff0c;实现电压转换和电流控制。 2. …

自动驾驶融合定位系列教程四:惯性导航解算

自动驾驶融合定位系列教程四&#xff1a;惯性导航解算 一、概述 惯性导航的解算是一个实现起来非常简单&#xff0c;但是理解起来要费一番功夫的东西&#xff0c;所谓“实现”就是把公式变成代码&#xff0c;所谓“理解”&#xff0c;就是要弄明白几个公式是怎么推导出来的。…

【driver5】调用堆栈函数,printk,动态打印,ftrace,proc,sysfs

文章目录 1.内核函数调用堆栈&#xff1a;4个函数2.printk&#xff1a;cat /proc/cmdline查看consolettyS03.动态打印&#xff1a;printk是全局的且只能设打印等级&#xff0c;动态打印可控制选择模块的打印&#xff0c;在内核配置打开CONFIG_DYNAMIC_DEBUG4.ftrace&#xff1a…

【考研数学】武忠祥「基础篇」如何衔接进入强化?

如果基础篇已经做完&#xff0c;并且讲义上的例题也都做完了&#xff0c; 那下一步就是该做题了 这个时候&#xff0c;不能盲目做题&#xff0c;做什么题很重要&#xff01;我当初考研之前&#xff0c;基础也很差&#xff0c;所以考研的时候选了错误的题集&#xff0c;做起来就…

AI+客服行业落地应用

一、客服行业变迁 1.传统客服时代 &#xff08;1&#xff09;客服工作重复性高&#xff0c;技术含量低 &#xff08;2&#xff09;呼出效率低&#xff0c;客服水平参差不齐 &#xff08;3&#xff09;管理难度高&#xff0c;情绪不稳定 &#xff08;4&#xff09;服务质量…

偏微分方程算法之椭圆型方程差分格式编程示例

目录 一、示例1-五点菱形格式 1.1 C代码 1.2 计算结果 二、示例2-九点紧差分格式 2.1 C代码 2.2 计算结果 三、示例3-二阶混合边值 3.1 C代码 3.2 计算结果 本专栏对椭圆型偏微分方程的三种主要差分方法进行了介绍&#xff0c;并给出相应格式的理论推导过程。为加深对…

“全国首批EVO+ ICL(V5)临床应用专家”授牌仪式在铭依眼科举行

近日&#xff0c;“全国首批EVO ICL&#xff08;V5&#xff09;新技术临床应用专家”授牌仪式在上海铭依眼科门诊部举行。仪式现场&#xff0c;瑞金医院谢冰教授获得此项荣誉称号。铭依眼科连锁医疗机构创始人吴英、Staar Surgical代表出席仪式现场。 为让近视人群不出国门即可…

ECC 号码总结

1、问题背景 在手机开发过程中&#xff0c;经常遇见各种紧急号码问题&#xff0c;在此特意总结下紧急号码相关知识。 2、紧急号码来源 在MTK RILD EccNumberSource.h中&#xff0c;定义了如下几种紧急号码来源。 按优先级排序介绍如下 2.1、SOURCE_NETWORK 网络下发&#xff…

车牌检测识别功能实现(pyqt)

在本专题前面相关博客中已经讲述了 pyqt + yolo + lprnet 实现的车牌检测识别功能。带qt界面的。 本博文将结合前面训练好的模型来实现车牌的检测与识别。并用pyqt实现界面。最终通过检测车牌检测识别功能。 1)、通过pyqt5设计界面 ui文件如下: <?xml version="1…

K. 子串翻转回文串

给一个串 s  s1s2... sn&#xff0c;你可以选定其一个非空子串&#xff0c;然后将该子串翻转。具体来说&#xff0c;若选定的子串区间为 [l, r]&#xff08;1 ≤ l ≤ r ≤ n&#xff09;&#xff0c;则翻转后该串变为 s1s2... sl - 1srsr - 1... slsr  1... sn…

Sharding Capital: 为什么投资全链流动性基础设施 Entangle ?

写在前面&#xff1a;Entangle 项目的名称取自于量子纠缠(Quantum entanglement)&#xff0c;体现了项目对于构建连接、关联和互通的愿景。就像量子纠缠将不同的粒子联系在一起&#xff0c;Entangle 旨在通过其跨链流动性和合成衍生品的解决方案将不同的区块链网络连接在一起&a…

我们说的数据分析,到底要分析些什么?

作者 Gam 本文为CDA志愿者投稿作品 “我们说数据分析&#xff0c;到底要分析些什么&#xff1f;” 数据分析这个话题自从进入人们的视线以来&#xff0c;这个话题就成为人们茶余饭后的谈资&#xff0c;但是一千个人眼中就有一千个哈姆雷特&#xff0c;就意味着每个人对数据分…

重识来伊份:抢滩首店经济,休闲零食品牌的“面子”和“里子”

前不久&#xff0c;苹果静安零售店的首秀频频登上热搜。 这背后&#xff0c;不仅仅因为它是中国大陆最大的苹果旗舰店&#xff0c;还在于它的设计融入了时尚又古典的上海街区&#xff0c;吸引了众多市民拍照打卡。今年3月至5月&#xff0c;上海会持续举办“首发上海”春季系列…

【C++】Vector详解

Vector是什么&#xff1f; vector是C&#xff08;STL&#xff09;中的一种序列容器Vector是一个动态数组&#xff0c;内存空间是连续的&#xff0c;支持随机访问&#xff0c;支持迭代器访问 Vector代码实现 变量指向 代码初始化 #include<iostream> using namespace …

动力电池热管理方案介绍与发展方向

摘要 随着电动汽车的快速发展&#xff0c;高性能的动力电池系统成为推动电动汽车产业发展的重要因素。然而&#xff0c;伴随着能量密度提高和放电深度增加&#xff0c;电池热管理问题逐渐凸显。良好的热管理方案能够提高电池的寿命&#xff0c;保障电池性能&#xff0c;延长电…

4.堆_树(汇总版)

目录 1.树概念及结构 1.1树的概念 1.2 树的相关定义 1.3 树的表示 2.二叉树概念及结构 2.1概念 2.2现实中的二叉树 2.3 特殊的二叉树 2.4 二叉树的性质 2.5 二叉树的存储结构 3.二叉树的顺序结构及实现 3.1 二叉树的顺序结构--堆 3.2 堆的实现 3.2.1打印 3.2.2 …

el-select 点击按钮滚动到选择框顶部

主要代码是在visibleChange 在这个 popper 里面找到 .el-select-dropdown__list let popper ref.$refs.popper const ref this.$refs.select let dom popper.querySelector(.el-select-dropdown__list) setTimeout(() > { dom.scrollIntoView() }, 800) <templat…

Debian mariadb 10.11设定表名 大小写不敏感方法

目录 问题表现&#xff1a;应用中查询 表提示 表不存在 处理步骤&#xff1a; 1、查询表名大小写敏感情况&#xff1a; show global variables like %case%; 2、修改mariadb 配置设置大小写 不敏感 mysql 配置大小写不敏感 mariadb 10.11设置表名大小写不敏感 /etc/mysq…