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

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

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

随机出一个坐标不难。

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

还能好好说话吗?

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

退一步,海阔天空。

时间: 2024-10-18 05:26:29

游戏中的随机--转换思维的相关文章

游戏中的AI算法总结与改进

参考文章: http://games.sina.com.cn/zl/duanpian/2014-03-11/105973.shtml http://www.oschina.net/translate/understanding-steering-behaviors-collision-avoidance?cmp http://blog.csdn.net/ityuany/article/details/5509750 一. 人工智能的定义 人工智能(AI, Artificial Intellige

游戏中的人工智能(AI)和行为树科普

什么是角色游戏中的AI? 玩游戏的人都知道,有些游戏中的AI实在是弱智的要死.即使是在WOW这样顶级的游戏中,AI也是有限得掉渣,绝大部分NPC都像一个木桩一样,哪怕是精心设计的BOSS也就只有一些战斗AI.尽管有很多人把动画,或者自动寻路之类的功能也叫做AI,但是我们并不讨论这种基本功能.我们讨论的AI是指,可以使得NPC好像一个真人一样活动的AI.拥有这样AI的NPC看起来就不再是那个只有血条和攻击力的模型,而给玩家的感受会是一个有信念.欲望和意图的生命.从更广泛的意义上说,如果整个游戏世界

全屏游戏中自动切出到桌面的问题解决(二)

关于全屏游戏,类似英雄联盟等,游戏中,自动切到桌面的问题,之前发布过一个解决过的问题.今天又碰到一个类似的问题,当然还是用前端进程工具查找一下什么进程引起的游戏切出.经过观察为update.exe这个进程导致.那么下面就需要查找这个文件的来源了.通过查找路径,发现此文件随机性特别强,任意变换目录,而且通过软件也看不出其父进程.如图:    那么只有借助其他软件了.打开 ProcessExplorer,观察所有进程,发现有UPDATE,但是也无法观察到父进程.那么结束掉这个进程,并且使用顺网小哥的

漫谈游戏中的人工智能

写在前面   今天我们来谈一下游戏中的人工智能.当然,内容可能不仅仅限于游戏人工智能,还会扩展一些其他的话题. 游戏中的人工智能,其实还是算是游戏开发中有点挑战性的模块,说简单点呢,是状态机,说复杂点呢,是可以帮你打开新世界大门的一把钥匙.有时候看到知乎上一些可能还是前公司同事的同学的一些话,感觉还是挺哭笑不得的,比如这篇:http://zhi.hu/qu1h,吹捧机器学习这种玄学,对游戏开发嗤之以鼻.我只能说,技术不到家.Vision不够,这些想通过换工作可培养不来. 这篇文章其实我挺早就想写

游戏中的弹道学手册(转)

[1]直线单体必中飞弹 代表单位:<帝国时代1>的弓箭手,<海岛奇兵>的步兵 直线飞行,只会击中被攻击的单位,命中率100%.看起来飞弹会穿过一些单位,但其实只会击中被锁定为攻击目标的单位.如果飞弹在飞行的过程中目标单位已经被摧毁,则飞弹会继续飞行一段距离之后消失. 虽然理论上来说弓箭手的弹道应该是抛物线,但<帝国时代1>中的弓箭手是直线射击的,我们就不要对老游戏太苛求啦! [2]直线单体真实碰撞飞弹 代表单位:<合金弹头>的小手cc枪.H枪,绝大多数射击游

ActionScript3游戏中的图像编程(连载二十)

1.4.2 灰度的计算方法 回过头来看RGB,站在科学的角度来解释,它们确实也有更明亮的理由,因为下面一排色彩反射出来的色光总量是上一排色的两倍.      为此,作者曾自作聪明地发明了一条“原创”的灰度公式: Gray=(r+g+b)/3 哈哈,用色光总量来表达颜色的灰度想必就比较准确了吧!沾沾自喜一番以后,我还试着用这条自创的定律来转换这张测试图片,上下色块的灰度果然拉开了,可是很不幸地,左右相邻,边界分明的色块依然粘连在一块(图 1.30). 图 1.30 笔者“自创”的灰度转换 显然此法

原创教程“ActionScript3.0游戏中的图像编程”开始连载啦!

        经过近两年的不懈努力,笔者的原创教程“ActionScript3游戏中的图像编程”终于在今日划上了完美的句号!这当中记录着笔者多年来在游戏制作,尤其是当中图像处理方面的经验心得.虽然使用的语言是目前可能正在没落的ActionScript3.0,但由于其中渗透着深刻的编程思想和实用技巧,因此其意义已经远远超越了ActionScript本身.您可以把从本书学到的知识轻松移植到其他支持图像编程的开发语言中(我也想换个语言重写,可惜精力不足).         此外,本书还包含了一些颜色

【腾讯GAD暑期训练营游戏程序班】游戏中的动画系统作业

游戏中的动画系统作业说明文档   一.实现一个动画状态机:至少包含3组大的状态节点 动画状态机如图所示,其中Blend Tree_Run是一个动画混合树,Blend为混合树的参数,speed为控制动作过渡的参数,共有蹲下空闲状态.走路状态.跑路状态三种状态. (1)    当speed大于0.1时,由蹲下的空闲状态转换为走路状态. (2)    当speed小于0.1时,由走路状态转换回蹲下空闲状态. (3)    当speed大于0.2且在走路状态时,可转换为动画混合树制作的跑步状态. (4)

ActionScript3游戏中的图像编程(二十)

1.4.2 灰度的计算方法 回过头来看RGB,站在科学的角度来解释,它们确实也有更明亮的理由,因为下面一排色彩反射出来的色光总量是上一排色的两倍. 为此,作者曾自作聪明地发明了一条"原创"的灰度公式: Gray=(r+g+b)/3 哈哈,用色光总量来表达颜色的灰度想必就比较准确了吧!沾沾自喜一番以后,我还试着用这条自创的定律来转换这张测试图片,上下色块的灰度果然拉开了,可是很不幸地,左右相邻,边界分明的色块依然粘连在一块(图 1.30). 图 1.30 笔者"自创"