From e432b3f6d316f5eef9b29c72e8a79cfcccadd5ba Mon Sep 17 00:00:00 2001 From: girst Date: Sun, 4 Nov 2018 06:21:49 +0100 Subject: [PATCH] win screen also removed vt220-test-scheme; will re-add when actual patterns are decided. --- schemes.h | 49 +------------------------------------------------ sol.c | 32 ++++++++++++++++++++++++++------ sol.h | 1 + 3 files changed, 28 insertions(+), 54 deletions(-) diff --git a/schemes.h b/schemes.h index 1923c5f..c1b6abd 100644 --- a/schemes.h +++ b/schemes.h @@ -5,13 +5,11 @@ struct scheme { int width; /* column alignment */ - int height; /* height of a card */ //TODO: obsoletes NULL termination + int height; /* height of a card */ int overlap; /* no of lines to draw when cards overlapp */ char** card[_NUM_CARDS_internal]; char** facedown; char** placeholder; - char* init_seq; /* for setting up charset */ - char* reset_seq; }; #define ULCARD(s, r) (char*[]) \ @@ -70,8 +68,6 @@ const struct scheme unicode_large_mono = { "╎ ╎", "╰╌╌╌╯" }, - .init_seq = NULL, - .reset_seq = NULL, }; const struct scheme unicode_large_color = { .width = 5, @@ -118,8 +114,6 @@ const struct scheme unicode_large_color = { "╎ ╎", "╰╌╌╌╯" }, - .init_seq = NULL, - .reset_seq = NULL, }; const struct scheme unicode_small_mono = { .width = 2, @@ -156,46 +150,5 @@ const struct scheme unicode_small_mono = { }, .facedown = (char*[]){"🂠 "}, .placeholder = (char*[]){"❲❳"}, - .init_seq = NULL, - .reset_seq = NULL, -}; - -const struct scheme vt220_small = { //TODO: this is a placeholder - .width = 2, - .height = 1, - .overlap = 1, - .card = { - [NO_CARD] = (char*[]){" "}, - [CLU_A] = USCARD("CA"), [DIA_A] = USCARD("DA"), - [HEA_A] = USCARD("HA"), [SPA_A] = USCARD("SA"), - [CLU_2] = USCARD("C2"), [DIA_2] = USCARD("D2"), - [HEA_2] = USCARD("H2"), [SPA_2] = USCARD("S2"), - [CLU_3] = USCARD("C3"), [DIA_3] = USCARD("D3"), - [HEA_3] = USCARD("H3"), [SPA_3] = USCARD("S3"), - [CLU_4] = USCARD("C4"), [DIA_4] = USCARD("D4"), - [HEA_4] = USCARD("H4"), [SPA_4] = USCARD("S4"), - [CLU_5] = USCARD("C5"), [DIA_5] = USCARD("D5"), - [HEA_5] = USCARD("H5"), [SPA_5] = USCARD("S5"), - [CLU_6] = USCARD("C6"), [DIA_6] = USCARD("D6"), - [HEA_6] = USCARD("H6"), [SPA_6] = USCARD("S6"), - [CLU_7] = USCARD("C7"), [DIA_7] = USCARD("D7"), - [HEA_7] = USCARD("H7"), [SPA_7] = USCARD("S7"), - [CLU_8] = USCARD("C8"), [DIA_8] = USCARD("D8"), - [HEA_8] = USCARD("H8"), [SPA_8] = USCARD("S8"), - [CLU_9] = USCARD("C9"), [DIA_9] = USCARD("D9"), - [HEA_9] = USCARD("H9"), [SPA_9] = USCARD("S9"), - [CLU_X] = USCARD("CX"), [DIA_X] = USCARD("DX"), - [HEA_X] = USCARD("HX"), [SPA_X] = USCARD("SX"), - [CLU_J] = USCARD("CJ"), [DIA_J] = USCARD("DJ"), - [HEA_J] = USCARD("HJ"), [SPA_J] = USCARD("SJ"), - [CLU_Q] = USCARD("CQ"), [DIA_Q] = USCARD("DQ"), - [HEA_Q] = USCARD("HQ"), [SPA_Q] = USCARD("SQ"), - [CLU_K] = USCARD("CK"), [DIA_K] = USCARD("DK"), - [HEA_K] = USCARD("HK"), [SPA_K] = USCARD("SK"), - }, - .facedown = (char*[]){"##"}, - .placeholder = (char*[]){"()"}, - .init_seq = NULL, - .reset_seq = NULL, }; #endif diff --git a/sol.c b/sol.c index 5517a20..c597f63 100644 --- a/sol.c +++ b/sol.c @@ -1,4 +1,5 @@ #define _DEFAULT_SOURCE +#include #include #include #include @@ -109,8 +110,9 @@ void sol(void) { case ERR: visbell(); break; case WON: print_table(); - printf ("\033[7mYOU WON!\n"); - //return; //TODO: do something nice + win_anim(); + getchar(); //consume the char left by win_anim() + return; } break; case CMD_QUIT: return; @@ -134,6 +136,26 @@ int check_won(void) { return 1; } +void win_anim(void) { + printf ("\033[?25l"); /* hide cursor */ + for (;;) { + /* set cursor to random location */ + int row = 1+random()%(24-op.s->width); + int col = 1+random()%(80-op.s->height); + + /* draw random card */ + int face = 1 + random() % 52; + for (int l = 0; l < op.s->height; l++) { + printf ("\033[%d;%dH", row+l, col); + printf ("%s", op.s->card[face][l]); + } + fflush (stdout); + + /* exit on keypress */ + struct pollfd p = {STDIN_FILENO, POLLIN}; + if (poll (&p, 1, 80)) return; + } +} // takeable actions {{{ #ifdef KLONDIKE card_t stack_take(void) { /*NOTE: assert(f.w >= 0) */ @@ -489,11 +511,9 @@ void screen_setup (int enable) { printf ("\033[s\033[?47h"); /* save cursor, alternate screen */ printf ("\033[H\033[J"); /* reset cursor, clear screen */ //TODO//printf ("\033[?1000h\033[?25l"); /* enable mouse, hide cursor */ - if (op.s->init_seq) - printf (op.s->init_seq); /*swich charset, if necessary*/ + //printf (op.s->init_seq); /*swich charset, if necessary*/ } else { - if (op.s->reset_seq) - printf (op.s->reset_seq);/*reset charset, if necessary*/ + //printf (op.s->reset_seq);/*reset charset, if necessary*/ //TODO//printf ("\033[?9l\033[?25h"); /* disable mouse, show cursor */ printf ("\033[?47l\033[u"); /* primary screen, restore cursor */ raw_mode(0); diff --git a/sol.h b/sol.h index ef21177..e41f301 100644 --- a/sol.h +++ b/sol.h @@ -75,6 +75,7 @@ void sol(void); int find_top(card_t* pile); void turn_over(card_t* pile); int check_won(void); +void win_anim(void); #ifdef KLONDIKE card_t stack_take(void); int t2f(int from, int to); -- 2.39.3