游戏设计中提供了三种逻辑运算符:
1)&& 与运算
2)|| 或运算
3) !非运算
游戏设计中我们常常要用到上面的逻辑运算,例如:当在双人游戏中都要实现两人同时存活才能过关,这时需要用与运算来实现;游戏中常常可以使用多种方式来消灭“敌人”,只要使用一种方式来消灭就可以完成任务,这时需要用或运算来实现;在登入界面中,只有当用户名和密码都有输入的情况下,才开始进行身份验证,这时需要用非运算。
使用场景:在密室逃脱游戏中,有三道门,按照不同的要求,可以依次打开这三道门。
目标:按照需求打开三道门
实例:
第一关:要求至少拿一把钥匙才能开门
图5-3-2-1
第二关:要求两把钥匙都拿起来才能开门
图5-3-2-2
第三关:可以直接开门,但是如果拿起钥匙,门就坏了,再也不能开了
图5-3-2-3
第四关:过关场景
图5-3-2-4
首先我们把实例用逻辑来描述:
先定义关卡数,以及一个描述是否拿起钥匙的标志位
第一关:
如果两把钥匙拿起了其中一把
关卡数+1
标志位重置
搭建下一关场景
第二关:
如果两把钥匙拿起了其中一把
关卡数+1
标志位重置
搭建下一关场景
第三关:
如果两把钥匙拿起了其中一把
关卡数+1
标志位重置
搭建下一关场景
接着我们开始用MC来实现上述的逻辑:
//iLevel之前定义了,表示关卡数;flag[2]数组表示是否已经拾取了钥匙
switch(iLevel)
{
case 0:
if( flag[0]==1 || flag[1]==1)
{
iLevel++;//增加关卡数
flag[0] = 0;
flag[1] = 0;//重置标志位
DestroyActor("item1");//开始搭建下一关场景,简单了解一下即可,不是重点
DestroyActor("item2");
CreateActor("item1","key1", "", "", -200, -155, true);
CreateActor("item2","key2", "", "", -50, 200, true);
sprintf(tip.text, "提示:两把钥匙都拿起来才能开门");
}
break;
case 1:
if( flag[0] == 1 &&flag[1] == 1 )
{
iLevel++;//增加关卡数
flag[0] = 0;
flag[1] = 0;//重置标志位
DestroyActor("item1");//开始搭建下一关场景,简单了解一下即可,不是重点
DestroyActor("item2");
CreateActor("item1","key1", "", "", -100, 155, true);
sprintf(tip.text, "提示:别碰那把钥匙");
}
break;
case 2:
if( flag[0]!=1 )
{
iLevel++;//增加关卡数
flag[0] = 0;//重置标志位
DestroyActor("item1");//开始搭建下一关场景,简单了解一下即可,不是重点
DestroyActor("EventActor");
sprintf(tip.text,"哦,终于逃出来了");
}
break;
}
上面的例子涉及到三种逻辑运算符:与运算&&,或运算||以及非运算!
逻辑运算的值也为“真”和“假”两种,用非0和0来表示。其求值规则如下:
1)与运算&&:参与运算的两个量都为真时,结果才为真,否则为假。例如上面提到的12 < y < 24,在C语言里面就写成( y >12 && y < 24 ),如果y值为15,那么这个表达式就为真。
2)或运算||:参与运算的两个量只要有一个为真,结果就为真。两个量都为假时,结果为假。例如|x|>3,拆开写就是(x >3 || x < 3),当x取5的时候,表达式为真。
3)非运算!:参与运算的量为真时,结果为假;参与运算的量为假时,结果为真
Demo下载地址:http://www.dongyo.cn/bbs/forum.php?mod=viewthread&tid=2488&extra=page%3D2%26filter%3Dauthor%26orderby%3Ddateline%26orderby%3Ddateline