我是c#的新手并试图编写Conways Game of Life,但我遇到了这个问题。我有一个Gameboard类:
public class GameBoard
{
int height = 32;
int width = 32;
public void Create()
{
for (int x = 1; x < width; x++)
{
for (int y = 1; y < height; y++)
{
Tile[,] tile = new Tile[1024, 2];
tile[x, y]= tile[,].value; // not working
Console.Write( "");
}
Console.WriteLine("");
}
}
}
和瓷砖类:
public class Tile
{
public int value = 0;
}
我希望能够为Create方法中的每个tile分配一个值,我需要该值来自Tile类,我也有一些方法更改Tile类中的值,所以我需要对它的引用。我的计划是将tile [x,y]的所有值设置为零,然后相应地将规则更改为1。如何将平铺值属性分配给tile [x,y]数组项?
答案 0 :(得分:1)
有几点需要注意:
现在的方式是,每次遍历内部循环时,Tile
数组都会被初始化(设置= new Tile[1024, 2];
)。这将删除您存储在其中的任何值。你的Tile
数组可能应该是Gameboard的一个字段,因为你很可能想要在课外访问它。这意味着您需要将Tile
数组的声明移动到高度和宽度值的下方。
您还需要检查您将阵列设置为的大小。您的电路板似乎应该是由高度和宽度设置的尺寸。因此,在初始化数组时,您需要使用宽度和高度。
您可能考虑的另一个变化是创建构造函数并初始化其中的所有内容。构造函数的作用类似于方法,因为您有参数并且可以在正文中执行代码。在大多数情况下,参数仅用于初始化类中的字段。在您的情况下,这将允许您轻松创建不同大小的GameBoards。
我有点困惑为什么你要在你的foreach中写行。调试?
for-loops(x和y)上的迭代器应该从0开始。如果你声明一个大小为32的数组,那么它的索引将从0到31.所以如果你的数组被命名为tiles并且是已初始化Tile[] tiles = new Tile[32];
您可以访问tiles[0]
到tiles[31]
的值。
以下是我上面提到的更改。
public class GameBoard
{
private int _height;
private int _width;
public Tile[,] Tiles; // Tile array is now a field
public GameBoard(int height, int width)
{
_height = height;
_width = width;
Tiles = new Tile[width, height];
}
// I'm fairly certain the default value for c# of an integer is 0
// so you may not need the following.
public void SetGameBoardValues()
{
Random rand = new Random(); //only add if you want to randomly generate the board
for (int x = 0; x < width; x++)//arrays start at 0
{
for (int y = 0; y < height; y++)//arrays start at 0
{
Tiles[x, y] = 0;
// If you'd like to randomly assign the value you can do:
Tile[x,y] = rand.Next(0,2)
}
}
}
}
您现在可以通过以下方式从其他类访问此内容:
public class Main
{
public static int main(string [] args) //if you're using the console
{
GameBoard gameBoard = new GameBoard(32, 32); // gameboard is size 32x32
gameBoard.SetGameBoardValues();
gameBoard.Tiles[0, 0] = 1; //You can access values this way.
}
}