游戏中的随机--转换思维

文章中的标题是“游戏中的随机--转换思维”,有一个关键词是“随机”;但是随机这个说法过于笼统,因此我主要说一个具体化实例:随机坐标。

随机坐标在游戏中相当常见,例如掉落、怪物生成、采集生成或者是一些活动中的藏宝地点。

随机出一个坐标不难。

那随机出一个不重复的坐标呢?其实也不难!

还能好好说话吗?

就是要讲述如何做出一个高效及简洁的随机坐标模块!

我知道相当一部分人设计随机坐标模块的思想如下:

A、就是从一个大箩筐中,抽乒乓球,每抽出一个乒乓球,只记录其编号,乒乓球不拿出箩筐,继续抽取;

如果发现抽出的乒乓球,已经抽取过,则不记录,继续抽取。

这种做法的最大缺点是:抽取的乒乓球越多,效率越低下。抽取一个乒乓球的效率这种做法无疑是最高的,因为不可能出现重复。

B、可能你看到我在A中的语言暗示,已经想到我要说什么了。就是多放置一个箩筐,从箩筐1抽取出来的乒乓球,放进箩筐2;箩筐1没有了乒乓球,再到箩筐2抽取。

这种做法的的优点是:每次抽取不需要检查这个乒乓球是否已经抽取过。缺点是:需要多浪费一个箩筐资源。这是一种用空间换时间的做法。


看到这里,我要说一下,上面的两种做的一个关键字是:抽。用计算机的专业术语来说就是:rand;

在开始讲高效及简洁的方法C时,我先讲一个小例子,那就是打扑克牌。

我们打扑克的时候,我们是采取摇骰抽牌的形式,将各张牌分发到各个玩家手中吗?明显不是。

实际上我们是将牌直接按顺序分发到各个玩家手中,但是我们依然认为这些牌是随机。原因是在发牌之前我们已经洗好了牌。

我们不采取摇骰抽牌,因为很明显这是一种效率低下的做法。


同理,方法C就是采用这种思想。方法C中,将槽替换成箩筐,成为乒乓球的容器。

C、在取出乒乓球之前,将乒乓球乱序放进槽中。在槽的一端取出乒乓球,在另一端再放回这个已经被记录下的乒乓。如果有必要,可以再打乱槽中的乒乓球顺序。

这种做法的的优点是:只需要做一次的统一随机,之后使用时,不用再抽取,直接按顺序获取。


从总体上讲:对比前两种方法,这是一种高效及简洁的方法。

至此,游戏中的随机已经讲完,转换思维也蕴含在上述的讲解中。其实这篇文章的重点是在“转换思维”,我们可以不知道所有用到转换的实例,但是需要时刻保持转换思考。

退一步,海阔天空。


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值