程序猎人的博客

程序、小说、视频、机器人……今后还会有什么?

NXTRockBoy - 原创游戏机 & BBall - 其上的第一个游戏

利用近一个月的业余时间,终于成功地用NXT 8547搭建起了原创的摇摆游戏机NXTRockBoy,并开发完了世上第一款NXTRockBoy游戏——BBall。

NXTRockBoy是我用LEGO Mindstorms NXT 8547机器人套装搭建而成的一款原创游戏机。他最大的特点是通过摇摆来作为主要输入。有人说Wii的输入也是通过摇摆,而且是三维方向的摇摆,NXTRockBoy有什么创新?Wii也是我很喜欢的游戏机,在玩NXT之前,常常在玩,但是当你玩Wii的时候,只是在摇摆游戏棒,电视不会跟着摇。而我的NXTRockBoy是要摇晃包含显示屏在内的游戏机本体,所以产生的效果就是屏幕及屏幕里面的内容都会随着摇摆进行运动。

那么,这种输入特性有什么好玩的?

那就得谈谈这第一款游戏——BBall了。BBall,要是一定要有一个中文名字的话,我认为“蹦蹦球”应该是个很贴切的名字。因为游戏的主角就是一个弹力超强的小球。弹力强到什么程度呢?如果放任不管地让他去上下弹啊弹,他会越蹦越高,最大速度(势能最低时)越来越快。这球要是出现在现实世界中,恐怕永动机就不再是神话了。好吧,实际上,这其实是程序在微分运算时的精度不足引起的,所以我在程序里面加入了极限能量控制。小球动能和势能的总和不能超过一个既定的值,如果超过,则强行降低速度。

一不小心把话扯远了,现在拉回来。这个小球就这么欢快地在屏幕里面蹦啊蹦,碰到屏幕的边缘便反弹,碰到任何黑色的障碍也反弹。小球最喜欢的就是去吃豆豆。屏幕里总会有一个不一定在什么位置的豆豆等着他。但是小球自己无法有意识地向豆豆移动,所以他需要玩家的帮助。

小球除了反弹,在运动过程中只受到一个力——重力。就是物理书里面说的那个竖直向下的重力,那个不会随着屏幕的旋转而旋转的重力!好,现在就要说到摇摆输入的好玩之处了:比如说,当小球在天空中,达到了最高点,势能最大,动能为零(也就意味着速度为零),这时我们旋转了游戏机本体,那么小球就不会再沿着与屏幕侧边平行的方向下落,而是沿着与自然界的竖直方向相同的方向下落,而相对于屏幕,就是一个倾斜的方向。当然,举一个动能为零的例子是为了简化说明,如果动能不为零,那么就是抛物线的一个局部。这样,当小球与屏幕底边接触时,它的速度方向与底边的夹角就不再是直角,而是某个特定的角度。那么反弹的时候就会向相对于底边倾斜的方向反弹(与入射角的和为180°)。通过这样的角度变化实现了小球运动方向与速度的调节。

另一方面,因为小球的坐标及速度是与屏幕黏着在一起的,所以小球实际上是无法实现能量守恒的,这样速度常常会出现极具戏剧性的变化。

好吧。我知道我上面说了那么多,恐怕你也不一定能看懂。毕竟我写自然坐标与屏幕坐标变换模块的时候,自己也头疼了好几天,草纸也用了好几张,早已忘记很久的正弦定理和余弦定理又被我记熟了。所以,对不懂的人,我非常理解和同情,故此我留下了下面的视频。希望能帮助大家理解和愉悦各位的身心。

土豆网链接

独乐乐不如与人乐乐,与人乐乐不如众乐乐。在此共享一下详细的构件图和源代码:

Comments