Reintroduced color support for ncurses version

master
Tiehuis 9 years ago
parent d8cef1def4
commit 5d6c3f92be
  1. 3
      .gitignore
  2. 2
      man/2048.1
  3. 27
      src/gfx_curses.c
  4. 1
      src/main.c

3
.gitignore vendored

@ -1,2 +1,3 @@
/2048*
2048*
*.o
*.core

@ -51,7 +51,7 @@ Set the rate at which blocks are spawned. Default is 1.
Set the target end condition. Default is 2048.
.SH AUTHORS
Originally written by Tiehuis.
Originally written by Marc Tiehuis.
All contributions can be found at \fIhttps://github.com/Tiehuis/2048-cli\fR.
.SH COPYRIGHT

@ -8,6 +8,8 @@
#define GFX_EXTRA_RIGHT case KEY_RIGHT:
#define GFX_EXTRA_LEFT case KEY_LEFT:
#define NUMBER_OF_COLORS 7
#define iterate(n, expression)\
do {\
int i;\
@ -32,9 +34,32 @@ struct gfx_state* gfx_init(struct gamestate *g)
s->window_width = g->opts->grid_width * (g->print_width + 2) + 1;
s->window = newwin(s->window_height, s->window_width, 1, 1);
keypad(s->window, TRUE);
if (g->opts->enable_color && has_colors()) {
start_color();
int x = 0;
init_pair(x++, 1, 0);
init_pair(x++, 2, 0);
init_pair(x++, 3, 0);
init_pair(x++, 4, 0);
init_pair(x++, 5, 0);
init_pair(x++, 6, 0);
init_pair(x++, 7, 0);
char dummy[x == NUMBER_OF_COLORS ? 1 : -1];
}
return s;
}
static int int_log2(int n)
{
int k = 0;
while (n)
++k, n /= 2;
return k;
}
void gfx_draw(struct gfx_state *s, struct gamestate *g)
{
if (g->score_last)
@ -54,7 +79,9 @@ void gfx_draw(struct gfx_state *s, struct gamestate *g)
for (x = 0; x < g->opts->grid_width; ++x) {
if (g->grid[x][y]) {
wattron(s->window, COLOR_PAIR(int_log2(g->grid[x][y]) % NUMBER_OF_COLORS));
mvwprintw(s->window, ypos, xpos, "%*d", g->print_width, g->grid[x][y]);
wattroff(s->window, COLOR_PAIR(int_log2(g->grid[x][y]) % NUMBER_OF_COLORS));
mvwprintw(s->window, ypos, xpos + g->print_width, " |");
}
else {

@ -47,6 +47,7 @@ get_new_key:;
/* Game will only end if 0 moves available */
if (game_running) {
/* Maybe change this behaviour so if we don't move, we still generate a block */
if (gamestate_tick(s, g, direction, g->opts->animate ? draw_then_sleep : NULL))
gamestate_new_block(g);

Loading…
Cancel
Save