您的位置:首页 > 其它

MC新手入门(三十)------ 逻辑运算符和表达式

2013-05-15 15:28 232 查看
游戏设计中提供了三种逻辑运算符:

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: