所以我和我的搭档正在尝试制作一个玩家对电脑的乒乓游戏,但我们就是不知道如何让电脑输。
我们已经完成了基本的工作,它工作正常,但计算机永远不会丢失。我们还尝试使用睡眠来减慢计算机的速度,但是当桨移动缓慢时,球也移动缓慢。
任何建议都会有所帮助!谢谢
所以我和我的搭档正在尝试制作一个玩家对电脑的乒乓游戏,但我们就是不知道如何让电脑输。
我们已经完成了基本的工作,它工作正常,但计算机永远不会丢失。我们还尝试使用睡眠来减慢计算机的速度,但是当桨移动缓慢时,球也移动缓慢。
任何建议都会有所帮助!谢谢
我们还尝试使用睡眠来减慢计算机的速度,但是当桨移动缓慢时,球也移动缓慢。
每次移动时,您需要通过将其移动更短的距离来使其变慢。
在最初的乒乓球比赛中,球拍与球完美同步,也就是说,每当球下线时,球拍也是如此。显然,这会使游戏无法获胜,因此开发人员使用的解决方案是每隔几个周期跳过一个更新周期。
用外行的话来说,在每一帧,你调整桨的位置以跟随球,除了在第五,第十,十五等。通过这样做,你的桨似乎很好地跟随球,但有某种延迟反应.
我假设计算机永远不会输,因为它“知道”球要去哪里。在那种情况下,为什么你不能让它在一定比例的时间内去错误的地方?
同样,如果你只是想让它慢下来,而不是睡觉,你可以穿插“不要去任何地方”的“动作”以及朝着它认为合适的地方的动作。因此,您可以使用“down 1, down 0, down 0, down 1, down 0, down 0...”或类似的内容,而不是“down 1, down 1, down 1”。
我认为有一个游戏网站可以解决此类问题https://gamedev.stackexchange.com/。但我的答案是尝试循环使用 AI 蝙蝠的最高速度。并使蝙蝠短选址。(只有在球处于半场时才响应球的位置。)
计算机必须犯错才能输。关键是,错误必须是现实的。如果错误看起来过于人为,人类玩家会在一段时间后失去兴趣。人类必须相信错误的原因是他的好戏。
计算机有时可能反应迟钝。我的意思是,当人类击球时冻结。如果人类用边缘击球,这种情况尤其可能发生。
故意放慢速度是不现实的。但有时计算机在防守一个会反弹的球时可能会慢一点。
当球击中球棒的中间时,计算机可能会对错误的一侧做出明显的反应(例如,向上而不是向下)。
计算机可能会在错误的位置等待球(落后 1 分),尤其是在球会反弹的情况下。
当您使用 Sleep 时,整个程序会停止几毫秒。你有游戏循环吗?如果是这样,请尝试减少平移量,并且不要忘记对加速度矢量进行归一化。
cpuPadlle.Position += amount * acceleration;
在哪里 :