|
@ -10,84 +10,262 @@ |
|
|
/// @note cc_AS_stc02
|
|
|
/// @note cc_AS_stc02
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
|
#include "task_game.h" |
|
|
#include "../app/task_game.h" |
|
|
#include "../bsp/bsp_oid.h" |
|
|
#include "../bsp/bsp_oid.h" |
|
|
#include "app_task_speech.h" |
|
|
|
|
|
#include "../app/app_config.h" |
|
|
#include "../app/app_config.h" |
|
|
#include "../bsp/bsp_config.h" |
|
|
#include "../bsp/bsp_config.h" |
|
|
#include "../msp/uart0.h" |
|
|
#include "../msp/uart0.h" |
|
|
#include "../msp/uart3.h" |
|
|
#include "../msp/uart3.h" |
|
|
|
|
|
#include "../bsp/bsp_WT2605B.h" |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 系统不识别的码:无效码 0x3FFF,0x0000
|
|
|
|
|
|
// 支持码:本游戏支持的
|
|
|
|
|
|
// 正确码和错误码:单个游戏内的
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 游戏标识码
|
|
|
|
|
|
// 游戏内容码
|
|
|
|
|
|
|
|
|
S_TASK_GAME _s_task_game; |
|
|
S_TASK_GAME _s_task_game; |
|
|
|
|
|
|
|
|
//=============================================
|
|
|
#define GAME_OID_ZBT 0x3133 |
|
|
|
|
|
#define GAME_OID_SHERT 0x3142 |
|
|
|
|
|
#define GAME_OID_ZMG 0x3152 |
|
|
|
|
|
|
|
|
|
|
|
#define EEROR_OID 0x3FFF //无效码
|
|
|
|
|
|
#define GAME_MAX_SECONDS 600 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void L3_task_game_init(void) |
|
|
void L3_task_game_init(void) |
|
|
{ |
|
|
{ |
|
|
|
|
|
U8 i = 0; |
|
|
|
|
|
U8 j = 0; |
|
|
L1_task_init(&_s_task_game.task); |
|
|
L1_task_init(&_s_task_game.task); |
|
|
L3_task_s_go(_s_task_game,D_task_init); |
|
|
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++) |
|
|
|
|
|
{ |
|
|
|
|
|
_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; |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
_s_task_game.game_info[0].game_oid = GAME_OID_ZBT; |
|
|
|
|
|
_s_task_game.game_info[0].game_audio = &audio_game_different; |
|
|
|
|
|
_s_task_game.game_info[0].game_supported_oid[0].oid = 0x3135; |
|
|
|
|
|
_s_task_game.game_info[0].game_supported_oid[1].oid = 0x3136; |
|
|
|
|
|
_s_task_game.game_info[0].game_supported_oid[2].oid = 0x3137; |
|
|
|
|
|
_s_task_game.game_info[0].game_supported_oid[3].oid = 0x3138; |
|
|
|
|
|
_s_task_game.game_info[0].game_supported_oid[4].oid = 0x3178; |
|
|
|
|
|
_s_task_game.game_info[0].game_supported_oid[4].yes_or_no = 0; |
|
|
|
|
|
|
|
|
|
|
|
_s_task_game.game_info[0].game_order = 0; |
|
|
|
|
|
_s_task_game.game_info[0].game_order_index = 0; |
|
|
|
|
|
_s_task_game.game_info[0].game_timeout_seconds = 600; |
|
|
|
|
|
_s_task_game.game_info[0].game_score = 0; |
|
|
|
|
|
|
|
|
|
|
|
_s_task_game.game_info[1].game_oid = GAME_OID_SHERT; |
|
|
|
|
|
_s_task_game.game_info[1].game_audio = &audio_game_shulte; |
|
|
|
|
|
_s_task_game.game_info[1].game_supported_oid[0].oid = 0x3144; |
|
|
|
|
|
_s_task_game.game_info[1].game_supported_oid[1].oid = 0x3145; |
|
|
|
|
|
_s_task_game.game_info[1].game_supported_oid[2].oid = 0x3146; |
|
|
|
|
|
_s_task_game.game_info[1].game_supported_oid[3].oid = 0x3147; |
|
|
|
|
|
_s_task_game.game_info[1].game_supported_oid[4].oid = 0x3148; |
|
|
|
|
|
_s_task_game.game_info[1].game_supported_oid[5].oid = 0x3149; |
|
|
|
|
|
_s_task_game.game_info[1].game_supported_oid[6].oid = 0x314A; |
|
|
|
|
|
_s_task_game.game_info[1].game_supported_oid[7].oid = 0x314C; |
|
|
|
|
|
_s_task_game.game_info[1].game_supported_oid[8].oid = 0x314D; |
|
|
|
|
|
_s_task_game.game_info[1].game_supported_oid[9].oid = 0x314E; |
|
|
|
|
|
_s_task_game.game_info[1].game_supported_oid[10].oid = 0x3159; |
|
|
|
|
|
_s_task_game.game_info[1].game_supported_oid[11].oid = 0x315A; |
|
|
|
|
|
_s_task_game.game_info[1].game_supported_oid[12].oid = 0x315B; |
|
|
|
|
|
_s_task_game.game_info[1].game_supported_oid[13].oid = 0x315C; |
|
|
|
|
|
_s_task_game.game_info[1].game_supported_oid[14].oid = 0x315D; |
|
|
|
|
|
_s_task_game.game_info[1].game_supported_oid[15].oid = 0x315E; |
|
|
|
|
|
_s_task_game.game_info[1].game_supported_oid[16].oid = 0x3167; |
|
|
|
|
|
_s_task_game.game_info[1].game_supported_oid[17].oid = 0x3168; |
|
|
|
|
|
_s_task_game.game_info[1].game_supported_oid[18].oid = 0x3169; |
|
|
|
|
|
_s_task_game.game_info[1].game_supported_oid[19].oid = 0x316A; |
|
|
|
|
|
_s_task_game.game_info[1].game_supported_oid[20].oid = 0x316B; |
|
|
|
|
|
_s_task_game.game_info[1].game_supported_oid[21].oid = 0x316C; |
|
|
|
|
|
_s_task_game.game_info[1].game_supported_oid[22].oid = 0x3175; |
|
|
|
|
|
_s_task_game.game_info[1].game_supported_oid[23].oid = 0x3176; |
|
|
|
|
|
_s_task_game.game_info[1].game_supported_oid[24].oid = 0x3177; |
|
|
|
|
|
_s_task_game.game_info[1].game_supported_oid[25].oid = 0x3179; |
|
|
|
|
|
_s_task_game.game_info[1].game_supported_oid[25].yes_or_no = 0; |
|
|
|
|
|
_s_task_game.game_info[1].game_order = 1; |
|
|
|
|
|
_s_task_game.game_info[1].game_order_index = 0; |
|
|
|
|
|
_s_task_game.game_info[1].game_timeout_seconds = 600; |
|
|
|
|
|
_s_task_game.game_info[1].game_score = 0; |
|
|
|
|
|
|
|
|
|
|
|
_s_task_game.game_info[2].game_oid = GAME_OID_ZMG; |
|
|
|
|
|
_s_task_game.game_info[2].game_audio = &audio_game_maze; |
|
|
|
|
|
_s_task_game.game_info[2].game_supported_oid[0].oid = 0x4E85; |
|
|
|
|
|
_s_task_game.game_info[2].game_supported_oid[1].oid = 0x4E86; |
|
|
|
|
|
_s_task_game.game_info[2].game_supported_oid[2].oid = 0x4E88; |
|
|
|
|
|
_s_task_game.game_info[2].game_supported_oid[3].oid = 0x4E89; |
|
|
|
|
|
_s_task_game.game_info[2].game_supported_oid[4].oid = 0x4E9A; |
|
|
|
|
|
_s_task_game.game_info[2].game_supported_oid[5].oid = 0x317A; |
|
|
|
|
|
_s_task_game.game_info[2].game_supported_oid[5].yes_or_no = 0; |
|
|
|
|
|
_s_task_game.game_info[2].game_order = 1; |
|
|
|
|
|
_s_task_game.game_info[2].game_order_index = 0; |
|
|
|
|
|
_s_task_game.game_info[2].game_timeout_seconds = 600; |
|
|
|
|
|
_s_task_game.game_info[2].game_score = 0; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_s_task_game.game_info_index = -1; |
|
|
|
|
|
_s_task_game.game_point_index = -1; |
|
|
|
|
|
_s_task_game.start_seconds = 0; |
|
|
|
|
|
_s_task_game.eeror_times = 0; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
#define D_task_GAME_SELECT 0x60 |
|
|
#define D_task_READ_OID 0x50 |
|
|
#define D_task_GAME_ZMG 0x61 |
|
|
#define D_task_GAME_SWITCH 0x51 |
|
|
#define D_task_GAME_ZBT 0x62 |
|
|
#define D_task_GAME_PLAY 0x52 |
|
|
#define D_task_GAME_SchulteGrid 0x63 |
|
|
#define D_task_GAME_COMPLETED 0x53 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void L3_task_game_handler(S_TASK_GAME *s) |
|
|
void L3_task_game_handler(S_TASK_GAME *s) |
|
|
{ |
|
|
{ |
|
|
|
|
|
|
|
|
TTSS_Task_init() |
|
|
TTSS_Task_init() |
|
|
L2_task_go(D_task_GAME_SELECT); |
|
|
L2_task_go(D_task_READ_OID); |
|
|
|
|
|
|
|
|
TTSS_Task_step(D_task_GAME_SELECT) |
|
|
TTSS_Task_step(D_task_READ_OID) |
|
|
if(R.game.type == 0x51) |
|
|
L1_Oid_readoid(); |
|
|
// if(R.game.type == 0xDA)
|
|
|
|
|
|
|
|
|
if (ts_oid.ok == 1) |
|
|
{ |
|
|
{ |
|
|
L0_uart0_uc('A'); |
|
|
ts_oid.ok = 0; |
|
|
if (R.game.dat == 0x42) |
|
|
s->read_oid = ts_oid.rec.d16[3]; |
|
|
// if (R.game.dat == 0xC1)
|
|
|
if (s->read_oid != EEROR_OID && s->read_oid != 0x0000) |
|
|
{ |
|
|
{ |
|
|
R.game.type = 0; |
|
|
L2_task_go_Tdelay(D_task_GAME_SWITCH,D_Tdelay_100ms); |
|
|
R.game.dat = 0; |
|
|
} |
|
|
L0_uart0_uc('z'); |
|
|
|
|
|
L0_uart3_sendArray((U8 *)&audio_zmg,9); |
|
|
|
|
|
Lc_delay_ms(1000); |
|
|
|
|
|
L2_task_go_Tdelay(D_task_GAME_ZMG, 0); |
|
|
|
|
|
} |
|
|
} |
|
|
if (R.game.dat == 0xC2) |
|
|
TTSS_Task_step(D_task_GAME_SWITCH) |
|
|
|
|
|
U8 i = 0; |
|
|
|
|
|
U8 j = 0; |
|
|
|
|
|
|
|
|
|
|
|
for (i = 0; i < game_num_max; i++) |
|
|
{ |
|
|
{ |
|
|
L0_uart3_sendArray((U8 *)&audio_zbt,9); |
|
|
//目前仅支持3个游戏,其余游戏均初始化为0
|
|
|
Lc_delay_ms(1000); |
|
|
if (s->game_info[i].game_oid == 0) |
|
|
L2_task_go_Tdelay(D_task_GAME_ZBT, 0); |
|
|
{ |
|
|
|
|
|
break; |
|
|
} |
|
|
} |
|
|
if (R.game.dat == 0xC3) |
|
|
if (s->game_info[i].game_oid == s->read_oid) |
|
|
|
|
|
{ |
|
|
|
|
|
s->game_info_index = i; |
|
|
|
|
|
s->eeror_times = 0; |
|
|
|
|
|
s->start_seconds = s_nos_tick.t_1s; |
|
|
|
|
|
for (j = 0; j < game_supported_oid_max; j++) |
|
|
{ |
|
|
{ |
|
|
L0_uart3_sendArray((U8 *)&audio_SchulteGrid,9); |
|
|
s->game_info[s->game_info_index].game_supported_oid[j].handled = 0; |
|
|
Lc_delay_ms(1000); |
|
|
|
|
|
L2_task_go_Tdelay(D_task_GAME_SchulteGrid, 0); |
|
|
|
|
|
} |
|
|
} |
|
|
|
|
|
L2_WT2605B_Broadcast(s->game_info[i].game_audio); |
|
|
|
|
|
L2_task_go_Tdelay(D_task_READ_OID,D_Tdelay_100ms); |
|
|
|
|
|
return; |
|
|
} |
|
|
} |
|
|
else if (R.game.type) |
|
|
} |
|
|
|
|
|
if (s->game_info_index == -1) |
|
|
{ |
|
|
{ |
|
|
R.game.type = 0; |
|
|
L2_task_go_Tdelay(D_task_READ_OID,D_Tdelay_100ms); |
|
|
R.game.dat = 0; |
|
|
|
|
|
L0_uart3_sendArray((U8 *)&audio_select,9); |
|
|
|
|
|
Lc_delay_ms(1000); |
|
|
|
|
|
L2_task_go_Tdelay(D_task_GAME_SELECT, 0); |
|
|
|
|
|
} |
|
|
} |
|
|
|
|
|
else |
|
|
|
|
|
{ |
|
|
|
|
|
L2_task_go_Tdelay(D_task_GAME_PLAY,D_Tdelay_100ms); |
|
|
|
|
|
} |
|
|
|
|
|
TTSS_Task_step(D_task_GAME_PLAY) |
|
|
|
|
|
U8 i = 0,j = 0; |
|
|
|
|
|
for (i = 0; i < game_supported_oid_max; i++) |
|
|
|
|
|
{ |
|
|
|
|
|
POINT_INFO* p = &_s_task_game.game_info[_s_task_game.game_info_index].game_supported_oid[i]; |
|
|
|
|
|
if (p->oid == 0) |
|
|
|
|
|
{ |
|
|
|
|
|
break; |
|
|
|
|
|
} |
|
|
|
|
|
if (s->read_oid == p->oid) |
|
|
|
|
|
{ |
|
|
|
|
|
//错误码
|
|
|
|
|
|
if (p->yes_or_no == 0) |
|
|
|
|
|
{ |
|
|
|
|
|
s->eeror_times++; |
|
|
|
|
|
L0_uart0_sendstr("eeror_times = "); |
|
|
|
|
|
L0_uart0_uchex(s->eeror_times); |
|
|
|
|
|
if (p->point_audio == NULL) |
|
|
|
|
|
{ |
|
|
|
|
|
L2_WT2605B_Broadcast(&audio_game_error); |
|
|
|
|
|
} |
|
|
|
|
|
else |
|
|
|
|
|
{ |
|
|
|
|
|
L2_WT2605B_Broadcast(p->point_audio); |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
//正确码
|
|
|
|
|
|
else |
|
|
|
|
|
{ |
|
|
|
|
|
//未处理
|
|
|
|
|
|
if (p->handled == 0) |
|
|
|
|
|
{ |
|
|
|
|
|
p->handled = 1; |
|
|
|
|
|
s->game_point_index = i; |
|
|
|
|
|
//正确提示声音放在判断是否完成中
|
|
|
|
|
|
L2_task_go_Tdelay(D_task_GAME_COMPLETED,D_Tdelay_100ms); |
|
|
|
|
|
return; |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
L2_task_go_Tdelay(D_task_READ_OID,D_Tdelay_100ms); |
|
|
|
|
|
return; |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
L0_uart0_sendstr("It's not supported oid, please try again."); |
|
|
|
|
|
L2_task_go_Tdelay(D_task_READ_OID,D_Tdelay_100ms); |
|
|
|
|
|
|
|
|
TTSS_Task_step(D_task_GAME_ZMG) |
|
|
TTSS_Task_step(D_task_GAME_COMPLETED) |
|
|
if (R.game.dat == 0x85) |
|
|
U8 completed = 1; //假设已完成
|
|
|
|
|
|
U8 i = 0; |
|
|
|
|
|
for (i = 0; i < game_supported_oid_max; 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) |
|
|
|
|
|
{ |
|
|
|
|
|
completed = 0; |
|
|
|
|
|
break; |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
if (completed == 1) |
|
|
{ |
|
|
{ |
|
|
R.game.dat = 0; |
|
|
// 游戏结束,没有要进行的游戏
|
|
|
L0_uart3_sendArray((U8 *)&audio_begin,9); |
|
|
s->game_info_index = -1; |
|
|
Lc_delay_ms(1000); |
|
|
L0_uart0_sendstr("It's completed."); |
|
|
|
|
|
// 游戏完成
|
|
|
|
|
|
L2_WT2605B_Broadcast(&audio_game_complete); |
|
|
} |
|
|
} |
|
|
else |
|
|
else |
|
|
{ |
|
|
{ |
|
|
L0_uart3_sendArray((U8 *)&audio_zmg_again,9); |
|
|
if (s->game_info[s->game_info_index].game_supported_oid[s->game_point_index].point_audio == NULL) |
|
|
Lc_delay_ms(1000); |
|
|
{ |
|
|
|
|
|
L2_WT2605B_Broadcast(&audio_game_correct); |
|
|
|
|
|
} |
|
|
|
|
|
else |
|
|
|
|
|
{ |
|
|
|
|
|
L2_WT2605B_Broadcast(s->game_info[s->game_info_index].game_supported_oid[s->game_point_index].point_audio); |
|
|
} |
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
L2_task_go_Tdelay(D_task_READ_OID,D_Tdelay_2s); |
|
|
|
|
|
|
|
|
TTSS_Task_end(); |
|
|
TTSS_Task_end(); |
|
|
|
|
|
|
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
#if 0 |
|
|
#if 0 |
|
|