From 8fde204fac62acfe914e5dce82989bc324fad297 Mon Sep 17 00:00:00 2001 From: Laurent MAZET Date: Tue, 28 May 2024 16:09:13 +0200 Subject: [PATCH] split code --- board.c | 98 +-------------------------------- board.h | 16 ++---- constant.h | 27 +--------- display.c | 155 +++++++++++++++++++++++++++++++++++++++++++++++++++++ display.h | 18 +++++++ scrabble.c | 34 ++++-------- type.h | 37 +++++++++++++ 7 files changed, 226 insertions(+), 159 deletions(-) create mode 100644 display.c create mode 100644 display.h create mode 100644 type.h diff --git a/board.c b/board.c index af307de..bbd7c84 100644 --- a/board.c +++ b/board.c @@ -3,6 +3,7 @@ #include #include "debug.h" +#include "type.h" #include "board.h" @@ -17,36 +18,6 @@ int contains (char *list, char *str) return 0; } -typedef enum { - white = 1, - red, - green, - blue, - cyan, - magenta, - yellow, - black, -} color_t; - -void set_color (color_t color) -{ - static int init = 1; - - if (init) { - init_pair (white, COLOR_WHITE, COLOR_BLACK); - init_pair (red, COLOR_BLACK, COLOR_RED); - init_pair (green, COLOR_BLACK, COLOR_GREEN); - init_pair (blue, COLOR_BLACK, COLOR_BLUE); - init_pair (magenta, COLOR_BLACK, COLOR_MAGENTA); - init_pair (yellow, COLOR_BLACK, COLOR_YELLOW); - init_pair (cyan, COLOR_BLACK, COLOR_CYAN); - init_pair (black, COLOR_BLACK, COLOR_WHITE); - init = 0; - } - - attrset (COLOR_PAIR(color)); -} - play_t *initplay (int xsize, int ysize) { play_t *play = (play_t *) malloc (sizeof (play_t)); @@ -66,71 +37,4 @@ int putletter (play_t *play, char letter, int x, int y) return ret; } -void showletter (char letter, int x, int y) -{ - set_color (black); - mvaddch(y, x, letter); - set_color (white); -} - -void showboard (play_t *play, board_t *board, int xoffset, int yoffset, int full) -{ - int x, y; - for (x = -1; x <= board->xsize; x++) { - for (y = -1; y <= board->ysize; y++) { - int c = ' '; - char pos[4] = {0}; - sprintf (pos, "%c%d", 'A' + x, 1 + y); - if ((x == -1) && (y == -1)) { - c = ACS_ULCORNER; - set_color (black); - } else if ((x == board->xsize) && (y== -1)) { - c = ACS_URCORNER; - set_color (black); - } else if ((x == -1) && (y == board->ysize)) { - c = ACS_LLCORNER; - set_color (black); - } else if ((x == board->xsize) && (y == board->ysize)) { - c = ACS_LRCORNER; - set_color (black); - } else if ((x == -1) || (x == board->xsize)) { - c = ACS_VLINE; - set_color (black); - } else if ((y == -1) || (y == board->xsize)) { - c = ACS_HLINE; - set_color (black); - } else { - c = play->tab[x + y * board->xsize]; - if (c == ' ') { - if (contains (board->TW, pos)) { - c = 'T'; - set_color (red); - } else if (contains (board->DW, pos)) { - c = 'D'; - set_color (magenta); - } else if (contains (board->TL, pos)) { - c = 't'; - set_color (blue); - } else if (contains (board->DL, pos)) { - c = 'd'; - set_color (cyan); - } else if (contains (board->CS, pos)) { - c = 'S'; - set_color (magenta); - } - if (!full) { - c = ' '; - } - } - } - VERBOSE (DEBUG, if ((c < 32) || (c > 255)) printf ("character: %c\n", c)); - if (c) { - mvaddch(yoffset + y, xoffset + x, c); - } - set_color (white); - - } - } -} - /* vim: set ts=4 sw=4 et: */ diff --git a/board.h b/board.h index 4f60f99..d665ab2 100644 --- a/board.h +++ b/board.h @@ -1,24 +1,14 @@ #ifndef __BOARD_H__ #define __BOARD_H__ -#include "constant.h" +#include "type.h" -typedef struct { - int xsize; - int ysize; - char *tab; -} play_t; +int contains (char *list, char *str); -char *initboard (int xsize, int ysize); - -play_t *initplay (); +play_t *initplay (int xsize, int ysize); int putletter (play_t *play, char letter, int x, int y); -void showletter (char letter, int x, int y); - -void showboard (play_t *play, board_t *board, int xoffset, int yoffset, int full); - #endif /* __BOARD_H__ */ /* vim: set ts=4 sw=4 et: */ diff --git a/constant.h b/constant.h index 3a202f9..5cb82ff 100644 --- a/constant.h +++ b/constant.h @@ -1,32 +1,7 @@ #ifndef __CONSTANT_H__ #define __CONSTANT_H__ -#include "board.h" - -typedef struct { - int xsize; - int ysize; - float factor; - int length; - int premium; - char *TW; - char *DW; - char *TL; - char *DL; - char *CS; -} board_t; - -typedef struct { - char letter; - int value; -} lettervalue_t; - -typedef struct { - int nbletters; - int nbtiles; - char *tiles; - lettervalue_t *lettervalues; -} bag_t; +#include "type.h" board_t *getboard (char *name); diff --git a/display.c b/display.c new file mode 100644 index 0000000..53a4f22 --- /dev/null +++ b/display.c @@ -0,0 +1,155 @@ +#include +#include + +#include "board.h" +#include "debug.h" + +#include "display.h" + +typedef enum { + white = 1, + red, + green, + blue, + cyan, + magenta, + yellow, + black, +} color_t; + +void set_color (color_t color) +{ + static int init = 1; + + if (init) { + init_pair (white, COLOR_WHITE, COLOR_BLACK); + init_pair (red, COLOR_BLACK, COLOR_RED); + init_pair (green, COLOR_BLACK, COLOR_GREEN); + init_pair (blue, COLOR_BLACK, COLOR_BLUE); + init_pair (magenta, COLOR_BLACK, COLOR_MAGENTA); + init_pair (yellow, COLOR_BLACK, COLOR_YELLOW); + init_pair (cyan, COLOR_BLACK, COLOR_CYAN); + init_pair (black, COLOR_BLACK, COLOR_WHITE); + init = 0; + } + + attrset (COLOR_PAIR(color)); +} + +void showletter (char letter, int x, int y) +{ + set_color (black); + mvaddch(y, x, letter); + set_color (white); +} + +void showboard (play_t *play, board_t *board, int xoffset, int yoffset, int full) +{ + int x, y; + for (x = -1; x <= board->xsize; x++) { + for (y = -1; y <= board->ysize; y++) { + int c = ' '; + char pos[4] = {0}; + sprintf (pos, "%c%d", 'A' + x, 1 + y); + if ((x == -1) && (y == -1)) { + c = ACS_ULCORNER; + set_color (black); + } else if ((x == board->xsize) && (y== -1)) { + c = ACS_URCORNER; + set_color (black); + } else if ((x == -1) && (y == board->ysize)) { + c = ACS_LLCORNER; + set_color (black); + } else if ((x == board->xsize) && (y == board->ysize)) { + c = ACS_LRCORNER; + set_color (black); + } else if ((x == -1) || (x == board->xsize)) { + c = ACS_VLINE; + set_color (black); + } else if ((y == -1) || (y == board->xsize)) { + c = ACS_HLINE; + set_color (black); + } else { + c = play->tab[x + y * board->xsize]; + if (c == ' ') { + if (contains (board->TW, pos)) { + c = 'T'; + set_color (red); + } else if (contains (board->DW, pos)) { + c = 'D'; + set_color (magenta); + } else if (contains (board->TL, pos)) { + c = 't'; + set_color (blue); + } else if (contains (board->DL, pos)) { + c = 'd'; + set_color (cyan); + } else if (contains (board->CS, pos)) { + c = 'S'; + set_color (magenta); + } + if (!full) { + c = ' '; + } + } + } + VERBOSE (DEBUG, if ((c < 32) || (c > 255)) printf ("character: %c\n", c)); + if (c) { + mvaddch(yoffset + y, xoffset + x, c); + } + set_color (white); + + } + } +} + +void helpwindow (char *msg, int xoffset, int yoffset, int length) +{ + char *title = "Help message"; + int i; + + for (i = 0; (i < length) && (title[i] != '\0'); i++) { + mvaddch (yoffset , xoffset + i, title[i]); + mvaddch (yoffset + 1, xoffset + i, ACS_HLINE); + } + + i = 0; + int j = 2; + while (*msg != '\0') { + if ((*msg == '\n') || (i == length)) { + i = 0; + j++; + } + if (*msg != '\n') { + mvaddch (yoffset + j, xoffset + i, *msg); + i++; + } + msg++; + } +} + +void valuewindow (bag_t *bag, int xoffset, int yoffset, int length) +{ + char *title = "Tile values"; + int i; + int n = length / 5; + + for (i = 0; (i < length) && (title[i] != '\0'); i++) { + mvaddch (yoffset, xoffset + i, title[i]); + mvaddch (yoffset + 1, xoffset + i, ACS_HLINE); + } + + int N = (bag->nbletters + n - 1) / n; + for (i = 0; i < bag->nbletters; i++) { + int x = xoffset + (i % 2) + 5 * (i / N); + int y = yoffset + 2 + (i % N); + set_color (black); + mvaddch (y, x, (bag->lettervalues + i)->letter); + set_color (white); + char msg[3]; + sprintf (msg, "%d", (bag->lettervalues + i)->value); + mvaddstr (y, x + 2 + ((i + 1) % 2), msg); + } +} + +/* vim: set ts=4 sw=4 et: */ diff --git a/display.h b/display.h new file mode 100644 index 0000000..26efc10 --- /dev/null +++ b/display.h @@ -0,0 +1,18 @@ +#ifndef __DISPLAY_H__ +#define __DISPLAY_H__ + +#include "type.h" + +int putletter (play_t *play, char letter, int x, int y); + +void showletter (char letter, int x, int y); + +void showboard (play_t *play, board_t *board, int xoffset, int yoffset, int full); + +void helpwindow (char *msg, int xoffset, int yoffset, int length); + +void valuewindow (bag_t *bag, int xoffset, int yoffset, int length); + +#endif /* __DISPLAY_H__ */ + +/* vim: set ts=4 sw=4 et: */ diff --git a/scrabble.c b/scrabble.c index 8221e58..633cdf1 100644 --- a/scrabble.c +++ b/scrabble.c @@ -1,8 +1,8 @@ /* depend: */ /* cflags: */ -/* linker: board.o constant.o debug.o -lcurses */ -/* winlnk: board.o constant.o debug.o -lpdcurses */ -/* winxxlnk: board.o constant.o debug.o -lncurses */ +/* linker: board.o constant.o display.o debug.o -lcurses */ +/* winlnk: board.o constant.o display.o debug.o -lpdcurses */ +/* winxxlnk: board.o constant.o display.o debug.o -lncurses */ #include #include @@ -10,6 +10,7 @@ #include "board.h" #include "constant.h" +#include "display.h" #include "debug.h" #define KEY_ESC 0x1b @@ -21,6 +22,11 @@ char *version = "0.1"; char *boardname = "15x15-7"; char *language = "fr"; +int xoffset = 4; +int yoffset = 3; + +char *help = " Draw tile\n, , , Move tile\n

Put tile Quit\n Toggle case legend\n"; + int usage (int ret) { FILE *fd = ret ? stderr : stdout; @@ -34,23 +40,6 @@ int usage (int ret) return ret; } -void help_window (int xoffset, int yoffset, int length) -{ - char *message = "Help message\n------------\n Quit\n Toggle case legend\n"; - int l = 0, n = 0; - while (*message != '\0') { - if ((*message == '\n') || (l == length)) { - l = 0; - n++; - } - if (*message != '\n') { - mvaddch (yoffset + n, xoffset + l, *message); - l++; - } - message++; - } -} - /* main function */ int main (int argc, char *argv[]) { @@ -130,11 +119,10 @@ int main (int argc, char *argv[]) start_color (); - help_window (50, 1, 30); + valuewindow (bag, 2 * xoffset + board->xsize, yoffset - 1, 10); + helpwindow (help, 3 * xoffset + board->xsize + 10, yoffset - 1, 30); int mode = 0; - int xoffset = 3; - int yoffset = 3; showboard (play, board, xoffset, yoffset, mode); int x = (play->xsize + 1)/ 2 - 1; diff --git a/type.h b/type.h new file mode 100644 index 0000000..a12df41 --- /dev/null +++ b/type.h @@ -0,0 +1,37 @@ +#ifndef __TYPE_H__ +#define __TYPE_H__ + +typedef struct { + int xsize; + int ysize; + float factor; + int length; + int premium; + char *TW; + char *DW; + char *TL; + char *DL; + char *CS; +} board_t; + +typedef struct { + char letter; + int value; +} lettervalue_t; + +typedef struct { + int nbletters; + int nbtiles; + char *tiles; + lettervalue_t *lettervalues; +} bag_t; + +typedef struct { + int xsize; + int ysize; + char *tab; +} play_t; + +#endif /* __TYPE_H__ */ + +/* vim: set ts=4 sw=4 et: */ -- 2.30.2