Wed, 03 Sep 2008 17:15:47 +0100
added "naive" and "wraparound" algorithms to lpfklife
test/lpfklife.c | file | annotate | diff | revisions |
1.1 diff -r 1519a9a8d924 -r f76c929f65e6 test/lpfklife.c 1.2 --- a/test/lpfklife.c Tue Aug 26 22:13:49 2008 +0100 1.3 +++ b/test/lpfklife.c Wed Sep 03 17:15:47 2008 +0100 1.4 @@ -5,6 +5,8 @@ 1.5 #include <string.h> 1.6 #include "liblpfk.h" 1.7 1.8 +#define LIFE_ALGORITHM_NAIVE 1.9 + 1.10 /************************ 1.11 * copied from http://linux-sxs.org/programming/kbhit.html 1.12 */ 1.13 @@ -153,19 +155,79 @@ 1.14 nei = 0; 1.15 1.16 // count neighbours 1.17 +#ifdef LIFE_ALGORITHM_NAIVE 1.18 + /// NAIVE ALGORITHM 1.19 + // Assumes every cell outside the grid is dead. 1.20 if (y > 0) { 1.21 if (x > 0) { if (old_gamegrid[y-1][x-1]) nei++; } 1.22 if (old_gamegrid[y-1][x]) nei++; 1.23 if (x < 5) { if (old_gamegrid[y-1][x+1]) nei++; } 1.24 } 1.25 + 1.26 if (x > 0) { if (old_gamegrid[y][x-1]) nei++; } 1.27 // old_gamegrid[x][y] is us! 1.28 if (x < 5) { if (old_gamegrid[y][x+1]) nei++; } 1.29 + 1.30 if (y < 5) { 1.31 if (x > 0) { if (old_gamegrid[y+1][x-1]) nei++; } 1.32 if (old_gamegrid[y+1][x]) nei++; 1.33 if (x < 5) { if (old_gamegrid[y+1][x+1]) nei++; } 1.34 } 1.35 +#else 1.36 + /// WRAPPING ALGORITHM 1.37 + // Accesses off of one side of the grid are wrapped to the 1.38 + // opposite side. 1.39 + // 1.40 + // WARNING: this algorithm has NOT been extensively tested, 1.41 + // and completely screws up the glider test. 1.42 + // 1.43 + // TODO: test and debug: 1.44 + if (y > 0) { 1.45 + if (x > 0) { if (old_gamegrid[y-1][x-1]) nei++; } 1.46 + else { if (old_gamegrid[y-1][5]) nei++; } 1.47 + 1.48 + if (old_gamegrid[y-1][x]) nei++; 1.49 + 1.50 + if (x < 5) { if (old_gamegrid[y-1][x+1]) nei++; } 1.51 + else { if (old_gamegrid[y-1][0]) nei++; } 1.52 + } else { 1.53 + if (x > 0) { if (old_gamegrid[5][x-1]) nei++; } 1.54 + else { if (old_gamegrid[5][5]) nei++; } 1.55 + 1.56 + if (old_gamegrid[y-1][x]) nei++; 1.57 + 1.58 + if (x < 5) { if (old_gamegrid[5][x+1]) nei++; } 1.59 + else { if (old_gamegrid[5][0]) nei++; } 1.60 + } 1.61 + 1.62 + 1.63 + if (x > 0) { if (old_gamegrid[y][x-1]) nei++; } 1.64 + else { if (old_gamegrid[y][5]) nei++; } 1.65 + 1.66 + // old_gamegrid[x][y] is us! 1.67 + 1.68 + if (x < 5) { if (old_gamegrid[y][x+1]) nei++; } 1.69 + else { if (old_gamegrid[y][0]) nei++; } 1.70 + 1.71 + 1.72 + if (y < 5) { 1.73 + if (x > 0) { if (old_gamegrid[y+1][x-1]) nei++; } 1.74 + else { if (old_gamegrid[y+1][5]) nei++; } /// 1.75 + 1.76 + if (old_gamegrid[y+1][x]) nei++; 1.77 + 1.78 + if (x < 5) { if (old_gamegrid[y+1][x+1]) nei++; } 1.79 + else { if (old_gamegrid[y+1][0]) nei++; } /// 1.80 + } else { 1.81 + if (x > 0) { if (old_gamegrid[y+1][x-1]) nei++; } 1.82 + else { if (old_gamegrid[y+1][5]) nei++; } /// 1.83 + 1.84 + if (old_gamegrid[y+1][x]) nei++; 1.85 + 1.86 + if (x < 5) { if (old_gamegrid[y+1][x+1]) nei++; } 1.87 + else { if (old_gamegrid[y-1][0]) nei++; } /// 1.88 + } 1.89 +#endif 1.90 1.91 // so what happens to our cell? 1.92 if (old_gamegrid[y][x]) {