为数组项目分配值,生命游戏

时间:2016-04-20 14:29:18

标签: c#

我是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]数组项?

1 个答案:

答案 0 :(得分:1)

有几点需要注意:

  1. 现在的方式是,每次遍历内部循环时,Tile数组都会被初始化(设置= new Tile[1024, 2];)。这将删除您存储在其中的任何值。你的Tile数组可能应该是Gameboard的一个字段,因为你很可能想要在课外访问它。这意味着您需要将Tile数组的声明移动到高度和宽度值的下方。

  2. 您还需要检查您将阵列设置为的大小。您的电路板似乎应该是由高度和宽度设置的尺寸。因此,在初始化数组时,您需要使用宽度和高度。

  3. 您可能考虑的另一个变化是创建构造函数并初始化其中的所有内容。构造函数的作用类似于方法,因为您有参数并且可以在正文中执行代码。在大多数情况下,参数仅用于初始化类中的字段。在您的情况下,这将允许您轻松创建不同大小的GameBoards。

  4. 我有点困惑为什么你要在你的foreach中写行。调试?

  5. for-loops(x和y)上的迭代器应该从0开始。如果你声明一个大小为32的数组,那么它的索引将从0到31.所以如果你的数组被命名为tiles并且是已初始化Tile[] tiles = new Tile[32];您可以访问tiles[0]tiles[31]的值。

  6. 以下是我上面提到的更改。

        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.
       }
    }