今天跟大家聊聊我最近在“钢铁丛林”里的瞎折腾,说白,就是用代码模拟城市环境,听起来高大上,就是一堆if else和for循环。
我想整个大的,直接上3D,后来发现自己那点儿三脚猫的3D技术,根本hold不住。 于是果断降级,从最简单的2D开始。
我定义几个基本元素:建筑、道路、交通灯。建筑嘛就用不同大小的矩形表示,颜色随机,高度也随机,突出一个参差不齐。道路就是简单的线条,横平竖直,交叉路口就用个小圆圈表示。交通灯更简单,三个颜色的小圆点,红黄绿,循环切换。
就是生成这些元素。我是这么想的,先随机生成一些建筑,然后用道路把这些建筑连接起来。生成建筑的时候,要避免重叠,这就需要判断新生成的建筑是否与其他建筑相交。这里我写个函数,专门用来判断矩形是否相交,用点儿简单的数学知识,但也够呛。
道路的生成比较麻烦,我先随机选择两个建筑,然后尝试用直线连接它们。如果两个建筑之间有其他建筑,就绕开。绕开的方式也很简单粗暴,先向上或向下,再向左或向右,直到绕过障碍物。
交通灯的设置,我只在十字路口设置交通灯。交通灯的切换逻辑也很简单,就是一个计数器,每隔一段时间就切换颜色。
为让这个“钢铁丛林”看起来更真实一点,我还加入一些随机事件。比如,随机改变建筑的颜色,模拟城市灯光的变化;随机在道路上添加一些小方块,模拟车辆的行驶。
整个过程,我用的都是最简单的技术,pygame,一个Python的游戏库。代码写得很烂,很多地方都是硬编码,没有考虑扩展性。但是,能跑起来,能看到一个简单的城市环境,我就觉得值。
这个“钢铁丛林”还有很多可以改进的地方。比如,可以加入更多的建筑类型,可以优化道路的生成算法,可以模拟更复杂的交通规则。但是,我现在没时间,先到这里。
- 一开始想搞大的,结果发现自己能力不够,果断降级是明智的。
- 矩形相交的判断,看似简单,但写起来还是挺麻烦的。
- 道路的生成算法,还有很大的优化空间。
- 代码的可读性和扩展性,需要进一步提高。
这回“钢铁丛林”的实践,让我学到很多东西。虽然代码很烂,但是过程很开心。以后有机会,还会继续折腾。
还没有评论,来说两句吧...