DataMuseum.dk

Presents historical artifacts from the history of:

DKUUG/EUUG Conference tapes

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about DKUUG/EUUG Conference tapes

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - metrics - download
Index: T b

⟦e68490475⟧ TextFile

    Length: 2872 (0xb38)
    Types: TextFile
    Names: »board.c«

Derivation

└─⟦b20c6495f⟧ Bits:30007238 EUUGD18: Wien-båndet, efterår 1987
    └─⟦this⟧ »EUUGD18/General/Dots/board.c« 

TextFile

/*    board.c    routines that deal with the playing board's display or data */

#include "dots.h"

setup()
{
    Length = Width = 0;
    comptally = persontally = 0;
    xposit = 2, yposit = 1;

    mvprintw(LINES - 6, 0, "Enter LENGTH of board (%d - %d).",
	 (level == DUMB)? MINL : H_MINL, MAXL);
    do  {
	mvaddstr(LINES - 4, 0, "->> "), clrtoeol(), refresh();
	x_start = COLS / 2 - (Length = get_dimensions()) * 2;
    } while (Length > MAXL || (level == DUMB && Length < MINL) ||
	(level != DUMB && Length < H_MINL));

    mvprintw(LINES - 6, 0, "Enter WIDTH of board (%d - %d).",
	(level==DUMB)? MINW:H_MINW, MAXW), clrtoeol();
    do  {
	mvaddstr(LINES - 4, 0, "->> "), clrtoeol(), refresh();
	y_start = LINES / 2 - (Width = get_dimensions());
    } while (Width > MAXW || (level == DUMB && Width < MINW) ||
	(level != DUMB && Width < H_MINW));

    mvprintw(LINES - 6, 0, "Length is %d, width is %d.", Length, Width);
    clrtoeol(), refresh();
    if (mode == INTERACTIVE)
	mvprintw(LINES-4, 0,
	    "Your boxes will be initialed with \"%c\"",Initial[US]), clrtoeol();
    msg("Hit any key to continue. ");
    getchar();
}

free_board()
{
    register int x, y;

    for (x = 0; x <= Length * 2; ++x)
	for (y = 0; y <= Width * 2; ++y)
	    board[x][y] = FREE;
    no_good_moves = control_already_established = 0;
}

get_dimensions()
{
    char  	    string[10];
    register char   c;
    register int    place_on_line = 0, x = 0;

    string[0] = '\0';

    move(LINES - 4, 4), clrtoeol();
    refresh();
    while ((c = getchar()) != '\n') {
	if (c == erase_char || c == '\027')
	    if (place_on_line != 0) {
		string[--x] = '\0';
		--place_on_line;
		addstr("\b \b"); 
		refresh();
	    } else
		continue;
	else if (isdigit(c)) {
	    if (place_on_line == 4)
		continue;
	    place_on_line++;
	    addch(string[x++] = c);
	    refresh();
	}
    }
    string[x] = '\0';
    return atoi(string);
}

drawboard()
{
    register int x, y;

    clear();
    for (y = 1; y < 2 * Width; y++)
	for (x = 1; x < 2 * Length; x++) {
	    move(y_start + (y - 1), x_start + (2 * x - 2));
	    if (iseven(x) && isodd(y) && board[x][y] == USED)
		addstr("\b---\b\b");
	    if (iseven(y) && isodd(x) && board[x][y] == USED)
		addch('|');
	    else if (iseven(x) && iseven(y) && closure(GOOD, x, y) == 4) {
		if (board[x][y] == 1)
		    mover = 1;
		else
		    mover = 0;
		putinitial(x, y);
	    } else if (isodd(x) && isodd(y))
		addch('*');
	}
    if (mode == TWOPLAYER) {
	mvaddstr(LINES - 3, 0, "Your Messages: ");
	mvprintw(LINES - 2, 0, "%s's Messages: ", opponent);
    }
}

chlevel(c)
{
    if (!sure(c))
	return;
    level = (level + 1) % 3;
    bottom_line();
}

sure(c)
char c;
{
    register int   count;
    register char  C;

    for (count = 0; count <= 3; ++count)
	if ((C = getchar()) != c) {
	    ungetc(C, stdin);
	    return FALSE;
	}
    return TRUE;
}