SHOW:
|
|
- or go back to the newest paste.
| 1 | - | // start by creating a array the same size as the map (or a field in the map udt) |
| 1 | + | // start by creating an array the same size as the map (or a field in the map udt) . I'm assuming here the map is 32x32. |
| 2 | ||
| 3 | int pathing[32,32]; | |
| 4 | ||
| 5 | - | //create a counter c initialised to zero. |
| 5 | + | |
| 6 | - | int c = 0; |
| 6 | + | // create a doneflag to record when a search pass didn't do anthing. initialise to zero to make a first pass. |
| 7 | int doneflag = 0; | |
| 8 | - | // create a flag to record when a search pass didn't do anthing. initialise to zero to make a first pass. |
| 8 | + | |
| 9 | - | int flag = 0; |
| 9 | + | |
| 10 | for(x=0; x<32; x++) {
| |
| 11 | for(y=0; y<32; y++) {
| |
| 12 | pathing[x,y] = 256; | |
| 13 | } | |
| 14 | } | |
| 15 | ||
| 16 | // set the element where the player is to 0. | |
| 17 | pathing[player.x, player.y] = 0; | |
| 18 | - | // set the element where the player is to c. |
| 18 | + | |
| 19 | - | pathing[player.x, player.y] = c; |
| 19 | + | |
| 20 | while (doneflag == 0) | |
| 21 | ||
| 22 | - | while (flag == 0) |
| 22 | + | // set a doneflag to 1 to say we are done. |
| 23 | doneflag = 1; | |
| 24 | - | // set a flag to 1 to say we are done. |
| 24 | + | |
| 25 | - | flag = 1; |
| 25 | + | |
| 26 | for(x=0; x<32; x++) {
| |
| 27 | for(y=0; y<32; y++) {
| |
| 28 | ||
| 29 | ||
| 30 | // if you find an element with value < 256 then look at four neighbours. if any of those is a floor tile, AND has value 256 then set it equal to value+1. | |
| 31 | ||
| 32 | - | // if you find an element with value = c then look at four neighbours. if any of those is a floor tile, AND has value 256 then set it equal to counter value+1. |
| 32 | + | if(pathing[x,y] < 256) {
|
| 33 | if(pathing[x-1,y] == 256 && map[x-1,y] == floor) {pathing[x-1,y]=pathing[x,y]+1; doneflag=0;}
| |
| 34 | - | if(pathing[x,y] == c) {
|
| 34 | + | if(pathing[x+1,y] == 256 && map[x+1,y] == floor) {pathing[x+1,y]=pathing[x,y]+1; doneflag=0;}
|
| 35 | - | if(pathing[x-1,y] == 256 && map[x-1,y] == floor) {pathing[x-1,y]=c+1; flag=0;}
|
| 35 | + | if(pathing[x,y-1] == 256 && map[x,y-1] == floor) {pathing[x,y-1]=pathing[x,y]+1; doneflag=0;}
|
| 36 | - | if(pathing[x+1,y] == 256 && map[x+1,y] == floor) {pathing[x+1,y]=c+1; flag=0;}
|
| 36 | + | if(pathing[x,y+1] == 256 && map[x,y+1] == floor) {pathing[x,y+1]=pathing[x,y]+1; doneflag=0;}
|
| 37 | - | if(pathing[x,y-1] == 256 && map[x,y-1] == floor) {pathing[x,y-1]=c+1; flag=0;}
|
| 37 | + | |
| 38 | - | if(pathing[x,y+1] == 256 && map[x,y+1] == floor) {pathing[x,y+1]=c+1; flag=0;}
|
| 38 | + | |
| 39 | // close the double loop | |
| 40 | } | |
| 41 | } | |
| 42 | ||
| 43 | //close while | |
| 44 | } |