3

所以我和我的搭档正在尝试制作一个玩家对电脑的乒乓游戏,但我们就是不知道如何让电脑输。

我们已经完成了基本的工作,它工作正常,但计算机永远不会丢失。我们还尝试使用睡眠来减慢计算机的速度,但是当桨移动缓慢时,球也移动缓慢。

任何建议都会有所帮助!谢谢

4

6 回答 6

5

我们还尝试使用睡眠来减慢计算机的速度,但是当桨移动缓慢时,球也移动缓慢。

每次移动时,您需要通过将其移动更短的距离来使其变慢。

于 2011-05-13T13:17:10.110 回答
4

在最初的乒乓球比赛中,球拍与球完美同步,也就是说,每当球下线时,球拍也是如此。显然,这会使游戏无法获胜,因此开发人员使用的解决方案是每隔几个周期跳过一个更新周期。

用外行的话来说,在每一帧,你调整桨的位置以跟随球,除了在第五,第十,十五等。通过这样做,你的桨似乎很好地跟随球,但有某种延迟反应.

于 2011-05-13T14:47:05.750 回答
1

我假设计算机永远不会输,因为它“知道”球要去哪里。在那种情况下,为什么你不能让它在一定比例的时间内去错误的地方?

同样,如果你只是想让它慢下来,而不是睡觉,你可以穿插“不要去任何地方”的“动作”以及朝着它认为合适的地方的动作。因此,您可以使用“down 1, down 0, down 0, down 1, down 0, down 0...”或类似的内容,而不是“down 1, down 1, down 1”。

于 2011-05-13T13:16:07.673 回答
1

我认为有一个游戏网站可以解决此类问题https://gamedev.stackexchange.com/。但我的答案是尝试循环使用 AI 蝙蝠的最高速度。并使蝙蝠短选址。(只有在球处于半场时才响应球的位置。)

于 2011-05-13T13:16:52.133 回答
1

计算机必须犯错才能输。关键是,错误必须是现实的。如果错误看起来过于人为,人类玩家会在一段时间后失去兴趣。人类必须相信错误的原因是他的好戏。

  1. 计算机有时可能反应迟钝。我的意思是,当人类击球时冻结。如果人类用边缘击球,这种情况尤其可能发生。

  2. 故意放慢速度是不现实的。但有时计算机在防守一个会反弹的球时可能会慢一点。

  3. 当球击中球棒的中间时,计算机可能会对错误的一侧做出明显的反应(例如,向上而不是向下)。

  4. 计算机可能会在错误的位置等待球(落后 1 分),尤其是在球会反弹的情况下。

于 2011-05-15T06:39:55.883 回答
0

当您使用 Sleep 时,整个程序会停止几毫秒。你有游戏循环吗?如果是这样,请尝试减少平移量,并且不要忘记对加速度矢量进行归一化。

cpuPadlle.Position += amount * acceleration;

在哪里 :

  • [0..1] 中的金额
  • 加速度是一个二维向量
于 2011-05-13T13:25:06.637 回答