|
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 p
Length: 7959 (0x1f17) Types: TextFile Names: »p_decide.c«
└─⟦b20c6495f⟧ Bits:30007238 EUUGD18: Wien-båndet, efterår 1987 └─⟦this⟧ »EUUGD18/General/Poker2/p_decide.c«
#include "poker.h" long rand(); static int percent[18] = {92,92,92,100,70,67,80,90,88,97, 50,85,85,50,85,90,85,70}; /* Percent is an array of percentages, used in the decision making */ /* routine */ int decision_A(first_deal) { /* decide between hi pair or 4 flush */ /* with a 70:30 bias to a pair */ if(!first_deal) return 11; else return ((rand()%100 < 30) ? 10:11); }/* decision A */ int decision_B() { /* decide between using 3 card straight flush or 3 high cards */ /* with a bias of 60:40 for 3 high cards */ return ((rand()%100 < 40) ? 7:6); }/* decision B */ int decision_C() { /* decide whether to use 2 high cards or 3 card flush */ /* there is a bias of 70:30 for 2 high cards */ return ((rand()%100 < 30) ? 3:4); }/* decision C */ int decision_D() { /* decide between 3 card run and 1 high card */ /* there is a bias of 70:30 for 1 high cards */ return ((rand()%100 < 30) ? 2:1); }/* decision D */ int stay (Hv,last_act,deal,winnings) int Hv,last_act,deal,winnings; { /*******************************************************/ /* Do I stay ? */ /* */ /* Only if Hv (Handvalue) == 0 and */ /*if last_act == 1 or 0 (i.e last was a stay, or */ /*you go first). */ /* */ /* Which deal also determines staying, as on first deal*/ /*there is room for improvement */ /* */ /*******************************************************/ int result; result = 0; /* don't stay */ switch (deal) { case 1 : /* first deal */ if(Hv < 13 && Hv != 11 && Hv != 8) /* i.e nothing in hand */ { if(last_act == 0) /* I go first */ result = (rand()%100 < percent[0]); if(last_act == 1) /* opponent stayed */ result = (rand()%100) < percent[1]; } break; case 0 : /* second deal */ if(Hv < 13 && Hv != 11 && Hv != 8) /* i.e nothing in hand */ { if(last_act == 0) /* I go first */ result = (rand()%100 < percent[2]); if(last_act == 1) /* opponent stayed */ if(winnings >=0 ) result = (rand()%100 < percent[3]); } else /* some thing in hand */ if(Hv < 13) /* only consider if < 2 pair */ { if(last_act == 0) /* I go first */ result = (rand()%100 < percent[4]); }; break; }/* switch */ return result; } /* stay */ int drop(deal,cards_taken,Hv,last_act,winnings,turn) int deal,Hv; int cards_taken,last_act; int winnings,turn; { /**********************************************/ /* Do i drop my cards ? */ /* */ /* Only consider if nothing in hand and last */ /*action was increase. Number of cards taken */ /*by opponent, if second deal, is important. */ /* If presently losing money, then be more */ /*cautious, and drop more often. */ /* */ /* Follow through with a bluff, so never */ /* drop if have previously bet. */ /* */ /**********************************************/ int result; result = 0; /* do not drop */ if(last_act < 9) /* If the last action was a raise, i.e. >= 9, then I must have*/ /* previously bet, so it is important to carry the bet on */ /* and not go back on a bluff. */ /* Otherwise, I have added no money to the pot, and can */ /* consider dropping. */ switch (deal) { case 1 : /* first deal */ if(Hv < 13 && Hv != 11 && Hv != 8) /* i.e nothing in hand */ { if(last_act ==0) /* go first */ if(winnings >= 0) result = (rand()%100) < percent[5]; else result = (rand()%100) < percent[6]; if(last_act > 3) /* opponent bet */ if(winnings < 0) result = (rand()%100) < percent[7]; else result = (rand()%100) < percent[8]; } break; case 0 : /* second deal */ if(Hv < 13 && Hv != 11 && Hv != 8) /* i.e nothing in hand */ { if(last_act == 0) /* go first */ if(cards_taken == 0) /* opponent took no cards */ result = (rand()%100) < percent[9]; else if(winnings >=0 ) result = (rand()%100) < percent[10]; else result = (rand()%100) < percent[11]; if(last_act > 3) if(winnings <0) result = (rand()%100) < percent[12]; else result = (rand()%100 < percent[13]); } else /* have some thing */ if(cards_taken == 0 && Hv <15 ) result = (rand()%100 < percent[14]); } return result; }/* drop */ int calling(Hv,turn,first_deal,cards_taken) int Hv,turn,cards_taken,first_deal; { /* calling is determined by hand value and pot */ /* on turn 6 of the betting the only options will be */ /* drop or call, so automatically call on 6 */ int action; action =0; /* do not call */ if (turn == 6) action = 1; else { if(Hv < 13 && Hv != 11 && Hv != 8) /* i.e nothing in hand */ action = (rand()%100 < percent[15]); /* nearly always call */ else if(Hv < 13) /* less than 2 pair */ if(!first_deal && cards_taken == 0) action = (rand()%100 < percent[16]); /* likely to call */ else action = (rand()%100 < percent[17]); } return action; }/* calling */ int increase(Hv,first_deal,cards_taken) int Hv,first_deal,cards_taken; { /* increase current bet by one of three amounts */ /* Small , Medium , Large . */ /* */ /* returned amounts are :- */ /* */ /* 1 - 5 , corresponding to bets of */ /* 5,10,15,20,25 respectively */ /* */ int amount; switch (Hv) { case 20 : case 19 : case 18 : case 17 : case 16 : /* all 5 cards */ if( rand()%100 < 75) /* 75% of the time */ amount = 1 + (rand()%3); /* 1,2 or 3 */ else amount = 4 + (rand()&01); /* 4 or 5 */ break; case 15 : case 14 : case 13 : /* more than a hi pair */ if( rand()%100 < 75) /* 75% of the time */ amount = 1 + (rand()%3); /* 1,2 or 3 */ else amount = 4 + (rand()&01); /* 4 or 5 */ break; case 8 : /* lo pair */ if (first_deal) { if( rand()%100 < 75) /* 75% of the time */ amount = 1 + (rand()&01); /* 1 or 2 */ else amount = 3; } else /* second_deal */ { if(cards_taken ==0 ) { if( rand()%100 < 75) /* 75% of the time */ amount = 1; else amount = 2; } else /* some cards taken */ { if( rand()%100 < 75) /* 75% of the time */ amount = 1 + (rand()&01); /* 1 or 2 */ else amount = 3; } } break; case 11 : /* hi pair */ if (first_deal) { if( rand()%100 < 75) /* 75% of the time */ amount = 1 + (rand()&01); /* 1 or 2 */ else amount = 3; } else /* second_deal */ { if(cards_taken ==0 ) { if( rand()%100 < 75) /* 75% of the time */ amount = 1 + (rand()&01); else amount = 3; } else /* some cards taken */ { if( rand()%100 < 75) /* 75% of the time */ amount = 1 + (rand()%3); /* 1,2 or 3 */ else amount = 4 + (rand()&01); /* 4 or 5 */ } } break; default : /* nothing in hand */ amount = 1 + (rand()%5); /* 1 to 5 */ break; }/* switch */ return amount; }/* increase bet */