#include "display.h" void display_draw_card(WINDOW *w, const uint32_t row, const uint32_t col, const card c) { mvwaddch(w, row, col, ACS_ULCORNER); // Upper left corner mvwhline(w, row, col+1, ACS_HLINE, 5); // Upper horizontal line mvwaddch(w, row, col+6, ACS_URCORNER); // Upper right corner mvwvline(w, row+1, col, ACS_VLINE, 3); // Left vertical line mvwvline(w, row+1, col+6, ACS_VLINE, 3); // Right vertical line mvwaddch(w, row+4, col, ACS_LLCORNER); // Lower left corner mvwhline(w, row+4, col+1, ACS_HLINE, 5); // Lower horizontal line mvwaddch(w, row+4, col+6, ACS_LRCORNER); // Lower right corner mvwprintw(w, row+1, col+1, " %3d ", c); // Card number, 3 digits wide, filled with spaces, if number has fewer digits // Clear the rest of the card first mvwprintw(w, row+2, col+1, " "); mvwprintw(w, row+3, col+1, " "); switch (card_get_points(c)) { case 7: // "** **" // " *** " mvwhline(w, row+2, col+1, ACS_DIAMOND, 2); mvwhline(w, row+2, col+4, ACS_DIAMOND, 2); mvwhline(w, row+3, col+2, ACS_DIAMOND, 3); break; case 5: // "* * *" // " * * " mvwaddch(w, row+2, col+1, ACS_DIAMOND); mvwaddch(w, row+2, col+3, ACS_DIAMOND); mvwaddch(w, row+2, col+5, ACS_DIAMOND); mvwaddch(w, row+3, col+2, ACS_DIAMOND); mvwaddch(w, row+3, col+4, ACS_DIAMOND); break; case 3: // " * * " // " * " mvwaddch(w, row+2, col+2, ACS_DIAMOND); mvwaddch(w, row+2, col+4, ACS_DIAMOND); mvwaddch(w, row+3, col+3, ACS_DIAMOND); break; case 2: // " * * " // " " mvwaddch(w, row+2, col+2, ACS_DIAMOND); mvwaddch(w, row+2, col+4, ACS_DIAMOND); break; default: // " * " // " " mvwaddch(w, row+2, col+3, ACS_DIAMOND); } } void display_init(void) { initscr(); // Start curses mode raw(); // Line buffering disabled keypad(stdscr, true); // We get F1, F2 etc.. nodelay(stdscr, true); // Non-blocking input noecho(); // Don't echo() while we do getch curs_set(0); // Make the cursor invisible clear(); refresh(); for (int i = 45; i < 70; i++) { display_draw_card(stdscr, 0, 0, i+1); usleep(500000); refresh(); } } void display_fini(void) { endwin(); // End curses mode }