当前位置: 首页 > news >正文

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学习笔记十八:古诗学习应用——中​​​​​​​ 

http://www.lryc.cn/news/342338.html

相关文章:

  • 类加载器ClassLoad-jdk1.8
  • 24年最新AI数字人简单混剪
  • 免备案香港主机会影响网站收录?
  • 低代码工业组态数字孪生平台
  • 代码随想录第三十八天(完全背包问题)|爬楼梯(第八期模拟笔试)|零钱兑换|完全平方数
  • idea常用知识点随记
  • (双指针) 有效三角形的个数 和为s的两个数字 三数之和 四数之和
  • 力扣每日一题114:二叉树展开为链表
  • Linux系统下使用LVM扩展逻辑卷的步骤指南
  • 探索AI编程新纪元:从零开始的智能编程之旅
  • RustGUI学习(iced)之小部件(三):如何使用下拉列表pick_list?
  • 【OceanBase诊断调优】—— Unit 迁移问题的排查方法
  • [极客大挑战 2019]PHP
  • 数据结构之跳跃表
  • 搜维尔科技:动作捕捉解决方案:销售、服务、培训和支持
  • 数据库管理-第184期 23ai:干掉MongoDB的不一定是另一个JSON数据库(20240507)
  • 刷代码随想录有感(58):二叉树的最近公共祖先
  • [开发|安卓] Android Studio 开发环境配置
  • 开发 Chrome 浏览器插件入门
  • 在数字化转型的浪潮中,CBDB百数服务商如何破浪前行?
  • 程序员的实用神器
  • spss 导入数据的时候 用于确定数据类型的值所在的百分比95%是什么意思,数据分析,医学数据分析
  • Python进阶之-上下文管理器
  • 什么年代了,还在拿考勤说事
  • 泰迪智能科技中职大数据实验室建设(职业院校大数据实验室建设指南)
  • Qt QThreadPool线程池
  • 无人机+三维建模:倾斜摄影技术详解
  • Window(Qt/Vs)软件添加版本信息
  • 工厂模式+策略模式完成多种登录模式的实现
  • 赋能企业数字化转型 - 易点易动固定资产系统与飞书实现协同管理