00001
00002
00003
00004
00005
00006
00007
00008
00021 #define NUMDIRS 6
00022
00023
00024
00025 #define NODIR -1
00026 #define NORTHEAST 0
00027 #define EAST 1
00028 #define SOUTHEAST 2
00029 #define SOUTHWEST 3
00030 #define WEST 4
00031 #define NORTHWEST 5
00032
00034 #define DIRNAMES { "NE", "E", "SE", "SW", "W", "NW" }
00035
00037 #define DIRX { 0, 1, 1, 0, -1, -1 }
00038 #define DIRY { 1, 0, -1, -1, 0, 1 }
00039
00046 #define for_all_directions(dir) \
00047 for ((dir) = 0; (dir) < NUMDIRS; ++(dir))
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059 #define for_all_directions_randomly(dir,tmp) \
00060 for ((tmp) = 0, (dir) = xrandom(NUMDIRS); (tmp) < NUMDIRS; ++(tmp), (dir) = ((dir) + 1) % NUMDIRS)
00061
00066 #define left_dir(d) (((d) + 5) % NUMDIRS)
00067
00072 #define right_dir(d) (((d) + 1) % NUMDIRS)
00073
00079 #define opposite_dir(d) (((d) + 3) % NUMDIRS)
00080
00088 #define dir_subtract(d1, d2) (((d1) - (d2) + NUMDIRS) % NUMDIRS)
00089
00096 #define angle_with(d1, d2) \
00097 min(((d1) - (d2) + NUMDIRS) % NUMDIRS, ((d2) - (d1) + NUMDIRS) % NUMDIRS)
00098
00104 #define random_dir() (xrandom(NUMDIRS))
00105
00107 extern char *dirnames[];
00108
00110 extern int dirx[];
00111
00112 extern int diry[];