|
harold aptroot wrote: Surely a 2D array is the first thing you think of when your data has the shape of a 2D array, that just makes sense. Or maybe it doesn't It depends on what you actually need this "grid" for. Suppose that your grid was 10k by 10k and you only have 300 entries in there that you want; in other words you have created a sparse array. Maintaining a 10K x 10k array just for that is unnecessarily wasteful. In this case, a Linked List is a better option - it's much more suited to being a sparse array than an array is.
This space for rent
|
|
|
|
|
Then the data does not have the shape of a 2D array.
|
|
|
|
|
Your initial specification there talked about nodes, rather than the data the nodes contained.
This space for rent
|
|
|
|
|
harold aptroot wrote: All problems could have been avoided by just working with that 2D array to begin with.
harold aptroot wrote: especially if nodes are dynamically added and removed
I'm not going to "remove" a part of a 2D array. I might flag it, but refuse to remove it.
Bastard Programmer from Hell
If you can't read my code, try converting it here[^]
"If you just follow the bacon Eddy, wherever it leads you, then you won't have to think about politics." -- Some Bell.
|
|
|
|
|
harold aptroot wrote: Marking a cell in the grid as non-walkable
|
|
|
|
|
That's done with a flag; you don't remove the location, since the location still exists - only one of its properties has changed.
Bastard Programmer from Hell
If you can't read my code, try converting it here[^]
"If you just follow the bacon Eddy, wherever it leads you, then you won't have to think about politics." -- Some Bell.
|
|
|
|
|
I never said what you imagined I said. The "removing" thing is in the context of nodes.
Anyway I think you can reasonably assume that I'm not a total idiot.
|
|
|
|
|
harold aptroot wrote: I never said what you imagined I said. The "removing" thing is in the context of nodes. If you implement the map as a list of nodes, you'd still use a flag instead of removing the nodes.
harold aptroot wrote: Anyway I think you can reasonably assume that I'm not a total idiot. I don't like assumptions, and don't know how your coworkers think. I can also state that I am a certified idiot; that's why I need specifications, and come asking questions that may seem obvious to others.
Let them play Rimworld, might help
Bastard Programmer from Hell
If you can't read my code, try converting it here[^]
"If you just follow the bacon Eddy, wherever it leads you, then you won't have to think about politics." -- Some Bell.
|
|
|
|
|
OK sure, there would be a flag. Do I really need to specify implementation details like that though?
|
|
|
|
|
harold aptroot wrote: OK sure, there would be a flag. Do I really need to specify implementation details like that though? Not required, it just helps me understand what the problem is. Might be beneficial if I encounter it myself.
My apologies if I'm not helping in any way
If you have a flag and don't remove nodes, how can there be invalid (double/missing) nodes?
Bastard Programmer from Hell
If you can't read my code, try converting it here[^]
"If you just follow the bacon Eddy, wherever it leads you, then you won't have to think about politics." -- Some Bell.
|
|
|
|
|
Exactly, that's the point: there would be no possibility of creating invalid states that way. Any state that can be represented is valid .. it might be the wrong state, but it cannot be internally inconsistent.
|
|
|
|
|
harold aptroot wrote: Exactly, that's the point: there would be no possibility of creating invalid states that way. Any state that can be represented is valid .. it might be the wrong state, but it cannot be internally inconsistent. That's how most games will approach it. Sometimes there's water or land in the Rimworld map where there shouldn't be - but the map in itself is "valid" and hence, playable.
Bastard Programmer from Hell
If you can't read my code, try converting it here[^]
"If you just follow the bacon Eddy, wherever it leads you, then you won't have to think about politics." -- Some Bell.
|
|
|
|
|
Just a common question - once you fit something as a grid/array, the mechanism to reach to connected notes is provided by the indices. When we have this, do we still need a "link" in nodes again to answer the same need?
Once a grid structure comes in, I feel nodes can be completely agnostic about their neighborhoods, removing the in-built links?
(I'm more stupid than you, so more questions)
Starting to think people post kid pics in their profiles because that was the last time they were cute - Jeremy Falcon.
|
|
|
|
|
Vunic wrote: When we have this, do we still need a "link" in nodes again to answer the same need? Sounds redundant
Vunic wrote: Once a grid structure comes in, I feel nodes can be completely agnostic about their neighborhoods, removing the in-built links? Sounds cleaner, doesn't it?
Vunic wrote: (I'm more stupid than you, so more questions) So this is not a trick-question?
Bastard Programmer from Hell
If you can't read my code, try converting it here[^]
"If you just follow the bacon Eddy, wherever it leads you, then you won't have to think about politics." -- Some Bell.
|
|
|
|
|
harold aptroot wrote: Perhaps the funniest part is that while all that is going on, it is realised that a 2D array is needed in order to quickly find a node with given coordinates, and from that point on all those buggy links are worse than useless: the location in the array implicitly defines the neighbours. Arrays are the worst choice of all. How about a quadtree for 2D structures or octrees for 3D structures?
I have lived with several Zen masters - all of them were cats.
His last invention was an evil Lasagna. It didn't kill anyone, and it actually tasted pretty good.
|
|
|
|
|
No way, arrays are great. Quadtrees are fun and powerful, but at the cost of being at least an order of magnitude more complicated.
|
|
|
|
|
harold aptroot wrote: being at least an order of magnitude more complicated Which ltttle object oriented me would just hide by properly encapsulating it away in methods and properties.
I have lived with several Zen masters - all of them were cats.
His last invention was an evil Lasagna. It didn't kill anyone, and it actually tasted pretty good.
|
|
|
|
|
Hiding complexity under the rug doesn't make it go away, you'd still have to actually implement that quad tree.
|
|
|
|
|
Sure, but I have already done that a few times and I never had much trouble managing a few pointers and memory. Anyway, in many languages overstepping the boundaries of an array may have worse consequences than just causing an exception. Your implementation therefore also offers the advantage to allow as little or as much error handling as is needed.
I have lived with several Zen masters - all of them were cats.
His last invention was an evil Lasagna. It didn't kill anyone, and it actually tasted pretty good.
|
|
|
|
|
CodeWraith wrote: Anyway, in many languages overstepping the boundaries of an array may have worse consequences than just causing an exception. Not too hard to write a method that takes any value and checks for overflows. If you overflow on the right of the map, set the value to zero, and you re-appear on the left of the map.
Bastard Programmer from Hell
If you can't read my code, try converting it here[^]
"If you just follow the bacon Eddy, wherever it leads you, then you won't have to think about politics." -- Some Bell.
|
|
|
|
|
Map? Reappear on the other side?
How primitive!
I have a map of a galaxy with 4 billion x 4 billion x 4 billion coordinate points and who knows how many hundreds of thousands of stars. There are 4 billion of these galaxies in each of the 4 billion universes. One of the galaxies should last the players forever. Don't try to store all that in an array.
I have lived with several Zen masters - all of them were cats.
His last invention was an evil Lasagna. It didn't kill anyone, and it actually tasted pretty good.
|
|
|
|
|
CodeWraith wrote: Map? Reappear on the other side?
How primitive! May be, but it is simple and it works
CodeWraith wrote: I have a map of a galaxy with 4 billion x 4 billion x 4 billion coordinate points and who knows how many hundreds of thousands of stars. There are 4 billion of these galaxies in each of the 4 billion universes. One of the galaxies should last the players forever. Don't try to store all that in an array. Tell me you are building Elite III or a new Master of Orion
Bastard Programmer from Hell
If you can't read my code, try converting it here[^]
"If you just follow the bacon Eddy, wherever it leads you, then you won't have to think about politics." -- Some Bell.
|
|
|
|
|
I still play Master of Orion II very often. I have not really worked on my game in quite a while now. It's more a browser game that has accidentally fallen out of the browser. I have posted the link to the video before, but you can see what I need octrees for: link[^]
I have lived with several Zen masters - all of them were cats.
His last invention was an evil Lasagna. It didn't kill anyone, and it actually tasted pretty good.
|
|
|
|
|
Have you considered a pre-release on Steam?
If you need someone to test the game, please let me know
Bastard Programmer from Hell
If you can't read my code, try converting it here[^]
"If you just follow the bacon Eddy, wherever it leads you, then you won't have to think about politics." -- Some Bell.
|
|
|
|
|
I would first need to get my Padawan onboard again and then we need to set up a new server.
I have lived with several Zen masters - all of them were cats.
His last invention was an evil Lasagna. It didn't kill anyone, and it actually tasted pretty good.
|
|
|
|