#include #include #include #include #include int st[1<<7], lo, li, ls; int m, pt, n, pl, t; char nf; struct termios t1, t2; int cond (int j){ return t? j/n : j%n; } 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]); nf = n * n; tcgetattr(0, &t1); t2 = t1; t2.c_lflag &= ~(ICANON | ECHO); tcsetattr(0, TCSANOW, &t2); set_rnd(); pt = 0; pl = 1; while(pl){ //pr_st(); set_rnd(); print_state(); switch(getchar()){ case 'l': lo = ls = n-1; li = -1; m = n; t = 0; break; case 'h': lo = ls = 0; li = 1; m = n; t = 0; break; case 'j': lo = n * (n-1); li = -n; ls = -1; m = 1; t=1; break; case 'k': lo = 0; li = ls = n; m = 1; t=1; break; case 'q': clean("Thanks!"); } update(); } print_state(); clean("you won!"); }