Browse Source

feature:1.找不同游戏完成

issu01
Zhangwen 4 months ago
parent
commit
4fb50f3755
  1. 4
      .vscode/settings.json
  2. 48
      source/app/main.c
  3. 3
      source/app/main.h
  4. 260
      source/app/task_game.c
  5. 46
      source/app/task_game.h
  6. 4
      source/bsp/bsp_oid.c

4
.vscode/settings.json

@ -82,6 +82,8 @@
"*.tcc": "c",
"ctype.h": "c",
"time.h": "c",
"task_pen_head.h": "c"
"task_pen_head.h": "c",
"setjmp.h": "c",
"algorithm": "c"
}
}

48
source/app/main.c

@ -36,10 +36,10 @@ void L0_BSP_init(void)
// WIFI初始化
L2_Wifi_init();
// OID初始化
// L2_OID_init();
L0_Oid_Init();
LED2 = 0;
L0_Oid_Init();
}
void L0_TASK_init(void)
{
@ -55,6 +55,9 @@ void L0_TASK_init(void)
//WIFI任务初始化
L3_task_W600_flow_init(W600_ST);
//游戏任务初始化
L3_task_game_init();
// //游戏任务初始化
// L3_task_game_init();
// //寄存器监听任务初始化
@ -94,7 +97,7 @@ void main(void)
while(1)
{
// OID数据采集
L1_Oid_readoid();
// L1_Oid_readoid();
if(1 == s_nos_tick.t1s_heartbeat)//1s
{
@ -102,25 +105,28 @@ void main(void)
L0_uart0_uc('.');
// L0_uart0_sendstr("ADC = ");
// L0_uart0_us(L1_ADC_Read(12));
}
if (ts_oid.ok == 1)
{
ts_oid.ok = 0;
L0_uart0_sendstr("ts_oid.Xint = ");
L0_uart0_ushex(ts_oid.Xint);
L0_uart0_0d0a();
L0_uart0_sendstr("ts_oid.Yint = ");
L0_uart0_ushex(ts_oid.Yint);
L0_uart0_0d0a();
L0_uart0_sendstr("ts_oid.Xdec = ");
L0_uart0_ushex(ts_oid.Xdec);
L0_uart0_0d0a();
L0_uart0_sendstr("ts_oid.Ydec = ");
L0_uart0_ushex(ts_oid.Ydec);
L0_uart0_0d0a();
L0_uart0_sendstr("oid_p");
// L2_WT2605B_Broadcast(&audio_game_complete);
}
// 游戏任务
L3_task_game_handler(&_s_task_game);
// if (ts_oid.ok == 1)
// {
// ts_oid.ok = 0;
// L0_uart0_sendstr("ts_oid.Xint = ");
// L0_uart0_ushex(ts_oid.Xint);
// L0_uart0_0d0a();
// L0_uart0_sendstr("ts_oid.Yint = ");
// L0_uart0_ushex(ts_oid.Yint);
// L0_uart0_0d0a();
// L0_uart0_sendstr("ts_oid.Xdec = ");
// L0_uart0_ushex(ts_oid.Xdec);
// L0_uart0_0d0a();
// L0_uart0_sendstr("ts_oid.Ydec = ");
// L0_uart0_ushex(ts_oid.Ydec);
// L0_uart0_0d0a();
// L0_uart0_sendstr("oid_p");
// }
// // 系统状态任务
// L3_task_appstatus_handler(&_s_task_appstatus);
// // 系统状态测试任务

3
source/app/main.h

@ -66,8 +66,6 @@
#include "../app/app_task_tcp.h"
#include "../app/app_task_tcp_control.h"
#include "../app/app_task_speech.h"
#include "../app/task_game.h"
#include "../app/app_config.h"
#include "../app/app_eeprom.h"
@ -76,6 +74,7 @@
#include "../app/task_keystatus.h"
#include "../app/task_w600.h"
#include "../app/task_SmartConfig.h"
#include "../app/task_game.h"
#include "../bsp/bsp_led.h"

260
source/app/task_game.c

@ -10,84 +10,262 @@
/// @note cc_AS_stc02
//////////////////////////////////////////////////////////////////////////////
#include "task_game.h"
#include "../app/task_game.h"
#include "../bsp/bsp_oid.h"
#include "app_task_speech.h"
#include "../app/app_config.h"
#include "../bsp/bsp_config.h"
#include "../msp/uart0.h"
#include "../msp/uart3.h"
#include "../bsp/bsp_WT2605B.h"
// 系统不识别的码:无效码 0x3FFF,0x0000
// 支持码:本游戏支持的
// 正确码和错误码:单个游戏内的
// 游戏标识码
// 游戏内容码
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)
{
U8 i = 0;
U8 j = 0;
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++)
{
_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_GAME_ZMG 0x61
#define D_task_GAME_ZBT 0x62
#define D_task_GAME_SchulteGrid 0x63
#define D_task_READ_OID 0x50
#define D_task_GAME_SWITCH 0x51
#define D_task_GAME_PLAY 0x52
#define D_task_GAME_COMPLETED 0x53
void L3_task_game_handler(S_TASK_GAME *s)
{
TTSS_Task_init()
L2_task_go(D_task_GAME_SELECT);
L2_task_go(D_task_READ_OID);
TTSS_Task_step(D_task_GAME_SELECT)
if(R.game.type == 0x51)
// if(R.game.type == 0xDA)
TTSS_Task_step(D_task_READ_OID)
L1_Oid_readoid();
if (ts_oid.ok == 1)
{
L0_uart0_uc('A');
if (R.game.dat == 0x42)
// if (R.game.dat == 0xC1)
ts_oid.ok = 0;
s->read_oid = ts_oid.rec.d16[3];
if (s->read_oid != EEROR_OID && s->read_oid != 0x0000)
{
R.game.type = 0;
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);
L2_task_go_Tdelay(D_task_GAME_SWITCH,D_Tdelay_100ms);
}
}
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);
Lc_delay_ms(1000);
L2_task_go_Tdelay(D_task_GAME_ZBT, 0);
//目前仅支持3个游戏,其余游戏均初始化为0
if (s->game_info[i].game_oid == 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);
Lc_delay_ms(1000);
L2_task_go_Tdelay(D_task_GAME_SchulteGrid, 0);
s->game_info[s->game_info_index].game_supported_oid[j].handled = 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;
R.game.dat = 0;
L0_uart3_sendArray((U8 *)&audio_select,9);
Lc_delay_ms(1000);
L2_task_go_Tdelay(D_task_GAME_SELECT, 0);
L2_task_go_Tdelay(D_task_READ_OID,D_Tdelay_100ms);
}
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)
if (R.game.dat == 0x85)
TTSS_Task_step(D_task_GAME_COMPLETED)
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);
Lc_delay_ms(1000);
// 游戏结束,没有要进行的游戏
s->game_info_index = -1;
L0_uart0_sendstr("It's completed.");
// 游戏完成
L2_WT2605B_Broadcast(&audio_game_complete);
}
else
{
L0_uart3_sendArray((U8 *)&audio_zmg_again,9);
Lc_delay_ms(1000);
if (s->game_info[s->game_info_index].game_supported_oid[s->game_point_index].point_audio == NULL)
{
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();
}
#if 0

46
source/app/task_game.h

@ -16,26 +16,48 @@
#include "../ctask/task.h"
#include "../clib/clib.h"
#include "../bsp/bsp_WT2605B.h"
#define game_supported_oid_max 32
#define game_num_max 5
typedef struct _point_info
{
U16 oid; //点的oid值
U8 yes_or_no; //0错误,1正确
TS_SPEECH_AUDIO* point_audio; //点对应的音频
U8 handled; //游戏进行过程中是否已经被处理 0 未处理,1 已处理
}POINT_INFO;
typedef struct game_info
{
U16 game_oid; //游戏oid
TS_SPEECH_AUDIO* game_audio; //游戏音频
POINT_INFO game_supported_oid[game_supported_oid_max]; //游戏支持的point
U8 game_order; //游戏顺序 0不排序,1排序
U8 game_order_index; //游戏顺序索引
U16 game_timeout_seconds; //游戏超时时间(秒)
U16 game_score; //游戏得分
}GAME_INF;
typedef struct _s_task_game
{
TS_task task;
}S_TASK_GAME;
U16 read_oid; //读取到的oid值
U16 error_oid; //代表错误的oid值,0x3FFF
U16 game_maxseconds; //所有游戏超时的最大时间,单位为秒
GAME_INF game_info[game_num_max]; //游戏信息数组
S8 game_info_index; //当前选中的游戏,初始化值为-1代表未选中任何游戏
S8 game_point_index; //当前正在处理的点
U32 start_seconds; //游戏开始时间
U8 eeror_times; //错误次数
// typedef struct _tpc_nfc_
// {
// U8 head;
// U8 slaveId;
// U8 num[2];
// U8 cmd;
// U8 buf[TPC_NFC_DAT_MAX];
// U8 ocr;
// }TPC_GAME;
}S_TASK_GAME;
extern S_TASK_GAME _s_task_game;
extern void L3_task_game_init(void);
extern void L3_task_game_handler(S_TASK_GAME *s);
// extern void parse_game_pkg();
// extern void print_game_pkg(TPC_NFC *p);
#endif // #ifndef

4
source/bsp/bsp_oid.c

@ -306,7 +306,7 @@ void L2_oid_ParseF1(void) //解析
// L1_print_rcv("\r\n F1=");
ts_oid.oid_type = ts_oid.rec.d[0];
// L1_Oid_Rec_PRINT();
L1_Oid_Rec_PRINT();
if(ts_oid.rec.d[0] == 0x00) // 4
{/// Bit43~Bit0:x,y 轴的坐标数据,x 坐标和 y 坐标都是由整数和小数部分
@ -472,7 +472,7 @@ void L1_Oid_readoid(void)
{
if(!OID_DET)
{
L2_WT2605B_Broadcast(&audio_game_correct);
// L2_WT2605B_Broadcast(&audio_game_correct);
ts_oid.pre_x = ts_oid.X100;
ts_oid.pre_y = ts_oid.Y100;
L0_oid_Recv64(); //ts_oid.rec.d[i/8] <<= 1;

Loading…
Cancel
Save