此篇并非真正意义上的游戏,只是希望借游戏的名义,让大家对COMOS按钮的使用有一个深刻的认识,寓教于乐,寓学于乐!
今天游戏的名称是老鹰捉小鸡。
首先隆重介绍下游戏主角:公鸡,母鸡,小鸡和*狗猎**。


游戏说明:
在30秒内,鸡舍随机出现公鸡、母鸡、小鸡和*狗猎**,点击相应角色,获得一定分数,挑战30秒内的最高分。
分数表如下:

可以看到角色不同相应的分数不同,为了获取高分,玩家需要在随机出现的角色中选择分数最多的,从而耽误时间,造成结果的不确定性。
为了进一步体现游戏不确定性和可玩性,按分数比例,设置了角色出现的概率,分数越高,出现次数越少,甚至界面中会出现只有*狗猎**的情况,也就是必须扣分才能继续。
程序流程图:

需要说明是,因为我们基于COMOS平台的VBS开发,鉴于VBS没有计时器或时间循环函数,因而我们只能通过点击按钮事件判断当前点击事件距离开始的时间间隔,大于30秒则游戏结束。
同样的,VBS没有音频*放播**控件可以使用,但BGM不仅起到画龙点睛的效果,有时候甚至会成为左右一部作品成败的关键!所以开始游戏前推荐打开QQ音乐搜索“老鹰捉小鸡”,点击*放播**。



游戏思路介绍完了,开始我们的程序开发。首先我们在SO1项目中新建游戏工作层。

创建游戏界面对象

为界面对象命名

新建“老鹰捉小鸡”选项卡


在选项卡中新建属性

依次创建背景图片参数、分数参数、游戏说明参数、开始按钮、公鸡按钮、母鸡按钮、小鸡按钮、*狗猎**按钮。

参数如下,注意角色的命名规则为A1~4,按得分排序,便于后续调整随机系数。

初始界面布局

双击“公鸡”按钮,编辑脚本。
此处用到的关键语句
- 角色坐标
att.Workset.lib.sui.CtrlProperty (27,Att)=X1 ’x1坐标
att.Workset.lib.sui.CtrlProperty (28,Att)=y1 ’y1坐标
att.Workset.lib.sui.CtrlProperty (29,Att)=4+x1 ‘x2坐标
att.Workset.lib.sui.CtrlProperty (30,Att)=y1+2 ’y2坐标
- 角色隐藏和显示
att.Layers="~" ’隐藏
att.layers="F" ‘显示
关于工作区域Layers的详细用法暂不介绍
- 随机数
‘----随机坐标----‘
Randomize‘初始化随机数发生器,否则随机数会不变化
x1=rnd(1)*25+3 ‘x1为角色坐标,25+3为允许角色出现的最大x位置,3为角色允许出现的最小坐标。
‘----随机坐标----‘
‘----随机隐藏----‘
If rnd (1)<0.15*i Then
‘角色的隐藏系数,得分越高的角色隐藏概率越高,本程序取0.15*i,比如公鸡隐藏概率为0.15*4=0.6。
Att.Layers="~" ’隐藏
Else
Att.Layers="F" ‘显示
End If
‘----随机隐藏----‘
公鸡按钮脚本如下:
‘---------------’
Sub OnClick()
’事件:按下按钮之后
If GetSpecOwner.SystemType=13 Then Exit Sub
startTime=owner.spec("StartTime").DisplayValue
Set ScoreAtt=owner.spec("Score")
ScoreAtt.InheritCheckIn
Score=ScoreAtt.Description
Set HistoryScoreAtt=owner.spec("HistoryScore")
HistoryScoreAtt.InheritCheckIn
HistoryScore=HistoryScoreAtt.Description
If startTime<>"" Then
diffVal= DateDiff("s",cdate(startTime),now) ’30秒
owner.spec("Note").SetXValue 0,diffVal
If cdbl(diffVal)>30 Then
If cdbl(Score)>cdbl(HistoryScore) Then
HistoryScore=Score
HistoryScoreAtt.Description=HistoryScore
End If
msgbox "游戏结束!"&vbcrlf&"得分:"&Score&vbcrlf&"历史最高:"&HistoryScore
owner.spec("StartTime").value=""
ScoreAtt.Description="0"
For i=1 To 4
Set att=owner.spec("A"&i)
Att.InheritCheckIn
att.Layers="~" ’隐藏所有角色
Next
owner.spec("StartGame").InheritCheckIn
owner.spec("StartGame").Layers="F"
owner.SaveAll
Project.Workset.lib.refreshcurrentchapterbyspecowner GetSpecOwner
Exit Sub
End If
Else
owner.spec("StartTime").value=now
End If
For i=1 To 4
X1=10
y1=10
Set att=owner.spec("A"&i)
Att.InheritCheckIn
Randomize
If rnd (1)<0.15*i Then’分数越高 隐藏概率越高
Att.Layers="~" ’隐藏
Else
Att.Layers="F"
End If
Randomize
rnd(1)
Randomize
x1=rnd(1)*25+3 ’防止位置超出边界8.5 29.5
Randomize
y1=rnd(1)*23+5 ’防止超出左侧边界6 28
att.Workset.lib.sui.CtrlProperty (27,Att)=X1
att.Workset.lib.sui.CtrlProperty (28,Att)=y1
att.Workset.lib.sui.CtrlProperty (29,Att)=4+x1
att.Workset.lib.sui.CtrlProperty (30,Att)=y1+2
owner.spec("Note").SetXValue 0,owner.spec("Note").GetXValue(0)&vbcrlf&x1&"-"&y1
att.SaveAll
Next
owner.spec("A1").Layers="F" ’*狗猎**始终可见
Score=ScoreAtt.Description
Select Case right(me.Name,1)
Case 1
Score=cdbl(Score)-5
Case 2
Score=cdbl(Score)+1
Case 3
Score=cdbl(Score)+2
Case 4
Score=cdbl(Score)+4
End Select
ScoreAtt.Description=Score
Project.Workset.lib.refreshcurrentchapterbyspecowner GetSpecOwner
End Sub
‘---------------’
依次将母鸡、小鸡、*狗猎**按钮继承公鸡按钮脚本。将公鸡按钮参数拖拽至*狗猎**等角色按钮目录属性中,如下图所示

点击右下角应用按钮,在弹出的提醒消息中选择“否”

查看母鸡等角色按钮的脚本,将看到其继承了公鸡中的脚本,呈斜体表示。如公鸡按钮脚本修改,此处自动修改。

定制“开始游戏”按钮脚本
‘---------------’
Sub OnClick()
’事件:按下按钮之后
If GetSpecOwner.SystemType=13 Then Exit Sub
me.InheritCheckIn
me.Layers="~"
’owner.spec("A4").ScriptEngine.scriptObject.onclick
For i=1 To 4
Set att=owner.spec("A"&i)
Att.InheritCheckIn
Randomize
If rnd (1)<0.1*(i+2) Then’分数越高 隐藏概率越高
Att.Layers="~" ’隐藏
Else
Att.Layers="F"
End If
Randomize
x1=rnd(1)*25+2 ’防止位置超出边界
Randomize
y1=rnd(1)*23+5 ’防止超出左侧边界
att.Workset.lib.sui.CtrlProperty (27,Att)=X1
att.Workset.lib.sui.CtrlProperty (28,Att)=y1
att.Workset.lib.sui.CtrlProperty (29,Att)=3+x1
att.Workset.lib.sui.CtrlProperty (30,Att)=y1+1.5
owner.spec("Note").SetXValue 0,owner.spec("Note").GetXValue(0)&vbcrlf&x1&"-"&y1
Next
owner.spec("A1").Layers="F"
owner.SaveAll
Project.Workset.lib.refreshcurrentchapterbyspecowner GetSpecOwner ’刷新
End Sub
‘---------------’
设置基础对象对象配置

在单元选项卡,新建对象


最后进行游戏测试


运行无异常!

最后插播一条广告:
大扎好,我系牯天乐,我四渣渣辉,介四里没有挽过的船新版本,挤需体验三番钟,里造会干我一样,爱象节款游戏!
欢迎关注~转发~