views:

175

answers:

5

I know that they are used to store data, but I have a difficult time understanding exactly how to use them in a program.

In addition, I found this site with a tetris clone tutorial (the actual tutorial is missing). It uses arrays, but I can't really make sense of how it works.

Here's an example of the code -

public int[, ,] TShape = new int[4, 4, 2] 
            {
            {{1, 0}, {0, 1}, {1, 1}, {2, 1}}, 
            {{1, 0}, {0, 1}, {1, 1}, {1, 2}}, 
            {{0, 0}, {1, 0}, {2, 0}, {1, 1}}, 
            {{0, 0}, {0, 1}, {1, 1}, {0, 2}}};

Could it be that I'm looking too hard into this, or perhaps there's something I'm not grasping about it?

+2  A: 

Straight from the horse's mouth: http://msdn.microsoft.com/en-us/library/system.array.aspx

Those details will come in handy after you have gone through online tutorials such as this http://www.functionx.com/csharp/Lesson21.htm

John K
+9  A: 

It would be clearer if formatted this way:

public int[, ,] TShape = new int[4, 4, 2]  
     { 
          {  {1, 0}, // <- this is int[2]
             {0, 1},  
             {1, 1},  
             {2, 1}   },  // <- the last four lines are an int[4,2]

          {  {1, 0},  
             {0, 1},  
             {1, 1},  
             {1, 2}   },  // <- another int[4,2]

         {   {0, 0},  
             {1, 0},  
             {2, 0},  
             {1, 1}   },   // <- third int[4,2]

         {   {0, 0},  
             {0, 1},  
             {1, 1},  
             {0, 2}   }   // <- fourth and last int[4,2] 
     };               //   <- The whole thing is int[4, 4, 2] 
Charles Bretana
+2  A: 

"Well I've been having a hard time understanding how to use arrays. I know they are used for storing data, but I have yet to find any resource that gives a clearer explanation than that."

I'll try to give you an analogy: array is to programming like a file cabinet is to an office. The only difference is that a file cabinet is restricted to what it can hold: i.e. files... the only restriction for arrays is that it must hold items of the same type, but the actual type of the item can be nearly anything. Arrays can not only hold data, but objects, other arrays, other containers, etc.

So what can you do with an array in programming? Well a LOT of stuff! Let's look at several examples:

  • Financial: an array can hold the stock prices for today.
  • Gaming: an array can hold the 3D models that are used on a level.
  • Military: an array can hold all of the targets identified by a targeting system.
  • etc...

The main purpose of arrays is to contain various things and allow us to iterate over them. For example:

// Financial
int[] stockPrices = new int[4]{ 15, 14, 18, 16 }; // contains four prices
foreach( int price in stockPrices )
{
    MakeTransaction(price);// calls a function that makes a transaction at the price: e.g. buy/sell
}

// Gaming
3DModel[] gameModels = new 3DModel[4]{ new Tank(), new Truck(), new Soldier(), new Building()}; // contains 3D models
foreach( 3DModel model in gameModels )
{
    model.Draw();// calls a function of each 3DModel that draws the model on the screen
}

// Military
Target[] targets = new Target[4]{ new Tank(), new Helicopter(), new APC(), new Truck()}; // contains targets
foreach( Target target in targets )
{
    Attack(target);// calls an attack function which initiates an attack on each target
}

The possibilities are endless! Arrays are a subset of containers and containers are an integral part of programming. Does that help?

Lirik
Yes, this does help quite a bit. I'm going to do some stuff on my own to try and get a good feel for it.
Slateboard
A: 

Imagine you have 10 boxes. Now you want to clearly tell someone which box you are talking about. So you assign numbers to them, from 0 to 9. What you have now is an array of boxes, defined as:

box[ 10 ]

The number in the brackets tells you, how many of them are there. By default they are numbered from 0 to 9 (some languages allow to change this, but lets skip that for now). So if you are talking about the fifth box, its box[ 4 ] (since we index from 0!). Now imagine you open the box and see that there are five balls in it. This defines an array:

box[ 10 ][ 5 ]

A two dimensional array. How do you tell your friend which ball do you want to talk about? Again, you number them, this time from 0 to 4. How do you specify say the third ball in the seventh box? Simple: box[ 6 ][ 2 ]. And so on. Hope that helps.

PeterK
I think I get this.If I understand correctly, I only need a 2D Array, and the one I posted is 3D. Is this correct?
Slateboard
The one you posted is indeed a 3D array. But i can't really say what kind of array you need. My answer is here only to clarify things, it's just an example. It doesn't suggest you need only 2D arrays.
PeterK
A: 

In your question, you're stating the Tetris game which uses an array. That is a good use of arrays in whatever language you're using.

You have to see the Tetris play yard as the array. Let's say this play yard is a 20 spaces on the X axis, and 100 spaces on the Y axis. What tells you whether you have a piece on a space, is when you have the integer value 1, and you get an integer value of 0 for empty spaces. We then get:

var tetrisPlayYard = new int[20][100];

You now have to initialize each positions of the board to 0 in order to mark them as empty spaces, so no pieces have ever been placed already.

for(int xAxisIndex = 0; xAxisIndex < tetrisPlayYard.GetLength(0); ++xAxisIndex )
    for (int yAxisIndex = 0; yAxisIndex < tetrisPlayYard.GetLength(1); ++ yAxisIndex)
        tetrisPlayYard[xAxisIndex][yAxisIndex] = 0;

We now know that no pieces is on board as each array's positions are set to 0.

Then, when we place, let's say a four spaces straight line horizontaly at the bottom-right of the board, we would then have to address 4 spaces, and set their values to 1 to indicate there is a piece on these spaces.

tetrisPlayYard[19][99] = 1;
tetrisPlayYard[18][99] = 1;
tetrisPlayYard[17][99] = 1;
tetrisPlayYard[16][99] = 1;

This tells that you have a four spaces straight line. Your algorithm should work around this logic to display the bars, the cubes, etc. while playing the game.

In conclusion, use arrays whenever a finite space is known, and that you know that it won't be required to resize it dynamically. Otherwise, a Collection should be used.

Will Marcouiller