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 | } |