/* 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 <curses.h>
#include <stdio.h>
#include "board.h"
#include "debug.h"
-
-#define KEY_ESC 0x1b
+#include "display.h"
/* static variables */
char *progname = NULL;
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':
-#include <curses.h>
#include <stdlib.h>
#include <string.h>
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) ||
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);
--- /dev/null
+#include <curses.h>
+#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);
+ }
+ }
+}
--- /dev/null
+#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__ */