|
|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T m
Length: 2763 (0xacb)
Types: TextFile
Names: »main.c«
└─⟦b20c6495f⟧ Bits:30007238 EUUGD18: Wien-båndet, efterår 1987
└─⟦this⟧ »EUUGD18/General/Poker/main.c«
/*
** This is a program to handle a multi-user poker game. It uses sockets in
** the AF_INET family, so it can handle several players even on different
** machines. The game is 5-card draw poker.
*/
# include <signal.h>
# include "cards.h"
# include "players.h"
# include "betting.h"
# include "draw.h"
# include "whowon.h"
# include "payoff.h"
# include "showcards.h"
# include "util.h"
# include "tellall.h"
# include "limits.h"
# define TRUE 1
# define FALSE 0
# define ERROR -1
main( argc, argv )
int argc;
char **argv;
{
int i,c,d;
int deck[52]; /* the cards */
int pot; /* size of current pot */
int winner; /* which player won this hand */
int first=0; /* first player to bet, draw, etc. */
# ifdef MASSCOMP
extern void srand();
# else
extern void srandom(); /* starts random number generator */
# endif
extern long time(); /* unique parameter to above */
extern void crash(); /* if broken pipe, release port (I hope) */
extern int strcmp();
extern int getpid(); /* more random stuff */
signal(SIGPIPE,crash);
signal(SIGHUP,crash);
signal(SIGXCPU,SIG_IGN);
# ifdef MASSCOMP
srand((int) time(0) ^ getpid() );
# else
srandom((int) time(0) ^ getpid() );
# endif
player[0].name = strsave( "Computer III" );
player[0].cash = 200;
player[0].sittingout = FALSE;
player[0].wantsout = FALSE;
for(;;)
{
if (n_players < 2)
new_players( player, &n_players, TRUE ); /* wait for someone to play with */
pot = 0;
for( i=0; i<n_players; i++)
{
if ( player[i].sittingout == FALSE )
{
player[i].in = TRUE;
player[i].bet = ANTE; /* ante */
player[i].cash -= ANTE;
pot += ANTE;
}
else
{
player[i].in = FALSE;
player[i].bet = (-1); /* keep tellall() quiet */
}
if ( n_players == 2 )
player[i].lonehands += 1;
}
tellall( player, n_players, "X" ); /* clear all screens */
tellall( player, n_players, "U" ); /* clear all screens */
shuffle( deck );
d = 0; /* next card to draw from deck */
for( c=0; c<5; c++ )
for( i=0; i<n_players; i++ )
if ( player[i].in )
player[i].cards[c] = deck[d++];
/* show cards to each player ... */
show_cards( player, n_players, FALSE, FALSE );
if ( ++first >= n_players )
first = 0;
if ((winner = betting( player, n_players, &pot, first )) < 0)
{
draw( player, n_players, deck, d, first );
if ((winner = betting( player, n_players, &pot, first )) < 0)
winner = whowon( player, n_players, argc > 1 && strcmp( argv[1], "-test" ) == 0 );
else if ( argc > 1 && strcmp( argv[1], "-test" ) == 0 )
whowon( player, n_players, TRUE );
}
else if ( argc > 1 && strcmp( argv[1], "-test" ) == 0 )
whowon( player, n_players, TRUE );
payoff( player, n_players, winner, pot );
leave( player, &n_players );
new_players( player, &n_players, FALSE );
}
}