Jump to content

  • Log In with Google      Sign In   
  • Create Account

store values from string in an array


Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

  • You cannot reply to this topic
9 replies to this topic

#1 burnt_casadilla   Members   -  Reputation: 443

Like
0Likes
Like

Posted 08 June 2013 - 03:52 AM

I have a string:

 

       map = ("1, 1, 1, 1, 1" +
                   "1, 1, 1, 1, 1" +
                   "1, 1, 1, 1, 1" +
                   "1, 1, 1, 1, 1" +
                   "1, 1, 1, 1, 1");
 
That I want to store in an array somehow, or be able to store the values of the string in 3 seperate arrays. With these arrays, I'm going to create a map of blocks. I don't know how to set these values though. The x array will be the number of rows, so in this case it will be 5. Eventually I will have bigger maps so I'd need to somehow read the number of lines in the string. 
 
Would it make more sense to store each value in a 3 dimensional array? If I could do that, each value will be something like (3, 1, 2) for the third row and second column with the value 1? How would I do this?

If you see a post from me, you can safely assume its C# and XNA :)


Sponsor:

#2 Álvaro   Crossbones+   -  Reputation: 13935

Like
0Likes
Like

Posted 08 June 2013 - 07:12 AM

EDIT: Nevermind. I don't know any C#.



#3 SiCrane   Moderators   -  Reputation: 9676

Like
1Likes
Like

Posted 08 June 2013 - 07:27 AM

Rather than first creating a string and then parsing the contents to create an array, it would probably make more sense to create the array first and generate the string from the array (for example with String.Join()).

#4 Andy474   Members   -  Reputation: 690

Like
1Likes
Like

Posted 08 June 2013 - 07:53 AM

Store in a 2D array like this:

 

int[,] map = new int[,]
{
   { 1, 0, 0, 0, 0},
   { 0, 0, 0, 3, 0},
   { 0, 2, 0, 0, 0},
   { 0, 0, 0, 0, 0},
   { 0, 4, 0, 0, 6},
}

 

you can access numbers like so:

 

map[y,x]
 
//E.g
int num1 = map[0,0];
int num2 = map[2,1];
int num3 = map[1,3];
int num4 = map[4,1];
int num6 = map[4,4];


#5 burnt_casadilla   Members   -  Reputation: 443

Like
0Likes
Like

Posted 08 June 2013 - 01:35 PM

I need to access the value of each character though, not just the position of it in the string


If you see a post from me, you can safely assume its C# and XNA :)


#6 Andy474   Members   -  Reputation: 690

Like
0Likes
Like

Posted 09 June 2013 - 11:25 AM

use ints not strings.



#7 burnt_casadilla   Members   -  Reputation: 443

Like
0Likes
Like

Posted 09 June 2013 - 09:36 PM

I don't know why I never even considered that -.- So how would I get the position of the number in a certain row? Getting the row would probably be easy if there's some kind of method you can use.


If you see a post from me, you can safely assume its C# and XNA :)


#8 Khatharr   Crossbones+   -  Reputation: 3083

Like
1Likes
Like

Posted 10 June 2013 - 12:15 AM

const size_t mapStride = 5;
 
size_t calcIndex(size_t row, size_t column) {
  return (row * mapStride) + column;
}
 
size_t calcRow(size_t index) {
  return index / mapStride;
}
 
size_t calcColumn(size_t index) {
  return index % mapStride;
}

void hurrrrrrrr() {__asm sub [ebp+4],5;}

There are ten kinds of people in this world: those who understand binary and those who don't.

#9 burnt_casadilla   Members   -  Reputation: 443

Like
0Likes
Like

Posted 10 June 2013 - 02:52 AM

Alright so because I'm always going to know the dimensions of x and z, I've chosen to hard code them into the for loop

 

for(int x = 0; x < 5; x++)

{

    mapCoordsX[x] = x;

}

 

Same with mapCoordsZ. So the x and z are fine for now, until I want to make a bigger map.

 

Inside my for loop, I'm creating cubes with a position at each mapCoord like so:

 

new Vector3(mapCoords[x], (y goes here?), mapCoords[z])

 

This creates a nice 5x5 grid of cubes for me. Now if the cube at position (0, 0) has a height of 2 in my map array... {2, 0, 0, 0, 0}...how would I set the y position of this cube?

 

#region MAP
            float[,] map = 
            {
                  {1, 0, 0, 0, 0},
                  {0, 0, 0, 0, 0},
                  {0, 0, 0, 0, 0}, 
                  {0, 0, 0, 0, 0}, 
                  {0, 0, 0, 0, 0}
            };

            #endregion MAP

            for (int x = 0; x < 5; x++)
            {
                mapX[x] = x;
            }

            for (int z = 0; z < 5; z++)
            {
                mapZ[z] = z;
            }

            for (int y = 0; y < map.Length; y++)
            {
                mapY[y] = 0;
            }

            for (int x = 0; x < 5; x++)
            {
                for (int z = 0; z < 5; z++)
                {
                    for (int y = 0; y < 5; y++)
                    {
                        cubes.Add(new Vector3(mapX[x], mapY[y], mapZ[z]), Matrix.Identity, grass);
                    }
                }
            }

There's the full code of what I'm doing. It's also creating 125 cubes instead of 25 but I'll fix that later :P


Edited by burnt_casadilla, 10 June 2013 - 02:55 AM.

If you see a post from me, you can safely assume its C# and XNA :)


#10 Khatharr   Crossbones+   -  Reputation: 3083

Like
0Likes
Like

Posted 10 June 2013 - 04:22 PM

Wut?


void hurrrrrrrr() {__asm sub [ebp+4],5;}

There are ten kinds of people in this world: those who understand binary and those who don't.




Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.



PARTNERS