gpt4 book ai didi

c# - 我如何让一个类存储在一个二维数组 "aware"中它们的位置呢?

转载 作者:太空宇宙 更新时间:2023-11-03 15:39:18 25 4
gpt4 key购买 nike

我认为标题说明了一切......但为了完整起见,这里是完整的问题。

问题

因此,我在 Visual Basic/C#/Anything.net 中有一个包含 Cell 实例的 2 列数组(矩阵或“网格”)声明为 Public Matrix(, ) 作为单元格

Cell 大致是这样的:

Class Cell

Public Value as integer
Public Height as integer
Public Tags as Dictionary

Sub New(Optional v As CellType = CellType.Void)
value = v
type = v
End Sub

Function GetPos() as Point
*need arcane necromancy here*
End Sub

End Class

问题很简单,但我知道答案可能不是:我可以在构造函数中不传递 Cell 的位置吗?

这是我想要实现的示例(总是给定 Public Matrix(,) As Cell):

Dim x,y as integer
Dim apple as Cell = GetARandomAppleFrom(Matrix)
x=apple.GetArrayPos.x
y=apple.GetArrayPos.y
Console.WriteLine(String.Format("An Apple is in {0}, {1}",x,y)

一个关于这个问题的必要性的问题

目前,我正在使用以下代码片段将所有单元格初始化为零值,因为使用 Matrix.Initialize() 失败导致每个元素都设置为空。

如果方法描述说它调用了默认构造函数,那么为什么会失败?

尽管从编码/效率的角度来看我怀疑我的初始化是否正确,因为我认为双循环并不是那么好......

 For x = 0 To Me.zWidth
For y = 0 To Me.zHeight
Matrix.SetValue(New Cell(CellTypes.Void), x, y)
Next
Next

我暂时坚持。因此这里有一个

可能的解决方案

这意味着我可以在初始化时将索引传递给 Position 字段 - 通过构造函数 - 就像这样...

 For x = 0 To Me.zWidth
For y = 0 To Me.zHeight
Matrix.SetValue(New Cell(CellTypes.Void,x,y), x, y)
Next
Next

但是,由于 Cell 可以改变位置或被覆盖,我希望它的位置是动态确定的。

但是,如果没有更好的雷达出现,我肯定会使用这种方法,然后根据位置变化更新值,

附录

一些可能有用或无用的信息:

  • 矩阵大小小于或等于 (512,512)
  • 这将成为等距(所以没有 3d,但我已经在单元格中有一个高度变量)游戏的地形数据 map 生成器,具有相当小的 map ,支持表面特征,如山脉、河流,

最佳答案

为什么不能减少随机选择器,只返回找到的 x,y 值并使用它来检索单元格?像这样:

Dim pt as Point
pt = GetRandomPosition()
Dim apple as Cell = Matrix(pt.X,pt.Y)
Console.WriteLine(String.Format("An Apple is in {0}, {1}",pt.X,pt.Y)

关于c# - 我如何让一个类存储在一个二维数组 "aware"中它们的位置呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30776332/

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