'自我意识'课程?

Pur*_*ony 8 vb.net oop class object

长时间读者第一次海报.请温柔.

我热衷于在VB.net中创建游戏.作为一个业余爱好程序员,我免费赠送我的游戏.由于我是一个没有正式训练的爱好者,我确实尝试并教育自己正确的编程原则,并在编写OOP时遵循它们.然而,有些事情我很明显错过了自学,也许我会知道我是否接受过正规教育.

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

好的想象一下,你有一个太空游戏和以下物品

  • clsShip
  • clsMissile
  • clsAsteroid
  • clsSpaceJunk

现在,这些对象中的每一个都有一个Health,X,Y和Z私有成员和属性,这些成员和属性都是为了参数而继承自clsSpaceEntity.现在,它们之间编程碰撞的一种方法是在主游戏循环中编写以下逻辑

对于船舶列表中的
每艘船,检查列表中的每个clsMissile是否与它发生冲突,如果是,则减少运行状况
检查每个clsAsteroid在列表中以查看它是否与它发生冲突,如果是,则减少运行状况
检查每个clsSpaceJunka列表看它是否与它发生碰撞,如果发生碰撞,减少健康
......依此类推,等等下一个对象

等...

现在,如果您谈论上面的简单示例,但是我的一些游戏中有几十个甚至几百个以这种基本方式交互的对象,这可能会接近.

现在我向经验丰富的程序员提问.

在OOP中有没有办法做到以下几点......

对于从clsSpaceEntity继承的每个东西,
检查继承此类型的每个其他对象(除了它自己),如果它们发生碰撞,那么
下一步减少健康

对于某种类型的对象/类或任何"了解"另一个对象以及它们如何相同/不同并且相互作用的这种能力将节省我吨和吨和编码的TONNES.

任何有关此的帮助/帮助或反馈将非常感激.感谢您的时间,对不起阅读.

SLa*_*aks 7

List(Of T)您应该制作一个List(Of SpaceEntity)包含所有实体的单个对象,而不是为每个派生对象分别设置.

然后,您可以创建一个For Each循环遍历每对实体的嵌套循环并进行冲突检查.(If x <> y检查后)

您可以通过提供处理与其他对象的冲突SpaceEntityMustOverride函数来进一步增强您的设计 ,而不会使用每个实体的单独逻辑来污染您的碰撞循环.
您应该使用访问者模式来允许实体对与不同其他类型的实体的冲突做出不同的反应.

请注意,每次碰撞都将被发送到两个单独碰撞的对象; 你需要在你的逻辑中处理它.