From 27370d1dc5b5e2a47d2082f04456d37d5412eff1 Mon Sep 17 00:00:00 2001 From: Laurent Mazet Date: Sat, 25 May 2024 22:51:18 +0200 Subject: [PATCH] split code --- battleships.c | 11 ++++---- board.c | 75 ------------------------------------------------- board.h | 2 -- display.c | 78 +++++++++++++++++++++++++++++++++++++++++++++++++++ display.h | 10 +++++++ 5 files changed, 93 insertions(+), 83 deletions(-) create mode 100644 display.c create mode 100644 display.h diff --git a/battleships.c b/battleships.c index 6ac20db..0f4b2cf 100644 --- a/battleships.c +++ b/battleships.c @@ -1,7 +1,7 @@ /* depend: */ /* cflags: */ -/* linker: board.o debug.o -lcurses */ -/* winlnk: board.o debug.o -lpdcurses */ +/* linker: board.o debug.o display.o -lcurses */ +/* winlnk: board.o debug.o display.o -lpdcurses */ #include #include @@ -9,8 +9,7 @@ #include "board.h" #include "debug.h" - -#define KEY_ESC 0x1b +#include "display.h" /* static variables */ char *progname = NULL; @@ -142,8 +141,8 @@ int main (int argc, char *argv[]) putlocation (board, boatlength, x, y, orient, 'S'); boatlength = (random () % 4) + 1; if (!findlocation (board, boatlength, &x, &y, &orient)) { - VERBOSE (ERROR, fprintf (stderr, "can't position for boat %d\n", boatlength)); - exit (1); + VERBOSE (WARNING, fprintf (stderr, "can't position for boat %d\n", boatlength)); + stop = 1; } break; case 'q': diff --git a/board.c b/board.c index aef8af5..0c9c0d3 100644 --- a/board.c +++ b/board.c @@ -1,4 +1,3 @@ -#include #include #include @@ -14,80 +13,6 @@ board_t *initboard (int xsize, int ysize) return board; } -typedef enum { - white = 1, - red, green, blue, - cyan, magenta, yellow, - black -} color_t; - -void setcolor (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 (cyan, COLOR_BLACK, COLOR_CYAN); - init_pair (magenta, COLOR_BLACK, COLOR_MAGENTA); - init_pair (yellow, COLOR_BLACK, COLOR_YELLOW); - init_pair (black, COLOR_BLACK, COLOR_WHITE); - init = 0; - } - - attrset (COLOR_PAIR (color)); -} - -void displayboard (board_t *board, int xoffset, int yoffset, int mode) -{ - int x, y; - - for (x = -1; x <= board->xsize; x++) { - for (y = -1; y <= board->ysize; y++) { - int c = ' '; - if ((x == -1) && (y == -1)) { - c = ACS_ULCORNER; - setcolor (black); - } else if ((x == -1) && (y == board->ysize)) { - c = ACS_LLCORNER; - setcolor (black); - } else if ((x == board->xsize) && (y == board->ysize)) { - c = ACS_LRCORNER; - setcolor (black); - } else if ((x == board->xsize) && (y == -1)) { - c = ACS_URCORNER; - setcolor (black); - } else if ((x == -1) || (x == board->xsize)) { - c = ACS_VLINE; - setcolor (black); - } else if ((y == -1) || (y == board->ysize)) { - c = ACS_HLINE; - setcolor (black); - } else { - c = board->tab[x + y * board->xsize]; - switch (c) { - case 'O': - setcolor (blue); - break; - case 'X': - setcolor (red); - break; - case 'S': - setcolor (yellow); - break; - } - if (!mode) { - c = ' '; - } - } - - mvaddch (yoffset + y, xoffset + x, c); - setcolor (white); - } - } -} - int testlocation (board_t *board, int length, int x, int y, int orient) { if ((x < 0) || (x + orient * (length - 1) == board->xsize) || diff --git a/board.h b/board.h index 5ba3ebc..40c29d6 100644 --- a/board.h +++ b/board.h @@ -9,8 +9,6 @@ typedef struct { board_t *initboard (int xsize, int ysize); -void displayboard (board_t *board, int xoffset, int yoffset, int mode); - int testlocation (board_t *board, int length, int x, int y, int orient); int findlocation (board_t *board, int length, int *x, int *y, int *orient); diff --git a/display.c b/display.c new file mode 100644 index 0000000..b4f48f5 --- /dev/null +++ b/display.c @@ -0,0 +1,78 @@ +#include +#include "board.h" + +#include "display.h" + +typedef enum { + white = 1, + red, green, blue, + cyan, magenta, yellow, + black +} color_t; + +void setcolor (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 (cyan, COLOR_BLACK, COLOR_CYAN); + init_pair (magenta, COLOR_BLACK, COLOR_MAGENTA); + init_pair (yellow, COLOR_BLACK, COLOR_YELLOW); + init_pair (black, COLOR_BLACK, COLOR_WHITE); + init = 0; + } + + attrset (COLOR_PAIR (color)); +} + +void displayboard (board_t *board, int xoffset, int yoffset, int mode) +{ + int x, y; + + for (x = -1; x <= board->xsize; x++) { + for (y = -1; y <= board->ysize; y++) { + int c = ' '; + if ((x == -1) && (y == -1)) { + c = ACS_ULCORNER; + setcolor (black); + } else if ((x == -1) && (y == board->ysize)) { + c = ACS_LLCORNER; + setcolor (black); + } else if ((x == board->xsize) && (y == board->ysize)) { + c = ACS_LRCORNER; + setcolor (black); + } else if ((x == board->xsize) && (y == -1)) { + c = ACS_URCORNER; + setcolor (black); + } else if ((x == -1) || (x == board->xsize)) { + c = ACS_VLINE; + setcolor (black); + } else if ((y == -1) || (y == board->ysize)) { + c = ACS_HLINE; + setcolor (black); + } else { + c = board->tab[x + y * board->xsize]; + switch (c) { + case 'O': + setcolor (blue); + break; + case 'X': + setcolor (red); + break; + case 'S': + setcolor (yellow); + break; + } + if (!mode) { + c = ' '; + } + } + + mvaddch (yoffset + y, xoffset + x, c); + setcolor (white); + } + } +} diff --git a/display.h b/display.h new file mode 100644 index 0000000..9c95a43 --- /dev/null +++ b/display.h @@ -0,0 +1,10 @@ +#ifndef __DISPLAY_H__ +#define __DISPLAY_H__ + +#include "board.h" + +#define KEY_ESC 0x1b + +void displayboard (board_t *board, int xoffset, int yoffset, int mode); + +#endif /* __DISPLAY_H__ */ -- 2.30.2