board = initboard (10, 10);
} else if (strcmp (name, "12x12") == 0) {
board = initboard (12, 12);
+ } else if (strcmp (name, "14x14") == 0) {
+ board = initboard (14, 14);
+ } else if (strcmp (name, "16x16") == 0) {
+ board = initboard (16, 16);
} else if (strcmp (name, "list") == 0) {
- printf ("board: 6x6 8x8 10x10 12x12\n");
+ printf ("board: 6x6 8x8 10x10 12x12 14x14 16x16\n");
board = (board_t *)(-1);
}
return board;
}
+int _evaldir (int dir, int a)
+{
+ int dx = 0;
+ int dy = 0;
+ switch (dir) {
+ case 0:
+ dx = 1;
+ break;
+ case 1:
+ dx = dy = 1;
+ break;
+ case 2:
+ dy = 1;
+ break;
+ case 3:
+ dx = -1;
+ dy = 1;
+ break;
+ case 4:
+ dx = -1;
+ break;
+ case 5:
+ dx = dy = -1;
+ break;
+ case 6:
+ dy = -1;
+ break;
+ case 7:
+ dx = 1;
+ dy = -1;
+ break;
+ }
+
+ return (a) ? dy : dx;
+}
+
+int _checklines (board_t *board, int x, int y, int id)
+{
+ int ret = 0;
+ int dir;
+
+ for (dir = 0; dir < 8; dir++) {
+ int dx = _evaldir (dir, 0);
+ int dy = _evaldir (dir, 1);
+
+ int n = 1;
+ while ((x + n * dx >= 0) && (x + n * dx < board->width) &&
+ (y + n * dy >= 0) && (y + n * dy < board->height) &&
+ (*getcell (board, x + n * dx, y + n * dy) == '0' + (id ? 0 : 1))) {
+ n++;
+ *getcell (board, x + n * dx, y + n * dy) = '0' + id;
+ ret = 1;
+ }
+ }
+
+ return ret;
+}
+
+int putdisk (board_t *board, int x, int y, int id)
+{
+ int ret = 0;
+ char *cell = getcell (board, x, y);
+ if (*cell == ' ') {
+ if (_checklines (board, x, y, id)) {
+ *cell = '0' + id;
+ ret = 1;
+ }
+ }
+ return ret;
+}
+
/* vim: set ts=4 sw=4 et: */
board_t *loadboard (char *str);
+int putdisk (board_t *board, int x, int y, int id);
+
#endif /* __FUNCTION_H__ */
/* vim: set ts=4 sw=4 et: */
char *filename = NULL;
int scale = 1;
-char *boardname = "8x8";
+char *boardname = "12x12";
char *help =
"<i> Move up cursor\n"
/* game controls */
switch (ch) {
- case '\n':
- case '\r':
+ case KEY_BACKSPACE:
+ case KEY_DELETE:
+ case 127:
case ' ':
id = (id == 0) ? 1 : 0;
break;
xcursor++;
}
break;
+ case '\n':
+ case '\r':
+ case 'o':
+ if (putdisk (board, xcursor, ycursor, id)) {
+ id = (id == 0) ? 1 : 0;
+ }
+ break;
}
}