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 p

⟦c0f3314f2⟧ TextFile

    Length: 1823 (0x71f)
    Types: TextFile
    Names: »play.c«

Derivation

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

TextFile

#include "defs.h"
#include "globs.h"
#include "window.h"

static	taketurn();

playgame()
{
	char k;
	score[0]=score[1]=0;
	resetpegs();
	for (gameover=0; !gameover; ) playhand();
	mvwprintw(Prompt, 0, 0, score[0]>120? "I win.\n": "You win.\n");
	wrefresh(Prompt);
	sleep(2);
	mvwprintw(Prompt, 1, 0, "Another game?\n");
	wmove(Prompt, 1, 41);
	wrefresh(Prompt);
	k = wgetch(Prompt);
	if (k != 'y' && k != 'Y') quitflag = 1;
}

playhand()
{
	int i, j;
	dealer = !dealer;
	deal();
	werase(Pscore);
	werase(Hscore);
	showhand();
	ncrib=0;
	for (i=0; i<2; i++) {
		(*dscfunc[playertype[i]])(hand[i], i==dealer);
	}
	showfour();
	showcut();
	if (RANK(cut)==KNAVE) {
		mvwprintw(Prompt, 1, 0, "Two for His Heels\n");
		wrefresh(Prompt);
		sleep(2);
		SCOREUP(dealer, 2);
		sleep(1);
	}
	whoseturn = dealer;	/* to be reversed */
	handover = 0;
	nleft[0]=nleft[1]=4;
	resetgo();
	for (i=0; i<2; i++) for (j=0; j<4; j++) played[i][j]=0;
	while (!gameover && !handover) taketurn();
	if (gameover) return;
	gamescore();
}

static
taketurn()
{
	whoseturn = !whoseturn;
	switch (playertype[whoseturn]) {
	case HUMAN:
		humanplay();
		break;
	case PROGRAM:
		programplay();
		break;
	}
}

int
goodgo(who)
int who;
{
	int i;
	for (i=0; i<4; i++) if (goodplay(who, i)) return 0;
	return 1;
}

int
goodplay(who, which)
int who, which;
{
	return !played[who][which] &&
	rankvalue[RANK(hand[who][which])] + count <= 31;
}

resetgo() {
	count=gocount=0;
	whosego = -1;
	mvwprintw(Prompt, 0, 0, "0.\n");
	wrefresh(Prompt);
}

/*
 *	Returns nonzero if wins.
 */
scoreup(who, n)
int who, n;
{
	score[who] += n;
	setpegs(who);
	return (score[who] > 120);
}

/*
 *	assumes a<b.
 */

makediscard(hand, a, b)
int a, b;
CARD hand[];
{
	crib[ncrib++] = hand[a];
	crib[ncrib++] = hand[b];
	hand[b]=hand[5];
	hand[a]=hand[4];	/* In this order only. */
}