Jump to content

  • Log In with Google      Sign In   
  • Create Account

We need your feedback on a survey! Each completed response supports our community and gives you a chance to win a $25 Amazon gift card!


thescholar

Member Since 19 May 2012
Offline Last Active Private

Topics I've Started

Auto-tile system - algorithm to auto-generate hash table

30 October 2012 - 07:21 PM

Recently I've programmed an auto-tile system for my game engine, which use 47 possible tile combinations. The technique is to check each of the eight adjacent cells ariound the center tile which are represented as a power of two, like so:

128, 001, 002
064, 000, 004
032, 016, 008

This method work great so far for me, the autotile system is assembled with the proper edge tiles automatically in real-time.

The real issue was to write the hash table of keys and values, which was EXTREMELY time-consuming. It took me nearly 6 hours to enter the values and make sure they're exact. See my hash table below.

My question: is there a way to auto-generate the keys/values of that hash table with an algorithm so that next time I don't have to enter it manually? I feel it's very important to ask because I will probably have to do it again for something else similar.

[source lang="csharp"]public void create_hash() { hash_table.Add( 0 , 47 ); hash_table.Add( 1 , 35 ); hash_table.Add( 2 , 47 ); hash_table.Add( 3 , 35 ); hash_table.Add( 4 , 7 ); hash_table.Add( 5 , 36 ); hash_table.Add( 6 , 7 ); hash_table.Add( 7 , 32 ); hash_table.Add( 8 , 47 ); hash_table.Add( 9 , 35 ); hash_table.Add( 10 , 47 ); hash_table.Add( 11 , 35 ); hash_table.Add( 12 , 7 ); hash_table.Add( 13 , 36 ); hash_table.Add( 14 , 7 ); hash_table.Add( 15 , 32 ); hash_table.Add( 16 , 3 ); hash_table.Add( 17 , 19 ); hash_table.Add( 18 , 3 ); hash_table.Add( 19 , 19 ); hash_table.Add( 20 , 4 ); hash_table.Add( 21 , 20 ); hash_table.Add( 22 , 4 ); hash_table.Add( 23 , 14 ); hash_table.Add( 24 , 3 ); hash_table.Add( 25 , 19 ); hash_table.Add( 26 , 3 ); hash_table.Add( 27 , 19 ); hash_table.Add( 28 , 0 ); hash_table.Add( 29 , 12 ); hash_table.Add( 30 , 0 ); hash_table.Add( 31 , 16 ); hash_table.Add( 32 , 47 ); hash_table.Add( 33 , 35 ); hash_table.Add( 34 , 47 ); hash_table.Add( 35 , 35 ); hash_table.Add( 36 , 7 ); hash_table.Add( 37 , 36 ); hash_table.Add( 38 , 7 ); hash_table.Add( 39 , 32 ); hash_table.Add( 40 , 47 ); hash_table.Add( 41 , 35 ); hash_table.Add( 42 , 47 ); hash_table.Add( 43 , 35 ); hash_table.Add( 44 , 7 ); hash_table.Add( 45 , 36 ); hash_table.Add( 46 , 7 ); hash_table.Add( 47 , 32 ); hash_table.Add( 48 , 3 ); hash_table.Add( 49 , 19 ); hash_table.Add( 50 , 3 ); hash_table.Add( 51 , 19 ); hash_table.Add( 52 , 4 ); hash_table.Add( 53 , 20 ); hash_table.Add( 54 , 4 ); hash_table.Add( 55 , 14 ); hash_table.Add( 56 , 3 ); hash_table.Add( 57 , 19 ); hash_table.Add( 58 , 3 ); hash_table.Add( 59 , 19 ); hash_table.Add( 60 , 0 ); hash_table.Add( 61 , 12 ); hash_table.Add( 62 , 0 ); hash_table.Add( 63 , 16 ); hash_table.Add( 64 , 9 ); hash_table.Add( 65 , 38 ); hash_table.Add( 66 , 9 ); hash_table.Add( 67 , 38 ); hash_table.Add( 68 , 8 ); hash_table.Add( 69 , 37 ); hash_table.Add( 70 , 8 ); hash_table.Add( 71 , 45 ); hash_table.Add( 72 , 9 ); hash_table.Add( 73 , 38 ); hash_table.Add( 74 , 9 ); hash_table.Add( 75 , 38 ); hash_table.Add( 76 , 8 ); hash_table.Add( 77 , 37 ); hash_table.Add( 78 , 8 ); hash_table.Add( 79 , 45 ); hash_table.Add( 80 , 6 ); hash_table.Add( 81 , 22 ); hash_table.Add( 82 , 6 ); hash_table.Add( 83 , 22 ); hash_table.Add( 84 , 5 ); hash_table.Add( 85 , 21 ); hash_table.Add( 86 , 6 ); hash_table.Add( 87 , 42 ); hash_table.Add( 88 , 6 ); hash_table.Add( 89 , 22 ); hash_table.Add( 90 , 6 ); hash_table.Add( 91 , 22 ); hash_table.Add( 92 , 29 ); hash_table.Add( 93 , 26 ); hash_table.Add( 94 , 29 ); hash_table.Add( 95 , 11 ); hash_table.Add( 96 , 9 ); hash_table.Add( 97 , 38 ); hash_table.Add( 98 , 9 ); hash_table.Add( 99 , 38 ); hash_table.Add( 100 , 8 ); hash_table.Add( 101 , 37 ); hash_table.Add( 102 , 8 ); hash_table.Add( 103 , 45 ); hash_table.Add( 104 , 9 ); hash_table.Add( 105 , 38 ); hash_table.Add( 106 , 9 ); hash_table.Add( 107 , 38 ); hash_table.Add( 108 , 8 ); hash_table.Add( 109 , 37 ); hash_table.Add( 110 , 8 ); hash_table.Add( 111 , 45 ); hash_table.Add( 112 , 2 ); hash_table.Add( 113 , 13 ); hash_table.Add( 114 , 2 ); hash_table.Add( 115 , 13 ); hash_table.Add( 116 , 30 ); hash_table.Add( 117 , 27 ); hash_table.Add( 118 , 30 ); hash_table.Add( 119 , 39 ); hash_table.Add( 120 , 2 ); hash_table.Add( 121 , 13 ); hash_table.Add( 122 , 2 ); hash_table.Add( 123 , 13 ); hash_table.Add( 124 , 1 ); hash_table.Add( 125 , 44 ); hash_table.Add( 126 , 1 ); hash_table.Add( 127 , 41 ); hash_table.Add( 128 , 47 ); hash_table.Add( 129 , 35 ); hash_table.Add( 130 , 47 ); hash_table.Add( 131 , 35 ); hash_table.Add( 132 , 7 ); hash_table.Add( 133 , 36 ); hash_table.Add( 134 , 7 ); hash_table.Add( 135 , 32 ); hash_table.Add( 136 , 47 ); hash_table.Add( 137 , 35 ); hash_table.Add( 138 , 47 ); hash_table.Add( 139 , 35 ); hash_table.Add( 140 , 7 ); hash_table.Add( 141 , 36 ); hash_table.Add( 142 , 7 ); hash_table.Add( 143 , 32 ); hash_table.Add( 144 , 3 ); hash_table.Add( 145 , 19 ); hash_table.Add( 146 , 3 ); hash_table.Add( 147 , 19 ); hash_table.Add( 148 , 4 ); hash_table.Add( 149 , 20 ); hash_table.Add( 150 , 4 ); hash_table.Add( 151 , 14 ); hash_table.Add( 152 , 3 ); hash_table.Add( 153 , 19 ); hash_table.Add( 154 , 3 ); hash_table.Add( 155 , 19 ); hash_table.Add( 156 , 0 ); hash_table.Add( 157 , 12 ); hash_table.Add( 158 , 0 ); hash_table.Add( 159 , 16 ); hash_table.Add( 160 , 47 ); hash_table.Add( 161 , 35 ); hash_table.Add( 162 , 47 ); hash_table.Add( 163 , 35 ); hash_table.Add( 164 , 7 ); hash_table.Add( 165 , 36 ); hash_table.Add( 166 , 7 ); hash_table.Add( 167 , 32 ); hash_table.Add( 168 , 47 ); hash_table.Add( 169 , 35 ); hash_table.Add( 170 , 47 ); hash_table.Add( 171 , 35 ); hash_table.Add( 172 , 7 ); hash_table.Add( 173 , 36 ); hash_table.Add( 174 , 7 ); hash_table.Add( 175 , 32 ); hash_table.Add( 176 , 3 ); hash_table.Add( 177 , 19 ); hash_table.Add( 178 , 3 ); hash_table.Add( 179 , 19 ); hash_table.Add( 180 , 4 ); hash_table.Add( 181 , 20 ); hash_table.Add( 182 , 4 ); hash_table.Add( 183 , 14 ); hash_table.Add( 184 , 3 ); hash_table.Add( 185 , 19 ); hash_table.Add( 186 , 3 ); hash_table.Add( 187 , 19 ); hash_table.Add( 188 , 0 ); hash_table.Add( 189 , 12 ); hash_table.Add( 190 , 0 ); hash_table.Add( 191 , 16 ); hash_table.Add( 192 , 9 ); hash_table.Add( 193 , 34 ); hash_table.Add( 194 , 9 ); hash_table.Add( 195 , 34 ); hash_table.Add( 196 , 8 ); hash_table.Add( 197 , 46 ); hash_table.Add( 198 , 8 ); hash_table.Add( 199 , 33 ); hash_table.Add( 200 , 9 ); hash_table.Add( 201 , 34 ); hash_table.Add( 202 , 9 ); hash_table.Add( 203 , 34 ); hash_table.Add( 204 , 8 ); hash_table.Add( 205 , 46 ); hash_table.Add( 206 , 8 ); hash_table.Add( 207 , 33 ); hash_table.Add( 208 , 6 ); hash_table.Add( 209 , 15 ); hash_table.Add( 210 , 6 ); hash_table.Add( 211 , 15 ); hash_table.Add( 212 , 5 ); hash_table.Add( 213 , 43 ); hash_table.Add( 214 , 5 ); hash_table.Add( 215 , 28 ); hash_table.Add( 216 , 6 ); hash_table.Add( 217 , 15 ); hash_table.Add( 218 , 6 ); hash_table.Add( 219 , 15 ); hash_table.Add( 220 , 29 ); hash_table.Add( 221 , 23 ); hash_table.Add( 222 , 29 ); hash_table.Add( 223 , 25 ); hash_table.Add( 224 , 9 ); hash_table.Add( 225 , 34 ); hash_table.Add( 226 , 9 ); hash_table.Add( 227 , 34 ); hash_table.Add( 228 , 8 ); hash_table.Add( 229 , 46 ); hash_table.Add( 230 , 8 ); hash_table.Add( 231 , 33 ); hash_table.Add( 232 , 9 ); hash_table.Add( 233 , 34 ); hash_table.Add( 234 , 9 ); hash_table.Add( 235 , 34 ); hash_table.Add( 236 , 8 ); hash_table.Add( 237 , 46 ); hash_table.Add( 238 , 8 ); hash_table.Add( 239 , 33 ); hash_table.Add( 240 , 2 ); hash_table.Add( 241 , 18 ); hash_table.Add( 242 , 2 ); hash_table.Add( 243 , 18 ); hash_table.Add( 244 , 30 ); hash_table.Add( 245 , 10 ); hash_table.Add( 246 , 30 ); hash_table.Add( 247 , 24 ); hash_table.Add( 248 , 2 ); hash_table.Add( 249 , 18 ); hash_table.Add( 250 , 2 ); hash_table.Add( 251 , 18 ); hash_table.Add( 252 , 1 ); hash_table.Add( 253 , 40 ); hash_table.Add( 254 , 1 ); hash_table.Add( 255 , 17 ); }[/source]

How to match a 2d pattern in a 2d array?

30 October 2012 - 04:01 PM

I'm trying to figure out how it's possible to match a 2D pattern inside a 2D array as shown below;


2D array
1, 0, 0, 1, 0, 1
1, 0, 1, 1, 1, 1
0, 1, 0, 0, 1, 0
1, 0, 1, 1, 0, 1
0, 0, 0, 0, 1, 0
1, 1, 1, 1, 0, 1

2D pattern to be matched
1, 0, 1
0, 1, 0
1, 0, 1

Let's mention that the 2D array can be larger in other contexts. I'm also using 0 and 1 as values, but it could be any other IDs. I just tried to keep my example simple. Anyone know what would be the most efficient and fastest way to match all patterns in the 2d array in a C++ or C# program (or whatever)?

It's for a game I'm trying to make. When clicking with the mouse the player set tiles on the grid, so in real-time I need to check if the pattern condition is met each time the player click to change a tile.

URLs or tutorials with similar topics would be greatly appreciated. Thank you for your insights!

Which branch of mathematics teach about pathfinding?

29 October 2012 - 06:22 PM

So as the topic title already ask, which branch of mathematics teach pathfinding? I would like to learn more about similar process or topics. I remember having seen a mathematics book with some kind of pathfinding drawings (with nodes), I never could find it again.

Thanks for the insights!

Scripting system, how to make C/C++ interpret Ruby Code

19 May 2012 - 04:16 PM

Well, I have a bunch of scripts written in Ruby, and somehow I need C or C++ interpret this code to run it. I've never done this kind of task before, so I feel kinda lost. Anyone can guide me and recommend the proper tutorials, books or websites so I can make a good start?

Thank you and have a great week-end!

NeHe Demo Collection?

19 May 2012 - 04:09 PM

Mm, I'm just wondering, there was once a section on NeHe's website with a collection of demos submitted by users, but it doesn't seems to be there any longer. Can we find this section again somewhere? There was lots of interesting demos there to study.

PARTNERS