作者AmosYang (LetMeGoogleThatForYou)
看板GameDesign
标题Re: [程式] 模拟城市的电线连接判断是怎麽做的阿???
时间Fri Jul 9 19:22:42 2010
※ 引述《yhn0tgb60 (呦厚厚)》之铭言:
: 最近在研究模拟城市的一项功能
: 就是每个建筑物都会去判断 自己是否有电线连结到发电厂
: 目前我想的办法写一个寻路程式(例如 A*)
: 每盖一个建筑物 或是盖一个电线 或是拆一个电线
: 就对所有的建筑物 跑寻路程式
: 而电线是道路 终点是发电厂
: 判断建筑物 是否可以透过电线 找到发电厂
: 不过这个运算量很可怕...
: 当建筑物一多 或是电线一多
: 只要在哪里 一直重复 拆一个电线 或是盖一个电线
: 程式就跑挂了
: 而模拟城市在近20年前 就已经做到这个东西
: 模拟城市的地图并不小 而且那时候的电脑也很差
: 我想也许他们有更好的方法在处里这个问题 ???
: 想和大家讨论一下这个问题 谢谢了 ^^
很有趣的问题 :D
从游戏设计的角度来看,这里面有偷机取巧的空间 XD
我记得在游戏里电线的连结或移除并不会马上造成影响,
而是会隔个 1 到 3 秒才会出现影响
这个几秒钟的间隔有可能是程式在拼命运算造成的延迟
也有可能是一种偷机的方式,也就是说,
「如果有玩家在短时间内一直把电线建了又拆拆了又建
不要去理他,等他去做别的动作时,我们再来算电线连结的问题」
且,视区域数量的不同,使用的演算法也可以改变
例如,假设城市的规模是中等或小型,那就使用比较耗时但保证正确的演算法
因为城市的规模小,玩家多半可以察觉到明显的错误,所以需要保证正确的的演算法
但也因为城市的规模小,所以就算使用比较耗时的演算法,影响也不会太大
当城市的规模是大或占满了整个地图,就可以换成比较快但有可能会有误差的演算法
从玩家的角度来看,当你要照顾整个地图时,如果有几块区域缺电
你大概不会很仔细的确认供电量这类的「小事」,只要电线连接好了
5000$ 直接核电厂盖下去
是故,从游戏设计的角度来看,有时候「绝对正确的演算法」并不一定是最好的答案
只要游戏整体塑造出来的游玩经验有趣,很多地方是可以偷机的
(当然这是在 game design 板是这样讲,
如果你移驾到 prob solving 板去
就会有人跟你谈 disconnected subgraph detection 的 algorithm 了 XD
这背後的问题其实蛮复杂的
因为每个发电厂还有限制供电量,我记得核电是 150 区,火电是 50 区
是故,除了要算 node 间的 connectivity 还要算供电量
再考虑到记忆体使用量
我觉得在当年那种硬体上,我觉得游戏程式应该有偷机… XD )
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 65.87.177.87
补述
SimCity Source Code Is Now Open
http://developers.slashdot.org/article.pl?sid=08/01/12/1846256
看起来 SimCity 的 source code 有放出来…直接去看吧 :D
※ 编辑: AmosYang 来自: 65.87.177.87 (07/09 19:28)
1F:→ Splash5:推推 07/09 20:04
2F:→ Splash5:刚刚有玩一下 电线就算连结好也不会马上有电 07/09 20:05
3F:→ Splash5:而且I,C,R三个区块其实也可以看成是电线的一种.. 07/09 20:05
4F:→ Splash5:game design要的是看起来像真的 至於实际上是不是真的 07/09 20:07
5F:→ Splash5:那就是另一回事了 :p.. 07/09 20:07
6F:→ a1234957:现在为了效能而偷机的例子还是有吧 应该是说聪明 07/09 20:20
7F:推 laymu:推,演算法的确不是最快最正确就是最好的。还是要因地时宜 07/09 20:22
8F:推 rexrainbow:推~ 07/09 20:54
9F:→ kazuto:猜可能是类似填色的方法? 07/09 21:22
10F:推 lightmaple:推一个 07/09 21:36
11F:推 abovelight:看到了离散数学和组合图形学的影子了 07/09 22:53
12F:→ yhn0tgb60:谢谢 我研究看看 07/10 00:37
13F:推 cowbaying:说的好 只要看起来像回事就好 实际上... 07/10 13:57
14F:推 chrisho:偷鸡 07/11 02:16