/** * * 2ls10: a clone of the popular 2048 game * * (c) 2019 - Vincenzo "KatolaZ" Nicosia * * See COPYING for terms and conditions * */ #include #include #include #include #include #define cond(x) ((t) ? (x)/n : (x)%n) int st[1<<8], lo, li, ls, m, pt, n, pl, t; char nf; struct termios t1, t2; void clean(char *str){ if (str) printf("%s\n", str); tcsetattr(0, TCSANOW, &t1); exit(0); } int dash(int i){ return i? putchar('-') + dash(i-1):0; } int line(int i){ return putchar('+') + (i ? dash(6)+ line(i-1): putchar(10)); } int valid_move(){ int i; for (i=0; i 0) printf("%5d |", 1<= 0 && cond(j) != ls); } void merge(int j){ do { if (st[j] && st[j] == st[j-li]){ st[j-li] += 1; if (st[j-li] == 11) pl ^= pl; pt += 1<= 0 && cond(j) != ls); } void update(){ int i; for(i =0; i 1) { n = atoi(argv[1]); if (n< 2 || n > 16){ fprintf(stderr, "Usage: 2ls10 [2-16]\n"); exit(1); } } nf = n * n; tcgetattr(0, &t1); t2 = t1; t2.c_lflag &= ~(ICANON | ECHO); tcsetattr(0, TCSANOW, &t2); play(); }