当前位置:   article > 正文

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

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

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

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

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

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

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

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

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

现在我们开始。

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

  1. [
  2. {
  3. "t": "三分钟限时挑战",
  4. "i": "-",
  5. "d": 0,
  6. "g": {},
  7. "s": [
  8. {
  9. "t": "语文",
  10. "i": "menu/yuwen.png",
  11. "d": 0,
  12. "g": {},
  13. "s": [
  14. {
  15. "t": "唐诗三百首",
  16. "i": "-",
  17. "d": 302,
  18. "g": {"w":1, "m":1},
  19. "s": []
  20. }
  21. ]
  22. },
  23. ]
  24. },
  25. {
  26. "t": "五十题竞速挑战",
  27. "i": "-",
  28. "d": 0,
  29. "g": {},
  30. "s": [
  31. {
  32. "t": "语文",
  33. "i": "menu/yuwen.png",
  34. "d": 0,
  35. "g": {},
  36. "s": [
  37. {
  38. "t": "唐诗三百首",
  39. "i": "-",
  40. "d": 302,
  41. "g": {"w":2, "m":1},
  42. "s": []
  43. }
  44. ]
  45. },
  46. ]
  47. },
  48. {
  49. "t": "零错误闯关挑战",
  50. "i": "-",
  51. "d": 0,
  52. "g": {},
  53. "s": [
  54. {
  55. "t": "语文",
  56. "i": "menu/yuwen.png",
  57. "d": 0,
  58. "g": {},
  59. "s": [
  60. {
  61. "t": "唐诗三百首",
  62. "i": "-",
  63. "d": 302,
  64. "g": {"w":3, "m":1},
  65. "s": []
  66. }
  67. ]
  68. }
  69. ]
  70. },
  71. {
  72. "t": "关于",
  73. "i": "menu/test16.png",
  74. "d": 102,
  75. "g": {},
  76. "s": []
  77. }
  78. ]

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

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

YuWenTs.cpp

  1. int YuWenTS::scean_init(cJSON* param){
  2. 。。。
  3. winMode= cJSON_GetObjectItem(param,"w")->valueint;
  4. 。。。
  5. start();
  6. return 0;
  7. }

menu.cpp

  1. SceanResult Menu::tick(u32 ticks){
  2. 。。。
  3. if(KEY_SEL){ //进入
  4. cJSON* item = (cJSON*) ctlList->selectItem()->tag;
  5. int sceanId = cJSON_GetObjectItem(item,"d")->valueint;
  6. if(sceanId!= 0){
  7. IScean *scean =createScean(sceanId);
  8. if(scean !=NULL){
  9. scean->scean_init(cJSON_GetObjectItem(item,"g"));
  10. ListPushBack(sceanList, scean);
  11. }
  12. return SceanResult_Done;
  13. }
  14. cJSON* sitem = cJSON_GetObjectItem(item,"s");
  15. if(cJSON_GetArraySize(sitem) > 0){
  16. ListPushBack(menuList, sitem);
  17. showMenu();
  18. return SceanResult_Done;
  19. }
  20. return SceanResult_Done;
  21. }
  22. ctlList->tick(ticks);
  23. ran_max(10);
  24. return SceanResult_Done;
  25. }

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

YuWenTs.cpp

  1. SceanResult YuWenTS::tick(u32 ticks){
  2. if(KEY_EXIT) {
  3. printf("goto top menu from About.\n");
  4. return SceanResult_EXIT;
  5. }
  6. if(isFinished){
  7. if(KEY_SEL) {
  8. start();
  9. return SceanResult_Done;
  10. }
  11. }else{
  12. totalTime+=ticks;
  13. showTime();
  14. if(checkFinish()){
  15. return SceanResult_Done;
  16. }
  17. 。。。
  18. ran_max(10);
  19. }
  20. return SceanResult_Done;
  21. }
  22. void YuWenTS::showTSAnswer(){
  23. Display_String(answerX, answerY, &optionMiss, dataLine(answerIdx));
  24. for(int i=0;i<4;i++)
  25. if(currentQuestion->ans !=i)
  26. Display_Fill_Rectangle2(answerLocX, answerLocY[i]-2, SCREEN_WIDTH - answerLocX, 21 ,BLACK);
  27. }
  28. void YuWenTS::correct(){
  29. correntCount++;
  30. showScore();
  31. if(checkFinish()==0){
  32. createTSQuestion();
  33. showTSQuetion();
  34. showTangshi();
  35. }
  36. }
  37. void YuWenTS::wrong(){
  38. wrongCount++;
  39. showScore();
  40. showTSAnswer();
  41. errorDelay(3);
  42. if(checkFinish()==0){
  43. createTSQuestion();
  44. showTSQuetion();
  45. showTangshi();
  46. }
  47. }

4、实现checkFinish()

  1. u8 checkFinish(){
  2. switch (winMode) {
  3. case 1:
  4. if(totalTime > 180000) {
  5. finish();
  6. return 1;
  7. }
  8. break;
  9. case 2:
  10. if(correntCount+ wrongCount == 50) {
  11. finish();
  12. return 1;
  13. }
  14. break;
  15. case 3:
  16. if(wrongCount>0) {
  17. finish();
  18. return 1;
  19. }
  20. break;
  21. }
  22. return 0;
  23. }

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

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

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/545556
推荐阅读
相关标签
  

闽ICP备14008679号