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 c

⟦a105d0687⟧ TextFile

    Length: 6064 (0x17b0)
    Types: TextFile
    Names: »card.c«

Derivation

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

TextFile

/* card.c */
/* transportable    */

/**********************************************************************/
/*                                                                    */
/*           MM   MM  IIIIIII  L        L        EEEEEEE              */
/*           M M M M     I     L        L        E                    */
/*           M  M  M     I     L        L        EEEE                 */
/*           M     M     I     L        L        E                    */
/*           M     M  IIIIIII  LLLLLLL  LLLLLLL  EEEEEEE              */
/*                                                                    */
/*      BBBBBB    OOOOO   RRRRRR   NN    N  EEEEEEE   SSSSSS          */
/*      B     B  O     O  R     R  N N   N  E        S                */
/*      BBBBBB   O     O  RRRRRR   N  N  N  EEEEE     SSSSS           */
/*      B     B  O     O  R    R   N   N N  E              S          */
/*      BBBBBB    OOOOO   R     R  N    NN  EEEEEEE  SSSSSS           */
/*                                                                    */
/*                                                                    */
/* Creation: Edmond Dujardin                                          */
/*           (c) 1962 Parker Brothers, Inc.                           */
/*                                                                    */
/* Written by: Brett K. Carver                                        */
/*             Hewlett-Packard, 1983.                                 */
/*                                                                    */
/* Copyright: (c) Brett K. Carver, Hewlett-Packard, 1986.             */
/*                                                                    */
/**********************************************************************/

#include "miles.h"

/**********************************/
/* external procedure definitions */
/**********************************/

extern rand();

/*********************************/
/* external variable definitions */
/*********************************/

extern int deck[20];            /* shufled deck of cards */
extern int hand[2][15];         /* current status of players */

/**********************************************************************/
/*                                                                    */
/*              CARD DECK HANDLING UTILITIES                          */
/*                                                                    */
/**********************************************************************/

/*********************************************************/
/* initilaizes a card_set structure with the card counts */
/*********************************************************/
initialize_card_set (cards)
int cards[20];
{
cards[0]              = 101;    /* total cards */
cards[extra_tank]     = 1;      /* safeties */
cards[puncture_proof] = 1;
cards[driving_ace]    = 1;
cards[right_of_way]   = 1;
cards[gasoline]       = 6;      /* remedies */
cards[spare_tire]     = 6;
cards[repairs]        = 6;
cards[end_of_limit]   = 6;
cards[roll]           = 14;
cards[out_of_gas]     = 2;      /* hazards */
cards[flat_tire]      = 2;
cards[accident]       = 2;
cards[speed_limit]    = 3;
cards[stop]           = 4;
cards[miles_200]      = 4;      /* distance */
cards[miles_100]      = 12;
cards[miles_75]       = 10;
cards[miles_50]       = 10;
cards[miles_25]       = 10;
}

/********************************************/
/* removes a card from the deck and returns */
/* card if it could, 0 if it couldn't       */
/********************************************/
remove_card (cards,card)
int cards[20];
int card;
{
if (cards[card] > 0) {          /* any more cards */
    cards[card]--;              /* decrement card count */
    cards[0]--;                 /* decrement total card count */
    return(card);
    }
else
    return(0);
}

/*********************************************/
/* given a random number, return a card type */
/*********************************************/
get_card (number)
int number;
{
number = number % 101;          /* 0 - 101 */
if (number >= 28 && number <= 41)
    return(roll);
if (number >= 59 && number <= 70)
    return(miles_100);
if (number >= 71 && number <= 80)
    return(miles_75);
if (number >= 81 && number <= 90)
    return(miles_50);
if (number >= 91 && number <= 100)
    return(miles_25);
if (number >= 4 && number <= 9)
    return(gasoline);
if (number >= 10 && number <= 15)
    return(spare_tire);
if (number >= 16 && number <= 21)
    return(repairs);
if (number >= 22 && number <= 27)
    return(end_of_limit);
if (number >= 51 && number <= 54)
    return(stop);
if (number >= 55 && number <= 58)
    return(miles_200);
if (number >= 48 && number <= 50)
    return(speed_limit);
if (number >= 42 && number <= 43)
    return(out_of_gas);
if (number >= 44 && number <= 45)
    return(flat_tire);
if (number >= 46 && number <= 47)
    return(accident);
if (number == 0)
    return(extra_tank);
if (number == 1)
    return(puncture_proof);
if (number == 2)
    return(driving_ace);
if (number == 3)
    return(right_of_way);
while (TRUE) ;                  /* error case */
}

/********************************************/
/* deals a card, if no cards left, return 0 */
/* 1. gets a random number                  */
/* 2. gets the card                         */
/* 3. removes the card from the deck        */
/* 4. if successful, return card            */
/********************************************/
deal_card ()
{
int card;
int more_cards;
int i;
more_cards = FALSE;
for (i=0; i<20; i++)
    if (deck[i] > 0)
         more_cards = TRUE;
if (more_cards)
    while ((card = remove_card(&deck[0],get_card(rand()))) == 0)
         ;
else
    card = 0;
return(card);
}

/*******************************************/
/* checks to see if who has any cards left */
/*******************************************/
any_cards_left(who)
int who;
{
int i;
for (i=0; i<7; i++)
    if (hand[who][i] > 0)
         return(TRUE);
return(FALSE);
}

/*********** end of program **********/