文章写于2020.7.18晚,源文件已上传分享
1.需求分析
抢答器在各种智力、知识竞赛中十分常见,如“中国诗词大会”、“中国成语大会”等,选手门需要抢答问题,主持人除了出题外,还要负责判定答案是否正确,此外还需要分数统计。一个好的抢答系统要求反应迅速、功能完备、操作简单明了。四路抢答器是比较简单的抢答系统,支持四位及以下选手同台竞赛,适合与各种比赛的抢答环节。
2.系统规划
2.1功能要求
主持人按下出题按钮后10秒内抢答有效,未按下出题按钮的抢答行为一律视为犯规;十秒内无人抢答则此题作废。要求有抢答成功统计、犯规统计以及最终得分统计;选手成功抢答后,身前的绿灯亮起(若犯规则为黄灯),数码管显示区域显示时间和选手的号码,同时出现响应该行为的文字提示。回答结束后,主持人可判断答案的正误,系统自动统计得分。要求存在回合结束按钮以结束当前回合,存在复位按钮以便进行其他场次的比赛。
2.2窗口布局
开始界面
操作界面
2.3实时数据库
2.4运行策略
循环时间设置为1秒,可以充当计时器;循环过程中系统监视实时数据库的各个变量,做出相应的决策。
2.5抢答行为设计
如果主持人已经出题,且其他竞争选手还未抢答,则抢答成功,问题消失,指示灯点亮;若主持人未出题,同时其他未犯规,则此次抢答视为犯规,相应指示灯点亮。
3.设计过程
3.1新建工程
3.2如上添加实时数据库对象
3.3新建两个用户窗口
3.4设置窗口1
窗口1设置为启动窗口,如图3.1,完成后双击窗口1,在工具箱中选择矩形工具并绘制矩形区域,在区域内绘制两个文字标签,并添加介绍文字。选择工具箱的标准按钮工具,在右下角放置按钮,双击按钮在操作属性中设置抬起功能,如图3.2。
图3.1
图3.2
3.5设置窗口0
(1)放置四个标准按钮,分别为抢答按钮1-4;按钮的背景色为默认,文字颜色设置为黑色;设置按钮的脚本程序如图3.3。四个按钮的添加过程完全相同,只是脚本程序略作更改。
图3.3
(2)添加选手1的抢答指示灯。绘制一个矩形,双击进行属性设置如图3.4。勾选颜色填充和可见度后,分别进行相应的图3.5和3.6所示的操作。
图3.4
图3.5
图3.6
(2)绘制另一个矩形,与矩形1的设置类似,只是将控制表达式更改为fg1,颜色填充更改为黄色。
(3)选中两个矩形,点击中心对齐,然后单击右键,选择排列、合成单元(如图3.7);此时可以改变颜色的信号指示灯制作完成。其他三个选手的抢答指示灯制作方法相同。
图3.7
(4)设置文字提示区域,先设置如图3.8的四个文字标签,在属性设置中勾选可见度,在可见度选项卡中,添加逻辑控制式:
犯规:fg1=1 or fg2=1 or fg3=1 or fg4=1
此题无效:end=1
抢答成功:L1=1 or L2=1 or L3=1 or L4=1
等待抢答:begin=1 and L1=0 and L2=0 and L3=0 and L4=0
然后合并为一个单元。
图3.8
(5)设置功能按键(出题、回答正确、回答错误、回合结束、复位)。五个按键的设置方法类似,选择标准按钮,设置相应的基本属性、操作属性和脚本程序(出题按钮如图3.9、图3.10、图3.11所示,其他按钮类似,只是操作属性和脚本程序不同)。
图3.9
图3.10
图3.11
(6)功能指示灯(如图3.12),利用逻辑表达式控制颜色填充,添加了闪烁效果,如图3.13和图3.14,使其在绿灯点亮时闪烁。
图3.12
图3.13
图3.14
(7)抢答成功次数统计、犯规次数统计、最终得分统计和时间显示的添加方法相同。先在界面上添加凹槽平面,在平面内放置输入框,设置输入框的操作属性(如图3.15),选择相应的实时数据库中的变量即可。
图3.15
(8)数码管的添加。绘制7个相同矩形区域,如图摆放;每个区域设置相应的颜色填充和可见度,如图3.16、图3.17、图3.18所示。
图3.16
图3.17
图3.18
(9)添加返回窗口1的标准按钮,完成窗口0的设置,如图3.19所示。
图3.19
3.6双击窗口进入用户窗口属性设置,点击循环脚本,如图3.20。
图3.20
在循环脚本中添加下面的循环代码
if L2=1 or L3=1 then a=1
if fg2=1 or fg3=1 then a=2
if L2=1 or L3=1 or L1=1 or L4=1 then b=1
if fg2=1 or fg3=1 or fg1=1 or fg4=1 then b=2
if L1=1 or L3=1 or L4=1 then c=1
if fg1=1 or fg3=1 or fg4=1 then c=2
if L3=1 or L2=1 then d=1
if fg2=1 or fg3=1 then d=2
if L2=1 then e=1
if fg2=1 then e=2
if L4=1 then f=1
if fg4=1 then f=2
if L2=1 or L3=1 or L4=1 then g=1
if fg2=1 or fg3=1 or fg4=1 then g=2
if problem=1 then time=time+1
if time=10 then
time=0
problem=0
begin=0
end=1
endif
if P1=1 then
score1=score1+1
P1=0
endif
if P2=1 then
score2=score2+1
P2=0
endif
if P3=1 then
score3=score3+1
P3=0
endif
if P4=1 then
score4=score4+1
P4=0
endif
if error1=1 then
foul1=foul1+1
error1=0
endif
if error2=1 then
foul2=foul2+1
error2=0
endif
if error3=1 then
foul3=foul3+1
error3=0
endif
if error4=1 then
foul4=foul4+1
error4=0
endif
if count=1 then
FinalS1=FinalS1+(correct-1)*L1*10-fg1*5
FinalS2=FinalS2+(correct-1)*L2*10-fg2*5
FinalS3=FinalS3+(correct-1)*L3*10-fg3*5
FinalS4=FinalS4+(correct-1)*L4*10-fg4*5
count=0
endif
3.7按F5,点击工程下载,如图3.21所示,点击启动运行,得到如图3.22所示界面。
图3.21
图3.22
附录1:功能按键的脚本程序
(1)回答正确
correct=2
count=1
(2)回答错误
correct=0
count=1
(3)回合结束
L1=0
L2=0
L3=0
L4=0
fg1=0
fg2=0
fg3=0
fg4=0
a=0
b=0
c=0
d=0
e=0
f=0
g=0
time=0
end=0
begin=0
correct=0
(4)复位功能
L1=0
L2=0
L3=0
L4=0
fg1=0
fg2=0
fg3=0
fg4=0
a=0
b=0
c=0
d=0
e=0
f=0
g=0
time=0
end=0
begin=0
foul1=0
foul2=0
foul3=0
foul4=0
FinalS1=0
FinalS2=0
FinalS3=0
FinalS4=0
score1=0
score2=0
score3=0
score4=0
附录2:系统操作过程图