设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 2477|回复: 10
打印 上一主题 下一主题

[随意闲聊] 做一个多个开关配合开门的谜题……某火星思路

[复制链接]

Lv4.逐梦者 (管理员)

砂上描绘的愿想

梦石
15
星屑
4120
在线时间
5075 小时
注册时间
2012-1-15
帖子
4618

开拓者贵宾短篇七成年组亚军剧作品鉴家

跳转到指定楼层
1
发表于 2012-10-18 14:26:36 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
其实也是很久以前就有的思路 突然想到了 所以就帖一下

例如我们在游戏的某个地方 需要正确地处理8个拉杆开关的状态

例如把第1、4、7、8个开关置为【上】,其他为【下】,门才会打开。
制作这种谜题通常我们的第一想法是利用8个开关分别判断,然后用很多层的分歧条件来判定,当开关1、4、7、8开、开关2、3、5、6关的时候,门打开。
于是这样就费掉了8个开关,还写了好大一版分歧条件。看起来很乱,对不对?

其实 可以用1个变量来解决的。等等……你是不是想到了什么?
如果开关1=1 开关2=2 开关3=3 开关4=4……那么是不是判定变量=1+4+7+8=20的时候,门打开就行了?
很好,沾边了,但是这样如果开关2、3、7、8打开的话,同样会让判定变量=20,门也会开,这样就混淆了。
于是我们需要用另外一种方法来编写这个判定变量。不能简单地把每个开关对应的数字就定位12345678。

于是我们换种方法
开关1=1
开关2=10
开关3=100
开关4=1000
开关5=10000
开关6=100000
开关7=1000000
开关8=10000000
这样这八个数字无论怎样相加也不会重复。
于是相应的第一个拉杆开关事件可以编写为
事件页一:
判定变量 加上 1
独立开关A 开启
事件页二——独立开关A开启时出现:
判定变量 减去 1
独立开关A 关闭

后面的开关就把1换成10、100、1000、10000……
最后判断变量=1+1000+1000000+10000000=11001001的时候,门就打开。
是不是节省了8个开关还有一大堆分歧条件判定?
唯一的问题是…… 10000000这个数字是不是太大了?
仔细看看这些数字的特点——
1 是10的0次方
10 是10的1次方
100 是10的2次方
1000 是10的3次方
……看出什么了吗?

于是这样,我们设置个小一点的底数2,然后把10的次方换成2的次方,来计算开关开启的情况。
开关1 = 1
开关2 = 2
开关3 = 2×2 =4
开关4 = 2×2×2 = 8
……
开关5 = 16
开关6 = 32
开关7 = 64
开关8 = 128
如果要开关1、4、7、8打开,那么只要判定变量=1+8+64+128=201的时候,判断门打开就行了。
这样实际是利用了一种二进制计数法的思想。
不信的话 用计算器把201转化成二进制 看看是不是写作11001001?嗯?

貌似以前在某个帖子里稍微提了一下,然后yff还回帖说是位运算什么来着……汗……总之应该是很火星的思路了……
于是还是来抛玉引砖一下吧……(顶锅盖逃)
若后退就皆成谎言。

Lv4.逐梦者

送快递的水表员

梦石
10
星屑
4857
在线时间
3303 小时
注册时间
2012-6-27
帖子
7160

开拓者贵宾

2
发表于 2012-10-18 14:29:40 | 只看该作者
其实看到一半我就知道是用的二进制……

点评

感觉二进制在做游戏的时候还是很有用的,节约一大堆开关和分歧条件啊。  发表于 2012-10-18 14:36
回复 支持 反对

使用道具 举报

Lv4.逐梦者 (管理员)

砂上描绘的愿想

梦石
15
星屑
4120
在线时间
5075 小时
注册时间
2012-1-15
帖子
4618

开拓者贵宾短篇七成年组亚军剧作品鉴家

3
 楼主| 发表于 2012-10-18 14:31:50 | 只看该作者
Password 发表于 2012-10-18 14:29
其实看到一半我就知道是用的二进制……

= =~ 话说现在中学数学课学二进制么……

点评

只不过我没有转换十进制 = =||  发表于 2012-10-18 14:39
我会说我曾经这么干过么 = =||  发表于 2012-10-18 14:38
不要求学,但是天朝的教育你懂得  发表于 2012-10-18 14:34
若后退就皆成谎言。
回复 支持 反对

使用道具 举报

Lv3.寻梦者 (版主)

  /) /)<

梦石
0
星屑
4212
在线时间
4890 小时
注册时间
2009-2-16
帖子
8434

开拓者短篇七成年组季军

4
发表于 2012-10-18 14:51:44 | 只看该作者
用这么麻烦吗……
变量a初始为0 1-8开关全为“下”的状态

1 4 7 8 的开关 点一下(“上”)效果为 a+1 再点一下(“下”) a-1
2 3 5 6 的开关 点一下(“上”)效果为 a-1 再点一下(“下”) a+1

最后变量等于4时开关打开

评分

参与人数 1星屑 +480 收起 理由
迷糊的安安 + 480 NICE JOB!

查看全部评分

回复 支持 反对

使用道具 举报

Lv4.逐梦者 (超级版主)

嗜谎者

梦石
2
星屑
17332
在线时间
3909 小时
注册时间
2010-9-12
帖子
9654

极短24评委极短23评委极短22评委极短21评委开拓者

5
发表于 2012-10-18 16:02:12 | 只看该作者
@protosssonny参照上次我提到的那个数字模型

点评

嗷呜,这里可以参照尼桑上次提出的数字模型。^ ^  发表于 2012-10-18 17:13
回复 支持 反对

使用道具 举报

Lv3.寻梦者 (版主)

八宝粥的基叔

梦石
0
星屑
4684
在线时间
5240 小时
注册时间
2009-4-29
帖子
14318

贵宾

6
发表于 2012-10-18 17:22:29 | 只看该作者
P叔也来“抛玉引砖”一下
  1. $game_switches[1]=[0,0,0,0,0,0,0,0]
复制代码
如果开关1、2、3、4、5、6、7、8打开则分别操作对应的元素为1,关闭就令对应的元素为0:
  1. $game_switches[1][0] = 1
  2. $game_switches[1][1] = 1
  3. $game_switches[1][2] = 1
  4. $game_switches[1][3] = 1
  5. $game_switches[1][4] = 1
  6. $game_switches[1][5] = 1
  7. $game_switches[1][6] = 1
  8. $game_switches[1][7] = 1
复制代码
如果1、4、7、8打开则使用事件法条件分歧判断:

点评

好玉一块!接砖!  发表于 2012-10-18 17:49
卖萌掉节操……  发表于 2012-10-18 17:26
嗷呜,卖萌不算坏事的说吧,喵·~~~[url=home.php?mod=space&username=Password]@Password[/url]  发表于 2012-10-18 17:25
节操-666  发表于 2012-10-18 17:23
= = P叔又在用脚本卖萌了  发表于 2012-10-18 17:23
《逝去的回忆3:四叶草之梦》真情发布,欢迎点击图片下载试玩喵。

《逝去的回忆3》的讨论群:
一群:192885514
二群:200460747
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
239
在线时间
2399 小时
注册时间
2008-4-11
帖子
12326

贵宾第6届短篇游戏比赛季军

7
发表于 2012-10-18 17:24:59 | 只看该作者
在某个英文系统的ARPG里面,第三个延时中有用到这样的思路
生活中不会缺乏创意,只会缺乏发现创意的眼睛

安安加油

点评

延时 = 演示  发表于 2012-10-18 17:25
回复 支持 反对

使用道具 举报

Lv1.梦旅人

哆啦菌

梦石
0
星屑
46
在线时间
795 小时
注册时间
2010-7-24
帖子
3800
8
发表于 2012-10-18 17:44:06 手机端发表。 | 只看该作者
说实话这样还不如开关啊,设置变量还要输好多数字,开关点一下就可以了。。。(伸手党逃之~)
随便看看
回复 支持 反对

使用道具 举报

Lv1.梦旅人

哆啦菌

梦石
0
星屑
46
在线时间
795 小时
注册时间
2010-7-24
帖子
3800
9
发表于 2012-10-18 17:48:07 手机端发表。 | 只看该作者
迷糊的安安 发表于 2012-10-18 14:31
= =~ 话说现在中学数学课学二进制么……

应试教育的强大~信息学的。。

点评

硬噬教育的功劳!  发表于 2012-10-18 17:53
随便看看
回复 支持 反对

使用道具 举报

Lv1.梦旅人

Mr.Gandum

梦石
0
星屑
226
在线时间
2070 小时
注册时间
2007-1-31
帖子
3039

贵宾

10
发表于 2012-10-18 18:23:25 | 只看该作者
flags
フラグテーブル。各種フラグを格納した一次元配列 (Table) です。

タイル ID を添字として取ります。各ビットの対応は以下の通りです。

0x0001 : 下方向通行不可。
0x0002 : 左方向通行不可。
0x0004 : 右方向通行不可。
0x0008 : 上方向通行不可。
0x0010 : 通常キャラの上に表示。
0x0020 : 梯子。
0x0040 : 茂み。
0x0080 : カウンター。
0x0100 : ダメージ床。
0x0200 : 小型船通行禁止。
0x0400 : 大型船通行禁止。
0x0800 : 飛行船着陸禁止。
0xF000 : 地形タグ。
ビット演算に関してはこのマニュアルでは解説していませんが、C 言語などと共通です。必要な場合は、インターネットにて「16 進数 ビット演算」等のキーワードで検索することをお勧めします。

RM其实已经先我们很多了(大雾

点评

正解1  发表于 2012-10-18 18:39
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-11-19 14:39

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表