gpt4 book ai didi

vb.net - “ self 意识”类(class)?

转载 作者:行者123 更新时间:2023-12-02 05:25:27 28 4
gpt4 key购买 nike

长期读者第一次海报。请温柔点。

我热衷于在 VB.net 中创建游戏。作为一名业余程序员,我免费赠送我的游戏。因为我是一个没有经过正式培训的业余爱好者,所以我尝试让自己了解正确的编程原则,并在进行 OOP 等编程时遵循这些原则。然而,有些事情我显然错过了自学的机会,如果我接受过正规教育,也许我会知道这些。

一旦这样的问题真正成为我的祸根,不同的类(从现在开始称为对象)如何在没有编程特定交互的情况下彼此“了解”(请在这里陪我......请......)

好吧想象一下,你有一个太空游戏和以下对象

  • clsShip
  • cls导弹
  • cls小行星
  • clsSpaceJunk

现在,这些对象中的每一个都有一个 Health、X、Y 和 Z 私有(private)成员和属性,出于参数考虑,这些成员和属性均从 clsSpaceEntity 继承。现在,在它们之间进行编程冲突的一种方法是在主游戏循环中编写以下逻辑

对于船舶列表中的每艘船舶
检查列表中的每个 clsMissile 以查看是否与其发生碰撞,如果是,则减少生命值
检查列表中的每个 clsAsteroidin 是否与其发生碰撞,如果是,则降低生命值
检查每个 clsSpaceJunka 列表以查看是否与其发生碰撞,如果是,则降低生命值
...对于每个对象依此类推下一页

等等等等...

现在,如果您谈论的是上面的简单示例,那么这可能没什么问题,但我的一些游戏有数十甚至数百个以这种基本方式交互的对象。

现在我向经验丰富的程序员提出问题。

OOP 中有没有办法执行以下操作...

对于从 clsSpaceEntity 继承的每个事物
检查继承此类型的所有其他对象(除了其自身),如果它们发生碰撞,则会降低生命值
下一页

这种类型的对象/类或其他任何类型“了解”另一个对象/类以及它们如何相同/不同以及交互的能力将节省我大量的编码。

对此的任何帮助/帮助或反馈将不胜感激。感谢您抽出宝贵的时间,抱歉读得太长了。

最佳答案

而不是有一个单独的 List(Of T)对于每个派生对象,您应该创建一个 List(Of SpaceEntity)它包含您的所有实体。

然后您可以创建一个嵌套 For Each循环遍历每对实体并进行碰撞检查。 (经过If x <> y检查)

您可以通过提供SpaceEntity来进一步增强您的设计一个MustOverride函数来处理与其他对象的碰撞,而不会因为每个实体的单独逻辑而污染碰撞循环。
您可能应该使用 visitor pattern允许实体对与不同其他类型实体的碰撞做出不同的 react 。

请注意,每次碰撞都会发送到分别碰撞的两个对象;你需要用你的逻辑来处理这个问题。

关于vb.net - “ self 意识”类(class)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7961353/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com