diff --git a/source/app/task_game.c b/source/app/task_game.c index d2f6390..5ba4356 100644 --- a/source/app/task_game.c +++ b/source/app/task_game.c @@ -29,6 +29,7 @@ // 游戏内容码 S_TASK_GAME _s_task_game; +POINT_BUF pointbuf; // 非点读类游戏 #define GAME_OID_ZLXS_4 0x2800 @@ -62,46 +63,49 @@ void L3_task_game_init(void) { U8 i = 0; U8 j = 0; + U8 *p = (U8*)&pointbuf; L1_task_init(&_s_task_game.task); L3_task_s_go(_s_task_game,D_task_init); _s_task_game.read_oid = 0; _s_task_game.error_oid = EEROR_OID; _s_task_game.game_maxseconds = GAME_MAX_SECONDS; - for (i = 0; i < game_num_max; i++) + for (i = 0; i < sizeof(pointbuf); i++) { - _s_task_game.game_info[i].game_oid = 0; - for (j = 0; j < game_supported_oid_max; j++) - { - _s_task_game.game_info[i].game_supported_oid[j].oid = 0; - _s_task_game.game_info[i].game_supported_oid[j].yes_or_no = 1; - _s_task_game.game_info[i].game_supported_oid[j].point_audio = NULL; - _s_task_game.game_info[i].game_supported_oid[j].handled = 0; - } + *p++ = 0; } + p = (U8*)&pointbuf; + + // 找不同1星 _s_task_game.game_info[0].game_oid = GAME_OID_ZBT_1; _s_task_game.game_info[0].game_audio = &audio_game_different_1; + _s_task_game.game_info[0].game_supported_oid = pointbuf.zbt_1; + _s_task_game.game_info[0].game_oid_num = zbt_1_num; _s_task_game.game_info[0].game_supported_oid[0].oid = 0xB001; _s_task_game.game_info[0].game_supported_oid[1].oid = 0xB002; _s_task_game.game_info[0].game_supported_oid[2].oid = 0xB003; // _s_task_game.game_info[0].game_supported_oid[3].oid = 0xB004; _s_task_game.game_info[0].game_supported_oid[3].oid = 0xB0FF; //错误码 - _s_task_game.game_info[0].game_supported_oid[3].yes_or_no = 0; + _s_task_game.game_info[0].game_supported_oid[3].yes_or_no = 1; _s_task_game.game_info[0].game_order = 0; _s_task_game.game_info[0].game_timeout_seconds = 60; _s_task_game.game_info[0].game_score = 0; + + // 走迷宫1星 _s_task_game.game_info[2].game_oid = GAME_OID_ZMG_1; _s_task_game.game_info[2].game_audio = &audio_game_maze_1; + _s_task_game.game_info[2].game_supported_oid = pointbuf.zmg_1; + _s_task_game.game_info[2].game_oid_num = zmg_1_num; _s_task_game.game_info[2].game_supported_oid[0].oid = 0xC001; _s_task_game.game_info[2].game_supported_oid[1].oid = 0xC002; _s_task_game.game_info[2].game_supported_oid[2].oid = 0xC003; _s_task_game.game_info[2].game_supported_oid[3].oid = 0xC004; _s_task_game.game_info[2].game_supported_oid[4].oid = 0xC005; _s_task_game.game_info[2].game_supported_oid[5].oid = 0xC0FF; //错误码 - _s_task_game.game_info[2].game_supported_oid[5].yes_or_no = 0; + _s_task_game.game_info[2].game_supported_oid[5].yes_or_no = 1; _s_task_game.game_info[2].game_order = 1; _s_task_game.game_info[2].game_timeout_seconds = 60; _s_task_game.game_info[2].game_score = 0; @@ -109,6 +113,8 @@ void L3_task_game_init(void) // 舒尔特方格3星 _s_task_game.game_info[1].game_oid = GAME_OID_SHERT_1; _s_task_game.game_info[1].game_audio = &audio_game_shulte_1; + _s_task_game.game_info[1].game_supported_oid = pointbuf.shert_1; + _s_task_game.game_info[1].game_oid_num = shert_1_num; _s_task_game.game_info[1].game_supported_oid[0].oid = 0x2201; _s_task_game.game_info[1].game_supported_oid[1].oid = 0x2202; _s_task_game.game_info[1].game_supported_oid[2].oid = 0x2203; @@ -135,7 +141,7 @@ void L3_task_game_init(void) _s_task_game.game_info[1].game_supported_oid[23].oid = 0x2218; _s_task_game.game_info[1].game_supported_oid[24].oid = 0x2219; _s_task_game.game_info[1].game_supported_oid[25].oid = 0x22FF; //错误码 - _s_task_game.game_info[1].game_supported_oid[25].yes_or_no = 0; + _s_task_game.game_info[1].game_supported_oid[25].yes_or_no = 1; _s_task_game.game_info[1].game_order = 1; _s_task_game.game_info[1].game_timeout_seconds = 120; _s_task_game.game_info[1].game_score = 0; @@ -143,6 +149,8 @@ void L3_task_game_init(void) // 众里寻三3星 _s_task_game.game_info[3].game_oid = GAME_OID_ZLXS_4; _s_task_game.game_info[3].game_audio = &audio_game_zlxs_4; + _s_task_game.game_info[3].game_supported_oid = pointbuf.zlxs_4; + _s_task_game.game_info[3].game_oid_num = zlxs_4_num; _s_task_game.game_info[3].game_supported_oid[0].oid = 0x10FE; _s_task_game.game_info[3].game_order = 0; _s_task_game.game_info[3].game_timeout_seconds = 60; @@ -150,6 +158,8 @@ void L3_task_game_init(void) // 火眼金晶3星 _s_task_game.game_info[4].game_oid = GAME_OID_HYJJ_3; _s_task_game.game_info[4].game_audio = &audio_game_hyjj_3; + _s_task_game.game_info[4].game_supported_oid = pointbuf.hyjj_3; + _s_task_game.game_info[4].game_oid_num = hyjj_3_num; _s_task_game.game_info[4].game_supported_oid[0].oid = 0x10FE; _s_task_game.game_info[4].game_order = 0; _s_task_game.game_info[4].game_timeout_seconds = 60; @@ -157,6 +167,8 @@ void L3_task_game_init(void) // 火眼金晶4星 _s_task_game.game_info[5].game_oid = GAME_OID_HYJJ_4; _s_task_game.game_info[5].game_audio = &audio_game_hyjj_4; + _s_task_game.game_info[5].game_supported_oid = pointbuf.hyjj_4; + _s_task_game.game_info[5].game_oid_num = hyjj_4_num; _s_task_game.game_info[5].game_supported_oid[0].oid = 0x10FE; _s_task_game.game_info[5].game_order = 0; _s_task_game.game_info[5].game_timeout_seconds = 60; @@ -164,6 +176,8 @@ void L3_task_game_init(void) // 火眼金晶5星 _s_task_game.game_info[6].game_oid = GAME_OID_HYJJ_5; _s_task_game.game_info[6].game_audio = &audio_game_hyjj_5; + _s_task_game.game_info[0].game_supported_oid = pointbuf.hyjj_5; + _s_task_game.game_info[6].game_oid_num = hyjj_5_num; _s_task_game.game_info[6].game_supported_oid[0].oid = 0x10FE; _s_task_game.game_info[6].game_order = 0; _s_task_game.game_info[6].game_timeout_seconds = 60; @@ -171,6 +185,8 @@ void L3_task_game_init(void) // 从小到大4星 _s_task_game.game_info[7].game_oid = GAME_OID_CXDD_4; _s_task_game.game_info[7].game_audio = &audio_game_cxdd_4; + _s_task_game.game_info[7].game_supported_oid = pointbuf.cxdd_4; + _s_task_game.game_info[7].game_oid_num = cxdd_4_num; _s_task_game.game_info[7].game_supported_oid[0].oid = 0x10FE; _s_task_game.game_info[7].game_order = 0; _s_task_game.game_info[7].game_timeout_seconds = 60; @@ -178,6 +194,8 @@ void L3_task_game_init(void) // 明察秋毫4星 _s_task_game.game_info[8].game_oid = GAME_OID_MCQH_4; _s_task_game.game_info[8].game_audio = &audio_game_mcqh_4; + _s_task_game.game_info[8].game_supported_oid = pointbuf.mcqh_4; + _s_task_game.game_info[8].game_oid_num = mcqh_4_num; _s_task_game.game_info[8].game_supported_oid[0].oid = 0x10FE; _s_task_game.game_info[8].game_order = 0; _s_task_game.game_info[8].game_timeout_seconds = 60; @@ -185,6 +203,8 @@ void L3_task_game_init(void) // 明察秋毫5星 _s_task_game.game_info[9].game_oid = GAME_OID_MCQH_5; _s_task_game.game_info[9].game_audio = &audio_game_mcqh_5; + _s_task_game.game_info[9].game_supported_oid = pointbuf.mcqh_5; + _s_task_game.game_info[9].game_oid_num = mcqh_5_num; _s_task_game.game_info[9].game_supported_oid[0].oid = 0x10FE; _s_task_game.game_info[9].game_order = 0; _s_task_game.game_info[9].game_timeout_seconds = 60; @@ -192,6 +212,8 @@ void L3_task_game_init(void) // 积木再现3星 _s_task_game.game_info[10].game_oid = GAME_OID_JMZX_3; _s_task_game.game_info[10].game_audio = &audio_game_jmzx_3; + _s_task_game.game_info[10].game_supported_oid = pointbuf.jmzx_3; + _s_task_game.game_info[10].game_oid_num = jmzx_3_num; _s_task_game.game_info[10].game_supported_oid[0].oid = 0x10FE; _s_task_game.game_info[10].game_order = 0; _s_task_game.game_info[10].game_timeout_seconds = 60; @@ -199,6 +221,8 @@ void L3_task_game_init(void) // 积木再现4星 _s_task_game.game_info[11].game_oid = GAME_OID_JMZX_4; _s_task_game.game_info[11].game_audio = &audio_game_jmzx_4; + _s_task_game.game_info[11].game_supported_oid = pointbuf.jmzx_4; + _s_task_game.game_info[11].game_oid_num = jmzx_4_num; _s_task_game.game_info[11].game_supported_oid[0].oid = 0x10FE; _s_task_game.game_info[11].game_order = 0; _s_task_game.game_info[11].game_timeout_seconds = 60; @@ -206,6 +230,8 @@ void L3_task_game_init(void) // 积木再现5星 _s_task_game.game_info[12].game_oid = GAME_OID_JMZX_5; _s_task_game.game_info[12].game_audio = &audio_game_jmzx_5; + _s_task_game.game_info[12].game_supported_oid = pointbuf.jmzx_5; + _s_task_game.game_info[12].game_oid_num = jmzx_5_num; _s_task_game.game_info[12].game_supported_oid[0].oid = 0x10FE; _s_task_game.game_info[12].game_order = 0; _s_task_game.game_info[12].game_timeout_seconds = 60; @@ -213,6 +239,8 @@ void L3_task_game_init(void) // 还原钟表1星 _s_task_game.game_info[13].game_oid = GAME_OID_HYZB_1; _s_task_game.game_info[13].game_audio = &audio_game_hyzb_1; + _s_task_game.game_info[13].game_supported_oid = pointbuf.hyzb_1; + _s_task_game.game_info[13].game_oid_num = hyzb_1_num; _s_task_game.game_info[13].game_supported_oid[0].oid = 0x40FE; _s_task_game.game_info[13].game_order = 0; _s_task_game.game_info[13].game_timeout_seconds = 60; @@ -220,6 +248,8 @@ void L3_task_game_init(void) // 还原钟表2星 _s_task_game.game_info[14].game_oid = GAME_OID_HYZB_2; _s_task_game.game_info[14].game_audio = &audio_game_hyzb_2; + _s_task_game.game_info[14].game_supported_oid = pointbuf.hyzb_2; + _s_task_game.game_info[14].game_oid_num = hyzb_2_num; _s_task_game.game_info[14].game_supported_oid[0].oid = 0x40FE; _s_task_game.game_info[14].game_order = 0; _s_task_game.game_info[14].game_timeout_seconds = 60; @@ -227,6 +257,8 @@ void L3_task_game_init(void) // 时间规划3星 _s_task_game.game_info[15].game_oid = GAME_OID_SJGH_3; _s_task_game.game_info[15].game_audio = &audio_game_sjgh_3; + _s_task_game.game_info[15].game_supported_oid = pointbuf.sjgh_3; + _s_task_game.game_info[15].game_oid_num = sjgh_3_num; _s_task_game.game_info[15].game_supported_oid[0].oid = 0x40FE; _s_task_game.game_info[15].game_order = 0; _s_task_game.game_info[15].game_timeout_seconds = 60; @@ -234,6 +266,8 @@ void L3_task_game_init(void) // 计算时间4星 _s_task_game.game_info[16].game_oid = GAME_OID_JSSJ_4; _s_task_game.game_info[16].game_audio = &audio_game_jssj_4; + _s_task_game.game_info[16].game_supported_oid = pointbuf.jssj_4; + _s_task_game.game_info[16].game_oid_num = jssj_4_num; _s_task_game.game_info[16].game_supported_oid[0].oid = 0x40FE; _s_task_game.game_info[16].game_order = 0; _s_task_game.game_info[16].game_timeout_seconds = 60; @@ -241,6 +275,8 @@ void L3_task_game_init(void) // 计算时间5星 _s_task_game.game_info[17].game_oid = GAME_OID_JSSJ_5; _s_task_game.game_info[17].game_audio = &audio_game_jssj_5; + _s_task_game.game_info[17].game_supported_oid = pointbuf.jssj_5; + _s_task_game.game_info[17].game_oid_num = jssj_5_num; _s_task_game.game_info[17].game_supported_oid[0].oid = 0x40FE; _s_task_game.game_info[17].game_order = 0; _s_task_game.game_info[17].game_timeout_seconds = 60; @@ -320,7 +356,7 @@ void L3_task_game_handler(S_TASK_GAME *s) s->eeror_times = 0; s->start_seconds = s_nos_tick.t_1s; s->timeover_flag = 0; - for (j = 0; j < game_supported_oid_max; j++) + for (j = 0; j < s->game_info[s->game_info_index].game_oid_num; j++) { s->game_info[s->game_info_index].game_supported_oid[j].handled = 0; } @@ -340,7 +376,7 @@ void L3_task_game_handler(S_TASK_GAME *s) TTSS_Task_step(D_task_GAME_PLAY) U8 i = 0,j = 0; U8 has_unhandled_point = 0; - for (i = 0; i < game_supported_oid_max; i++) + for (i = 0; i < s->game_info[s->game_info_index].game_oid_num; i++) { GAME_INF* g = &s->game_info[_s_task_game.game_info_index]; POINT_INFO* p = &s->game_info[_s_task_game.game_info_index].game_supported_oid[i]; @@ -350,7 +386,7 @@ void L3_task_game_handler(S_TASK_GAME *s) } if (s->read_oid != p->oid && has_unhandled_point == 0 && g->game_order == 1) { - if (p->yes_or_no == 1 && p->handled == 0) + if (p->yes_or_no == 0 && p->handled == 0) { has_unhandled_point = 1; } @@ -358,7 +394,7 @@ void L3_task_game_handler(S_TASK_GAME *s) else if(s->read_oid == p->oid) { //错误码 或者 是正确码有序,但是存在未处理的点 - if (p->yes_or_no == 0 || (p->yes_or_no == 1 && g->game_order == 1 && has_unhandled_point == 1)) + if (p->yes_or_no == 1 || (p->yes_or_no == 0 && g->game_order == 1 && has_unhandled_point == 1)) { s->eeror_times++; L0_uart0_sendstr("eeror_times = "); @@ -394,10 +430,10 @@ void L3_task_game_handler(S_TASK_GAME *s) TTSS_Task_step(D_task_GAME_COMPLETED) U8 completed = 1; //假设已完成 U8 i = 0; - for (i = 0; i < game_supported_oid_max; i++) + for (i = 0; i < s->game_info[s->game_info_index].game_oid_num; i++) { POINT_INFO* p = &_s_task_game.game_info[_s_task_game.game_info_index].game_supported_oid[i]; - if (p->oid != 0 && p->yes_or_no == 1 && p->handled == 0) + if (p->oid != 0 && p->yes_or_no == 0 && p->handled == 0) { completed = 0; break; diff --git a/source/app/task_game.h b/source/app/task_game.h index c65be0f..da74c25 100644 --- a/source/app/task_game.h +++ b/source/app/task_game.h @@ -19,22 +19,65 @@ #include "../bsp/bsp_WT2605B.h" -#define game_supported_oid_max 32 -#define game_num_max 5 +// #define game_supported_oid_max 32 +#define game_num_max 20 + +#define zbt_1_num 5 +#define zmg_1_num 6 +#define shert_1_num 32 +#define zlxs_4_num 1 +#define hyjj_3_num 1 +#define hyjj_4_num 1 +#define hyjj_5_num 1 +#define cxdd_4_num 1 +#define mcqh_4_num 1 +#define mcqh_5_num 1 +#define jmzx_3_num 1 +#define jmzx_4_num 1 +#define jmzx_5_num 1 +#define hyzb_1_num 1 +#define hyzb_2_num 1 +#define sjgh_3_num 1 +#define jssj_4_num 1 +#define jssj_5_num 1 + typedef struct _point_info { U16 oid; //点的oid值 - U8 yes_or_no; //0错误,1正确 + U8 yes_or_no; //1错误,0正确 TS_SPEECH_AUDIO* point_audio; //点对应的音频 U8 handled; //游戏进行过程中是否已经被处理 0 未处理,1 已处理 }POINT_INFO; +typedef struct _point_buf +{ + POINT_INFO zbt_1[zbt_1_num]; + POINT_INFO zmg_1[zmg_1_num]; + POINT_INFO shert_1[shert_1_num]; + POINT_INFO zlxs_4[zlxs_4_num]; + POINT_INFO hyjj_3[hyjj_3_num]; + POINT_INFO hyjj_4[hyjj_4_num]; + POINT_INFO hyjj_5[hyjj_5_num]; + POINT_INFO cxdd_4[cxdd_4_num]; + POINT_INFO mcqh_4[mcqh_4_num]; + POINT_INFO mcqh_5[mcqh_5_num]; + POINT_INFO jmzx_3[jmzx_3_num]; + POINT_INFO jmzx_4[jmzx_4_num]; + POINT_INFO jmzx_5[jmzx_5_num]; + POINT_INFO hyzb_1[hyzb_1_num]; + POINT_INFO hyzb_2[hyzb_2_num]; + POINT_INFO sjgh_3[sjgh_3_num]; + POINT_INFO jssj_4[jssj_4_num]; + POINT_INFO jssj_5[jssj_5_num]; +}POINT_BUF; + typedef struct game_info { U16 game_oid; //游戏oid TS_SPEECH_AUDIO* game_audio; //游戏音频 - POINT_INFO game_supported_oid[game_supported_oid_max]; //游戏支持的point + POINT_INFO* game_supported_oid; //游戏支持的point + U8 game_oid_num; U8 game_order; //游戏顺序 0不排序,1排序 U16 game_timeout_seconds; //游戏超时时间(秒) U16 game_score; //游戏得分