最近我一直在手机上玩吃豆人游戏,不知道鬼是如何独立运作的。我思考了一下它是如何被编程的。
第一个想法是使用线程。四个鬼在各自的线程中运行,并找到吃豆人的位置。但是这样就需要四个线程同时工作并进行同步,这似乎有点过于复杂。而且,谷歌用JavaScript编写了吃豆人游戏,而JavaScript不支持线程,所以必须有一种更简单的方法。
我的第二个想法是使用事件处理程序。我将“方向改变”事件连接到四个事件处理程序中的每一个,让每个鬼决定如何走向吃豆人。我认为这更可能是正在发生的事情。但是,如果事件处理程序同步执行,计算路径将会按顺序进行,第四个鬼要改变方向需要时间,这可能会导致明显的延迟。此外,当鬼撞到墙壁时,它们会触发一个事件,它们的事件处理程序会改变鬼的方向。但是,考虑到吃豆人改变方向的频率以及四个鬼的响应速度,事件处理程序似乎也有些过于复杂。
我之所以说以上想法有些过于复杂,是因为请记住,这个游戏是在30年前编写的,当时CPU时间和内存非常稀缺,所以我认为必须有一种更简单的方法。
此外,似乎即使吃豆人静止不动,四个鬼也会沿着不同的路径移动。所有鬼是否使用完全不同或经过优化的路径查找算法?
我更感兴趣的是找出所有鬼如何同时工作的方式,而不是它们使用的路径查找算法。你有什么想法?
第一个想法是使用线程。四个鬼在各自的线程中运行,并找到吃豆人的位置。但是这样就需要四个线程同时工作并进行同步,这似乎有点过于复杂。而且,谷歌用JavaScript编写了吃豆人游戏,而JavaScript不支持线程,所以必须有一种更简单的方法。
我的第二个想法是使用事件处理程序。我将“方向改变”事件连接到四个事件处理程序中的每一个,让每个鬼决定如何走向吃豆人。我认为这更可能是正在发生的事情。但是,如果事件处理程序同步执行,计算路径将会按顺序进行,第四个鬼要改变方向需要时间,这可能会导致明显的延迟。此外,当鬼撞到墙壁时,它们会触发一个事件,它们的事件处理程序会改变鬼的方向。但是,考虑到吃豆人改变方向的频率以及四个鬼的响应速度,事件处理程序似乎也有些过于复杂。
我之所以说以上想法有些过于复杂,是因为请记住,这个游戏是在30年前编写的,当时CPU时间和内存非常稀缺,所以我认为必须有一种更简单的方法。
此外,似乎即使吃豆人静止不动,四个鬼也会沿着不同的路径移动。所有鬼是否使用完全不同或经过优化的路径查找算法?
我更感兴趣的是找出所有鬼如何同时工作的方式,而不是它们使用的路径查找算法。你有什么想法?