中级会员
 
- 积分
- 235
- 金钱
- 235
- 注册时间
- 2018-5-2
- 在线时间
- 83 小时
|
本帖最后由 safu枫 于 2018-5-9 17:29 编辑
请问大家如何使用按键控制一盏灯的开关?是这样吗?
[mw_shl_code=c,true]if(灯为关)
{
打开灯;
}
else if(灯为开)
{
关闭灯;
}[/mw_shl_code]
那如果我要在有人且灯为关的 要爆炸呢?
[mw_shl_code=c,true]if(灯为关 && 有人)
{
爆炸;
}
else if(灯为关)
{
打开灯;
}
else if(灯为开)
{
关闭灯;
}[/mw_shl_code]
那如果。。。够了,草泥马,一次说清楚。。。。(标志位这么多,判断分支这么多。。。。)
不要急,我们现在使用状态机,不管客户需求怎么变,我们都能轻松应对,逻辑清楚
这篇得概念还是 抽象化
首先我们声明一个状态表结构体,并定义一个实时状态
[mw_shl_code=c,true]typedef struct Status
{
void (* key_handle)(); //按键处理函数
}typ_Status;
typ_Status Status = Status_Close ;//初始状态为 关灯状态
[/mw_shl_code]
然后定义3种状态,然后编写对应三种状态下的按键处理函数
[mw_shl_code=c,true]typ_Status Status_Open =
{
close_led;
};
typ_Status Status_Close =
{
open_led;
};
typ_Status Status_CloseAndMan = //灯为关且有人
{
boom;//爆炸
};[/mw_shl_code]
接下来编写具体的函数
[mw_shl_code=c,true]void close_led()
{
关闭灯;
Status = &Status_Close; //切换状态
}
void open_led()
{
打开灯;
Status = &Status_Open ; //切换状态
}
void boom()
{
爆炸;
爆炸了一切状态结束 GameOver;
}[/mw_shl_code]
[mw_shl_code=c,true]if(按下按键)
{
Status .key_handle(); //根据当前状态自动调用按键处理,所以无论怎么样的逻辑都是调用这一个接口,这里不用变动。。是不是很方便啊
}[/mw_shl_code]
这里的爆炸的代码我先不写,要用到状态组合,我晚点更新吧。。
|
|