aboutsummaryrefslogtreecommitdiffhomepage
path: root/2048_renamed.c
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2021-11-13 08:50:09 +0900
committernsfisis <nsfisis@gmail.com>2021-11-13 08:50:09 +0900
commit3af148406331690bbfc717e73d09151f89b8f260 (patch)
tree9cc7b85b77b19a4357b50399e0457920bbb63535 /2048_renamed.c
parent1bda6452335c76f80b63eb70eb0e2736b8b9d6f6 (diff)
download2048.c-3af148406331690bbfc717e73d09151f89b8f260.tar.gz
2048.c-3af148406331690bbfc717e73d09151f89b8f260.tar.zst
2048.c-3af148406331690bbfc717e73d09151f89b8f260.zip
rename source files
Diffstat (limited to '2048_renamed.c')
-rw-r--r--2048_renamed.c201
1 files changed, 0 insertions, 201 deletions
diff --git a/2048_renamed.c b/2048_renamed.c
deleted file mode 100644
index c4d0d53..0000000
--- a/2048_renamed.c
+++ /dev/null
@@ -1,201 +0,0 @@
-#include <ncurses.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <time.h>
-#include <unistd.h>
-
-#define s(_) waddstr(W, _)
-#define c(_) waddch(W, _)
-#define f(f, _) wprintw(W, f, _)
-#define n c('\n')
-
-#define r(_, n) for (int _ = 0; _ < n; ++_)
-
-#define t(_) (G + y * ((x + S) % (S + 1) + _ * x) + (S + 1 - y) * i)
-
-WINDOW *W;
-char *M = "\0";
-int S, R, C, N, E, *L, *T, F[128], *G = F;
-
-void _() {
- c('+');
- r(i, 8 * S - 1) {
- c('-');
- }
- c('+');
- n;
-}
-
-void l() {
- c('|');
- r(i, S) {
- r(j, 8) {
- c(32);
- }
- c('\b');
- c('|');
- }
- n;
-}
-
-void g() {
- _();
- r(i, S) {
- l();
-
- s("| ");
- r(j, S) {
- if (!*G) {
- s(" | ");
- } else if (*G >= 1024) {
- f(" %2dk | ", *G / 1024);
- } else {
- f("%4d | ", *G);
- }
- ++G;
- }
- n;
-
- l();
-
- if (i < S - 1) {
- c('|');
- r(j, S) {
- r(j, 8) {
- c('-');
- }
- c('\b');
- if (j < S - 1) {
- c('+');
- }
- }
- c('|');
- n;
- }
- }
- _();
- G -= S * S;
-}
-
-int m(int x, int y, int d) {
- C = 0;
- r(i, S) {
- E = 0;
- L = 0;
- r(j, S) {
- T = t(j);
- if (*T) {
- if (L && *T == *L) {
- if (d) {
- *L *= 2;
- *T = 0;
- }
- L = 0;
- C = 1;
- } else {
- L = t(E);
- if (d) {
- *L = *T;
- }
- ++E;
- }
- }
- }
- for (; E < S; ++E) {
- T = t(E);
- C |= *T;
- if (d) {
- *T = 0;
- }
- }
- }
- return !C;
-}
-
-void p() {
- E = 0;
- r(i, S * S) {
- if (!G[i]) {
- ++E;
- }
- }
- if (E == 0) {
- return;
- }
- N = rand() % E;
- r(i, S * S) {
- if (!G[i] && --E == N) {
- G[i] = rand() % 8 ? 2 : 4;
- }
- }
-}
-
-int main(int argc, char **argv) {
- srand(time(0));
-
- initscr();
- cbreak();
- noecho();
- curs_set(0);
- getmaxyx(stdscr, R, C);
-
- S = argc > 1 ? (*argv[1] - '0') : 4;
- if (S <= 1 || S > 8) {
- M = "\1Invalid size given.\n";
- goto q;
- }
-
- W = newwin(0, 0, (R - 4 * S) / 2, (C - 8 * S) / 2);
- if (!W) {
- M = "\1Terminal too small.\n";
- goto q;
- }
-
- p();
- p();
-
- while (1) {
- wclear(W);
- g();
- s(" h,j,k,l: move q: quit");
- wrefresh(W);
-
- switch (wgetch(W)) {
- case 'q':
- goto q;
-
- case 'h':
- m(1, 1, 1);
- goto e;
- case 'j':
- m(-1, S, 1);
- goto e;
- case 'k':
- m(1, S, 1);
- goto e;
- case 'l':
- m(-1, 1, 1);
- goto e;
-
- e:
- if (C) {
- p();
- }
- if (m(1, 1, 0) & m(-1, 1, 0) & m(1, S, 0) & m(-1, S, 0)) {
- M = "\0Game over.\n";
- goto q;
- }
- usleep(2048 * 8);
- break;
- }
- }
-
-q:
- if (W) {
- delwin(W);
- }
- endwin();
-
- fputs(M + 1, stderr);
- return *M;
-}