vb.net – ‘自我意识’课程?

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

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

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

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

> clsShip
> clsMissile
> clsAsteroid
> clsspaceJunk

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

对于船舶清单中的每艘船舶
检查列表中的每个clsMissile以查看它是否与它发生冲突,如果是,则降低运行状况
检查列表中的每个clsAsteroid是否与它发生冲突,则降低运行状况
检查每个clsspaceJunka列表以查看它是否与它发生冲突,则降低运行状况
…等等每个对象
一个

等…

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

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

OOP中是否有办法执行以下操作…

对于从clsspaceEntity继承的每个东西
检查继承此类型的所有其他对象(除了它自己)以及它们是否发生冲突然后降低运行状况
一个

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

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

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

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

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

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

相关文章

Format[$] ( expr [ , fmt ] ) format 返回变体型 format$ 强...
VB6或者ASP 格式化时间为 MM/dd/yyyy 格式,竟然没有好的办...
在项目中添加如下代码:新建窗口来显示异常信息。 Namespace...
转了这一篇文章,原来一直想用C#做k3的插件开发,vb没有C#用...
Sub 分列() ‘以空格为分隔符,连续空格只算1个。对所选...
  窗体代码 1 Private Sub Text1_OLEDragDrop(Data As Dat...