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 m

⟦322798b48⟧ TextFile

    Length: 2658 (0xa62)
    Types: TextFile
    Names: »movecycle.c«

Derivation

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

TextFile

/* movecycle.c */

#include "externs.h"

movecycle ()
{
	int from, to, color, pawntries, l;
	static int pawnattempts = 0;
	LIST check (), checkdirs;

	color = WHITE;
	while (TRUE) {
		wclear (win [CLOCK]);
		wclear (win [PROMPT]);
		wprintw (win [TOMOVE], "%s to move\r", colorname [color]);
		pawntries = countpawntries (color);
		if (option [ANNOUNCEPAWNS] && pawntries && pawnattempts < 3)
			if (pawntries == 1)
				wprintw (win [PAWNTRIES], "1 pawntry");
			else
				wprintw (win [PAWNTRIES], "%d pawntries",
					 pawntries);
		checkdirs = check (color);
		reportchecks (checkdirs, kingloc [color]);
		if (mate (pawnattempts, color)) {
			wclear (win [CHECK]);
			if (checkdirs != NIL)
				waddstr (win [CHECK], "CHECKMATE !");
			else
				waddstr (win [CHECK], "STALEMATE");
			break;
		}
		if (insufficient () || (drawok [WHITE] && drawok [BLACK])) {
			wclear (win [CHECK]);
			waddstr (win [CHECK], "DRAW");
			break;
		}
		if (resign) {
			wclear (win [CHECK]);
			waddstr (win [CHECK], "RESIGNS");
			break;
		}
		if (dead) {
			wclear (win [CHECK]);
			waddstr (win [CHECK], "DEAD");
			wclear (win [MESSAGE]);
			waddstr (win[MESSAGE], "lost your\nopponent\n(sorry)");
		}
		entermove (&from, &to, color, pawntries);
		while ((l = legalmove (pawntries, &pawnattempts, checkdirs,
				       from, to, color)) != TRUE
		&& !drawok [color] && !drawok [1 - color]
		&& !resign && !dead) {
			illegal (l, color);
			entermove (&from, &to, color, pawntries);
		}
		wclear (win [CAPTURE]);
		wclear (win [PAWNTRIES]);
		wclear (win [CHECK]);
		wclear (win [MESSAGE]);
		if (!drawok [1 - color] && !drawok [color]
		&& !resign && !dead) {
			pawnattempts = 0;
			if (occupant [from] == KING && to == from + 2)
				makemove (from + 3, from + 1, color);
			if (occupant [from] == KING && to == from - 2)
				makemove (from - 4, from - 1, color);
			makemove (from, to, color);
			lastmovefrom = from;
			lastmoveto = to;
		}
		if (drawok [1 - color] && !drawok [color])
			drawok [color] = FALSE;
		color = 1 - color;
	}
	wclear (win [TOMOVE]);
	wclear (win [CLOCK]);
	wclear (win [CAPTURE]);
	wclear (win [PAWNTRIES]);
	while (TRUE) {
		waddstr (win [PROMPT], "\rreview game?");
		wclear (win [MESSAGE]);
		waddstr (win [MESSAGE], "type y or n");
		wclear (win [INPUT]);
		waddstr (win [INPUT], ": ");
		move (win [INPUT]->_cury + win [INPUT]->_begy,
		      win [INPUT]->_curx + win [INPUT]->_begx);
		refresh ();
		wclear (win [CHECK]);
		switch (getchar ()) {
		case 'y':
		case 'Y':
			wclear (win [PROMPT]);
			wclear (win [MESSAGE]);
			review();
			break;
		case 'n':
		case 'N':
			error ((char *) NULL);
		default:
			printf ("\007");
		}
	}
}