473,804 Members | 3,204 Online
Bytes | Software Development & Data Engineering Community
+ Post

Home Posts Topics Members FAQ

Lowering Of Graphite Rods Into Reactor Core

// A big 7 and three-quarters size "Hello" to all C++ programmers out there.
This here is the second program what I've
// ever wrote, the first being a "Fuck off world you cunt" program. It's a
nice little poker patience program, poker
// patience being a patience game whereby 10 poker hands are placed on the
table in a 5x5 square. Try it if you like.
// It's not really a C++ program as such, more of a SLOGic program heh heh.
It writes results to a file results.txt
// and I just had to post it to this newsgroup because because because ....

// I'm sending it off to the BNFL with my CV in response to their advert:
//
// <<Programmer required to write "lowering of graphite rods into reactor
core program" at Sizewell B.
// Good benefits package, nice pension (probably)>>
// Er .... If anyone's interested, compile it with the /O2 switch ...
optimise for speed.

//////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////
/////
/////
///// Program: Poker Patience Program (ppp.cpp)
/////
///// Writer: Peter Lambert using "Learn to Program with Borland C++
Builder 1.0" (£80) /////
///// which was a GUI C++ for Windows 95. Nice graphcs, bitmaps and
all that. /////
///// And then rewritten for Microsoft Visual C++ Toolkit 2003 (a
FREE compiler). /////
///// Date: 29th March 2006 between about 3pm and 3.45pm honest
/////
///// John Huston: Filling straights is a sucker's game
/////
///// Robert Duvall: 2 of Spades, 3 of Spades, 4 of Diamonds, 6 of Clubs, 8
of Spades /////
///// Instruction: Mince around with skore[] variables to improve play
/////
///// Dealer: Your dealer tonight is Frankie Machinek
/////
///// Note: Dealer can be a bit slow at beginning of each game because of
validation /////
///// Version Number: You're yanking me off now right?
/////
/////
/////
//////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////// P R O G R A M N O T E S
////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////
////
//// TO DO:
////
//// 1 .... Indenting ... Each "if" & "for" should be DIRECTLY above its
associated "{" & "}".
//// 2 .... Check for redundant variables.
//// 3 .... Analyze those 136 odd "skore" variables that determine where
cards are placed.
//// Can any improvements be made to up that average score per game?
//// 4 .... You could introduce some "CANNY LOGIC" so that placement of
cards takes into
//// consideration ONLY the remaining cards in the deck. Hence if
we're looking at a
//// pair of 7's and one or both of the other two 7's has awready
been placed elsewhere
//// then that pair of 7's ain't ever gonna be a prial or a foursy.
Same sorta thing
//// with potential straight flushes. If you're looking at 4,5,6,7 of
clubs and either
//// or both of the other two cards (ie 3 & 8 of clubs) have already
been placed
//// elsewhere then this can only ever become a flush or a straight.
Etc etc etc.
//// Complex yes, but required.
//// 5 .... If you're really stuck for things to do you could try to
"bitmapise" the whole
//// program so that for 100 games it writes 101 files, 001.jpg,
002.jpg, 003.jpg ...
//// 099.jpg, 100.jpg plus summary.txt.
////
///////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////

#pragma warning(disable : 4786)

#include <string>
#include <iostream>
#include <fstream>
#include <cstdlib>
#include <ctime>
#include <algorithm>
#include <cmath>
#include <cstdio>
#include <conio.h>

using namespace std; // VERY IMPORTANT!!!

//////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////// R A N D O M N U M B E R F U N C T I O N
//////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////
int RandInt(int lower,int higher)
{
return lower + rand() % (higher - lower + 1);
}
//////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////
//////////////// F I N D T O P R O W I N T A B L E A R R
A Y /////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////
int find_top(int harray[11][11])
{
int x, y, z;
z = 0;
bool kwit = false;
// Find top
for(x=0; x<=10; x++)
{
for(y=0; y<=10; y++)
{
if (harray[x][y] != 0)
{
z = x;
kwit = true;
break;
}
}
if (kwit) break;
}
return z;
}
//////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////
///////////// F I N D B O T T O M R O W I N T A B L E A
R R A Y //////////////
//////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////
int find_bottom(int harray[11][11])
{
int x, y, z;
z = 0;
bool kwit = false;
// Find bottom
for(x=10; x>=0; x--)
{
for(y=0; y<=10; y++)
{
if (harray[x][y] != 0)
{
z = x;
kwit = true;
break;
}
}
if (kwit) break;
}
return z;
}
//////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////
////////////// F I N D LEFTMOST COLUMN I N T A B L E A R
R A Y ///////////////
//////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////
int find_left(int harray[11][11])
{
int x, y, z;
z = 0;
bool kwit = false;
// Find left
for(x=0; x<=10; x++)
{
for(y=0; y<=10; y++)
{
if (harray[y][x] != 0)
{
z = x;
kwit = true;
break;
}
}
if (kwit) break;
}
return z;
}
//////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////
///////////// F I N D RIGHTMOST COLUMN I N T A B L E A R
R A Y ///////////////
//////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////
int find_right(int harray[11][11])
{
int x, y, z;
z = 0;
bool kwit = false;
// Find right
for(x=10; x>=0; x--)
{
for(y=0; y<=10; y++)
{
if (harray[y][x] != 0)
{
z = x;
kwit = true;
break;
}
}
if (kwit) break;
}
return z;
}
//////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////// T H E I D E N T I F Y H A N D F U N C T I O
N ///////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////
int identify_hand(i nt hand[5])
{
int i = 0;
int pair01 = 0, pair02 = 0, pair03 = 0, pair04 = 0,
pair12 = 0, pair13 = 0, pair14 = 0,
pair23 = 0, pair24 = 0,
pair34 = 0;
bool no_pairs = false, single_pair = false, two_pairs = false, flush =
false, prial = false, straight = false, schtraight = false, bum_schtraight =
false, dog_schtraight = false, full_hand = false, fours = false;
int number_of_pairs = 0;
int number_of_cards = 0, hand_identifier = 0;
int the_number_5 = 5; // This is the size of the hand[] array ...
required for the sort() function
int card1_pips=0, card1_suit=0, card2_pips=0, card2_suit=0, card3_pips=0,
card3_suit=0, card4_pips=0, card4_suit=0, card5_pips=0, card5_suit=0;

//Right ... first up we need to sort this hand[] array
sort(hand, hand + the_number_5);

// Thus hand[] will contain ...
// {0,0,0,0,0} ... No cards
// {0,0,0,0,104} ... 1 card (AS)
// {0,0,0,104,401} ... 2 cards (AS & 4H)
// {0,0,0,501,502} ... 2 cards (5H & 5D)
// {0,0,101,102,13 01} ... 3 cards (AH, AD & KH)
// {0,303,402,704, 604} ... 4 cards (3C, 4D, 7S & 6S)

card5_suit = (hand[0] % 100);
card4_suit = (hand[1] % 100);
card3_suit = (hand[2] % 100);
card2_suit = (hand[3] % 100);
card1_suit = (hand[4] % 100);

card5_pips = (hand[0] - card5_suit)/100;
card4_pips = (hand[1] - card4_suit)/100;
card3_pips = (hand[2] - card3_suit)/100;
card2_pips = (hand[3] - card2_suit)/100;
card1_pips = (hand[4] - card1_suit)/100;
//cardn_suit will now contain the suit (1, 2, 3 or 4 - HDCS) for card n
//cardn_pips will now contain the pips (1=A, 2=2, 3=3, 4=4 ... etc etc etc
.... 9=9, 10=10, 11=J, 12=Q and 13=K) for card n

// If hand[] = {0,0, 1.1, 3.3, 4.4} ... (AH, 3C, 4S) card1_pips =
4, card2_pips = 3, cards3_pips = 1 (the ace)
// If hand[] = {0, 1.1, 10.3, 12.4, 13.1} ... (AH, 10C, QS, KH)
card1_pips = 13 (K), card2_pips = 12 (Q), cards3_pips = 10, cards4_pips = 1
(the ace)
// ie ... the cards are written to card1, card2, card3 ... etc is
DESCENDING order KING HIGHEST (13) ACE LOWEST (1)
for(i=0; i<=4; i++)
{
if (hand[i] != 0) number_of_cards ++;
}

// Let's get this show on the road
if (number_of_card s == 0) hand_identifier = -2;
if (number_of_card s == 1) hand_identifier = -1;
if (number_of_card s == 2)
{
if (card1_pips == card2_pips) single_pair = true;
if (card1_suit == card2_suit) flush = true;
if ((card1_pips - card2_pips == 1) || ((card1_pips == 1) && (card2_pips ==
13))) straight = true;
if ((card1_pips - card2_pips == 2) || ((card1_pips == 1) && (card2_pips ==
12))) schtraight = true;
if ((card1_pips - card2_pips == 3) || ((card1_pips == 1) && (card2_pips ==
11))) bum_schtraight = true;
if ((card1_pips - card2_pips == 4) || ((card1_pips == 1) && (card2_pips ==
10))) dog_schtraight = true;
if (!single_pair && !flush && !straight && !schtraight && !bum_schtraight
&& !dog_schtraight ) hand_identifier = 0;
if (single_pair) hand_identifier = 1;
if (flush && !straight && !schtraight && !bum_schtraight &&
!dog_schtraight ) hand_identifier = 2;
if (!flush && straight && !schtraight && !bum_schtraight &&
!dog_schtraight ) hand_identifier = 3;
if (!flush && !straight && schtraight && !bum_schtraight &&
!dog_schtraight ) hand_identifier = 4;
if (!flush && !straight && !schtraight && bum_schtraight &&
!dog_schtraight ) hand_identifier = 5;
if (!flush && !straight && !schtraight && !bum_schtraight &&
dog_schtraight) hand_identifier = 6;
if (flush && straight && !schtraight && !bum_schtraight &&
!dog_schtraight ) hand_identifier = 7;
if (flush && !straight && schtraight && !bum_schtraight &&
!dog_schtraight ) hand_identifier = 8;
if (flush && !straight && !schtraight && bum_schtraight &&
!dog_schtraight ) hand_identifier = 9;
if (flush && !straight && !schtraight && !bum_schtraight &&
dog_schtraight) hand_identifier = 10;
}
if (number_of_card s == 3)
{
if (card1_pips == card2_pips) pair01 = 1;
if (card1_pips == card3_pips) pair02 = 1;
if (card2_pips == card3_pips) pair12 = 1;
number_of_pairs = pair01 + pair02 + pair12;
if (number_of_pair s == 0) no_pairs = true;
if (number_of_pair s == 1) single_pair = true;
if (number_of_pair s == 3) prial = true;
if (no_pairs)
{
if ((card1_suit == card2_suit) && (card1_suit == card3_suit) &&
(card2_suit == card3_suit)) flush = true;
if (((card1_pips - card2_pips == 1) && (card2_pips - card3_pips == 1)) ||
((card1_pips == 13) && (card2_pips == 12) && (card3_pips == 1))) straight =
true;
if ((card1_pips - card3_pips == 3) && ((card1_pips - card2_pips == 1) ||
(card2_pips - card3_pips == 1))) schtraight = true;
if (((card1_pips == 13) || (card1_pips == 12)) && ((card3_pips == 1) &&
(card2_pips == 11))) schtraight = true;
if ((card1_pips - card3_pips == 4) && ((card2_pips > card3_pips) &&
(card1_pips > card2_pips))) bum_schtraight = true;
if ((card3_pips == 1) && (card2_pips == 10) && ((card1_pips == 11) ||
(card1_pips == 12) || (card1_pips == 13))) bum_schtraight = true;
}
if (no_pairs && !flush && !straight && !schtraight && !bum_schtraight )
hand_identifier = 11;
if (single_pair && !flush && !straight && !schtraight && !bum_schtraight )
hand_identifier = 12;
if (flush && !straight && !schtraight && !bum_schtraight ) hand_identifier
= 13;
if (prial && !flush && !straight && !schtraight && !bum_schtraight )
hand_identifier = 14;
if (!flush && straight && !schtraight && !bum_schtraight ) hand_identifier
= 15;
if (!flush && !straight && schtraight && !bum_schtraight ) hand_identifier
= 16;
if (!flush && !straight && !schtraight && bum_schtraight) hand_identifier
= 17;
if (flush && straight && !schtraight && !bum_schtraight ) hand_identifier =
18;
if (flush && !straight && schtraight && !bum_schtraight ) hand_identifier =
19;
if (flush && !straight && !schtraight && bum_schtraight) hand_identifier =
20;
}
if (number_of_card s == 4)
{
if (card1_pips == card2_pips) pair01 = 1;
if (card1_pips == card3_pips) pair02 = 1;
if (card1_pips == card4_pips) pair03 = 1;
if (card2_pips == card3_pips) pair12 = 1;
if (card2_pips == card4_pips) pair13 = 1;
if (card3_pips == card4_pips) pair23 = 1;
number_of_pairs = pair01 + pair02 + pair03 +
pair12 + pair13 +
pair23;
if (number_of_pair s == 0) no_pairs = true;
if (number_of_pair s == 1) single_pair = true;
if (number_of_pair s == 2) two_pairs = true;
if (number_of_pair s == 3) prial = true;
if (number_of_pair s == 6) fours = true;
if (no_pairs)
{
if ((card1_suit == card2_suit) && (card1_suit == card3_suit) &&
(card1_suit == card4_suit) && (card2_suit == card3_suit) && (card2_suit ==
card4_suit) && (card3_suit == card4_suit)) flush = true;
if ((card1_pips - card2_pips == 1) && (card2_pips - card3_pips == 1) &&
(card3_pips - card4_pips == 1)) straight = true;
if ((card1_pips == 13) && (card2_pips == 12) && (card3_pips == 11) &&
(card4_pips == 1)) straight = true;
if ((card1_pips - card4_pips == 4) && ((card1_pips - card2_pips <= 2) &&
(card3_pips - card4_pips <= 2))) schtraight = true;
if ((card4_pips == 1) && (card3_pips == 10) && ((card1_pips == 13) ||
(card1_pips == 12)) && ((card2_pips == 12) || (card2_pips == 11)))
schtraight = true;
}
if (no_pairs && !flush && !straight && !schtraight) hand_identifier = 21;
if (single_pair && !flush && !straight && !schtraight) hand_identifier =
22;
if (two_pairs && !flush && !straight && !schtraight) hand_identifier =
23;
if (flush && !straight && !schtraight) hand_identifier = 24;
if (prial && !flush && !straight && !schtraight) hand_identifier = 25;
if (!flush && straight && !schtraight) hand_identifier = 26;
if (!flush && !straight && schtraight) hand_identifier = 27;
if (fours && !flush && !straight && !schtraight) hand_identifier = 28;
if (flush && straight && !schtraight) hand_identifier = 29;
if (flush && !straight && schtraight) hand_identifier = 30;
}
if (number_of_card s == 5)
{
if (card1_pips == card2_pips) pair01 = 1;
if (card1_pips == card3_pips) pair02 = 1;
if (card1_pips == card4_pips) pair03 = 1;
if (card1_pips == card5_pips) pair04 = 1;
if (card2_pips == card3_pips) pair12 = 1;
if (card2_pips == card4_pips) pair13 = 1;
if (card2_pips == card5_pips) pair14 = 1;
if (card3_pips == card4_pips) pair23 = 1;
if (card3_pips == card5_pips) pair24 = 1;
if (card4_pips == card5_pips) pair34 = 1;
number_of_pairs = pair01 + pair02 + pair03 + pair04 +
pair12 + pair13 + pair14 +
pair23 + pair24 +
pair34;
if (number_of_pair s == 0) no_pairs = true;
if (number_of_pair s == 1) single_pair = true;
if (number_of_pair s == 2) two_pairs = true;
if (number_of_pair s == 3) prial = true;
if (number_of_pair s == 4) full_hand = true;
if (number_of_pair s == 6) fours = true;
if (no_pairs)
{
if ((card1_suit == card2_suit) && (card1_suit == card3_suit) &&
(card1_suit == card4_suit) && (card1_suit == card5_suit) &&
(card2_suit == card3_suit) && (card2_suit == card4_suit) &&
(card2_suit == card5_suit) &&
(card3_suit == card4_suit) && (card3_suit == card5_suit) &&
(card4_suit == card5_suit)) flush = true;
if ((card1_pips - card2_pips == 1) && (card2_pips - card3_pips == 1) &&
(card3_pips - card4_pips == 1) && (card4_pips - card5_pips == 1)) straight =
true;
if ((card1_pips == 13) && (card2_pips == 12) && (card3_pips == 11) &&
(card4_pips == 10) && (card5_pips == 1)) straight = true;
}
if (no_pairs && !flush && !straight && !schtraight) hand_identifier = 31;
if (single_pair && !flush && !straight && !schtraight) hand_identifier =
32;
if (two_pairs && !flush && !straight && !schtraight) hand_identifier = 33;
if (flush && !straight && !schtraight) hand_identifier = 34;
if (prial && !flush && !straight && !schtraight) hand_identifier = 35;
if (full_hand && !flush && !straight && !schtraight) hand_identifier = 36;
if (!flush && straight && !schtraight) hand_identifier = 37;
if (fours && !flush && !straight && !schtraight) hand_identifier = 38;
if (flush && straight && !schtraight) hand_identifier = 39;
}
return hand_identifier ;
}
//////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////
////////////////// EVALUATE HANDS BEFORE UNT AFTER
FUNCTION //////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////
int evaluate_before _unt_after_hand s(int before[5], int after[5])
{
int beforeski = 0, afterski = 0;
int igta = 0; // I'll give that a .... eg .... Adding a 4 of diamonds
to a 2,3,5 of diamonds .... I'll give that a 40!!
int skore[136];

// -2 - 0 cards: you are holding onto a hand made of thin air

// -1 - 1 card: you have a card. But is it a hand?

// 0 - 2 cards: bum hand
// 1 - 2 cards: pair
// 2 - 2 cards: flush
// 3 - 2 cards: straight (A-2, 4-5, 6-7, 9-10, J-Q, K-A)
// 4 - 2 cards: "schtraight " (A-3, 4-6, 6-8, 9-J, Q-A ... one filler card
required)
// 5 - 2 cards: bum "schtraight " (A-4, 4-7, 6-9, 9-Q, J-A ... two filler
cards required)
// 6 - 2 cards: dog "schtraight " (A-5, 4-8, 6-10, 9-K, 10-A ... three
filler cards required)
// 7 - 2 cards: straight flush
// 8 - 2 cards: "schtraight " flush
// 9 - 2 cards: bum "schtraight " flush
// 10 - 2 cards: dog "schtraight " flush

// 11 - 3 cards: bum hand
// 12 - 3 cards: pair
// 13 - 3 cards: flush
// 14 - 3 cards: prial
// 15 - 3 cards: straight (A-2-3, 6-7-8, Q-K-A)
// 16 - 3 cards: "schtraight " (A-2-4, A-3-4, 6-7-9, J-K-A ... one filler
card required)
// 17 - 3 cards: bum "schtraight " (A-2-5, A-3-5, A-4-5, 6-8-10, 10-J-A ...
two filler cards required)
// 18 - 3 cards: straight flush
// 19 - 3 cards: "schtraight " flush
// 20 - 3 cards: bum "schtraight " flush

// 21 - 4 cards: bum hand
// 22 - 4 cards: pair
// 23 - 4 cards: two pairs
// 24 - 4 cards: flush
// 25 - 4 cards: prial
// 26 - 4 cards: straight (A-2-3-4, 6-7-8-9, J-Q-K-A)
// 27 - 4 cards: "schtraight " (A-3-4-5, 6-8-9-10, 10-J-K-A ... one filler
card required)
// 28 - 4 cards: fours
// 29 - 4 cards: straight flush
// 30 - 4 cards: "schtraight " flush

// 31 - 5 cards: bum hand
// 32 - 5 cards: pair
// 33 - 5 cards: two pairs
// 34 - 5 cards: flush
// 35 - 5 cards: prial
// 36 - 5 cards: full hand
// 37 - 5 cards: straight
// 38 - 5 cards: fours
// 39 - 5 cards: straight flush

//
=============== =============== =============== =============== =============== =====
// SCORE BEFORE AFTER COMMENT
//
=============== =============== =============== =============== =============== =====
skore[0] = -10; // -1 0 1 card made into a 2 card bum hand
skore[1] = 10; // -1 1 1 card made into a 2 card pair
skore[2] = 4; // -1 2 1 card made into a 2 card flush
skore[3] = 5; // -1 3 1 card made into a 2 card straight
skore[4] = 3; // -1 4 1 card made into a 2 card
"schtraight "
skore[5] = 1; // -1 5 1 card made into a 2 card bum
"schtraight "
skore[6] = -1; // -1 6 1 card made into a 2 card dog
"schtraight "
skore[7] = 12; // -1 7 1 card made into a 2 card straight
flush
skore[8] = 10; // -1 8 1 card made into a 2 card
"schtraight " flush
skore[9] = 8; // -1 9 1 card made into a 2 card bum
"schtraight " flush
skore[10] = 6; // -1 10 1 card made into a 2 card dog
"schtraight " flush

skore[11] = -5; // 0 11 2 card bum hand not improved upon
skore[12] = 6; // 0 12 2 card bum hand improved to a 3 card
pair
skore[13] = -15; // 1 12 2 card pair not improved upon
skore[14] = 50; // 1 14 2 card pair improved to a 3 card
prial
skore[15] = -8; // 2 11 2 card flush buggered up
skore[16] = 8; // 2 12 2 card flush made into a 3 card pair
skore[17] = 15; // 2 13 2 card flush improved to a 3 card
flush
skore[18] = -10; // 3 11 2 card straight buggered up
skore[19] = -2; // 3 12 2 card straight made into a 3 card
pair
skore[20] = 20; // 3 15 2 card straight improved to a 3 card
straight
skore[21] = 12; // 3 16 2 card straight improved to a 3 card
"schtraight "
skore[22] = 4; // 3 17 2 card straight improved to a 3 card
bum "schtraight "
skore[23] = -6; // 4 11 2 card "schtraight " buggered up
skore[24] = 0; // 4 12 2 card "schtraight " made into a 3
card pair
skore[25] = 25; // 4 15 2 card "schtraight " improved to a 3
card straight
skore[26] = 18; // 4 16 2 card "schtraight " improved to a 3
card "schtraight "
skore[27] = 8; // 4 17 2 card "schtraight " improved to a 3
card bum "schtraight "
skore[28] = -2; // 5 11 2 card bum "schtraight " buggered up
skore[29] = 2; // 5 12 2 card bum "schtraight " made into a 3
card pair
skore[30] = 24; // 5 16 2 card bum "schtraight " improved to a
3 card "schtraight "
skore[31] = 12; // 5 17 2 card bum "schtraight " improved to a
3 card bum "schtraight "
skore[32] = 2; // 6 11 2 card dog "schtraight " buggered up
skore[33] = 4; // 6 12 2 card dog "schtraight " made into a 3
card pair
skore[34] = 16; // 6 17 2 card dog "schtraight " improved to a
3 card bum "schtraight "
skore[35] = -20; // 7 11 2 card straight flush buggered up
skore[36] = -15; // 7 12 2 card straight flush made into a 3
card pair
skore[37] = -12; // 7 13 2 card straight flush made into a 3
card flush
skore[38] = 10; // 7 15 2 card straight flush made into a 3
card straight
skore[39] = 4; // 7 16 2 card straight flush made into a 3
card "schtraight "
skore[40] = -2; // 7 17 2 card straight flush made into a 3
card bum "schtraight "
skore[41] = 40; // 7 18 2 card straight flush improved to a 3
card straight flush
skore[42] = 25; // 7 19 2 card straight flush improved to a 3
card "schtraight " flush
skore[43] = 10; // 7 20 2 card straight flush improved to a 3
card bum "schtraight " flush
skore[44] = -18; // 8 11 2 card "schtraight " flush buggered up
skore[45] = -12; // 8 12 2 card "schtraight " flush made into a
3 card pair
skore[46] = -6; // 8 13 2 card "schtraight " flush made into a
3 card flush
skore[47] = -6; // 8 15 2 card "schtraight " flush made into a
3 card straight
skore[48] = -12; // 8 16 2 card "schtraight " flush made into a
3 card "schtraight "
skore[49] = -16; // 8 17 2 card "schtraight " flush made into a
3 card bum "schtraight "
skore[50] = 45; // 8 18 2 card "schtraight " flush improved to
a 3 card straight flush
skore[51] = 30; // 8 19 2 card "schtraight " flush improved to
a 3 card "schtraight " flush
skore[52] = 15; // 8 20 2 card "schtraight " flush improved to
a 3 card bum "schtraight " flush
skore[53] = -16; // 9 11 2 card bum "schtraight " flush
buggered up
skore[54] = -9; // 9 12 2 card bum "schtraight " flush made
into a 3 card pair
skore[55] = 0; // 9 13 2 card bum "schtraight " flush made
into a 3 card flush
skore[56] = -8; // 9 16 2 card bum "schtraight " flush made
into a 3 card "schtraight "
skore[57] = 12; // 9 17 2 card bum "schtraight " flush made
into a 3 card bum "schtraight "
skore[58] = 35; // 9 19 2 card bum "schtraight " flush
improved to a 3 card "schtraight " flush
skore[59] = 20; // 9 20 2 card bum "schtraight " flush
improved to a 3 card bum "schtraight " flush
skore[60] = -14; // 10 11 2 card dog "schtraight " flush
buggered up
skore[61] = -6; // 10 12 2 card dog "schtraight " flush made
into a 3 card pair
skore[62] = 12; // 10 13 2 card dog "schtraight " flush made
into a 3 card flush
skore[63] = -8; // 10 17 2 card dog "schtraight " flush made
into a 3 card bum "schtraight "
skore[64] = 25; // 10 20 2 card dog "schtraight " flush
improved to a 3 card bum "schtraight " flush

skore[65] = 2; // 11 21 3 card bum hand not improved upon
skore[66] = 5; // 11 22 3 card bum hand improved to a 4 card
pair
skore[67] = -6; // 12 22 3 card pair not improved upon
skore[68] = 45; // 12 25 3 card pair improved to a 4 card
prial
skore[69] = 40; // 12 23 3 card pair improved to a 4 card two
pair
skore[70] = -12; // 13 21 3 card flush buggered up
skore[71] = -8; // 13 22 3 card flush made into a 4 card pair
skore[72] = 25; // 13 24 3 card flush improved to a 4 card
flush
skore[73] = -10; // 14 25 3 card prial not improved upon
skore[74] = 100; // 14 28 3 card prial improved to an all fours
skore[75] = -20; // 15 21 3 card straight buggered up
skore[76] = -16; // 15 22 3 card straight made into a 4 card
pair
skore[77] = 26; // 15 26 3 card straight improved to a 4 card
straight
skore[78] = 20; // 15 27 3 card straight improved to a 4 card
"schtraight "
skore[79] = -16; // 16 21 3 card "schtraight " buggered up
skore[80] = -12; // 16 22 3 card "schtraight " made into a 4
card pair
skore[81] = 30; // 16 26 3 card "schtraight " improved to a 4
card straight
skore[82] = 22; // 16 27 3 card "schtraight " improved to a 4
card "schtraight "
skore[83] = -12; // 17 21 3 card bum "schtraight " buggered up
skore[84] = -8; // 17 22 3 card bum "schtraight " made into a 4
card pair
skore[85] = 24; // 17 27 3 card bum "schtraight " improved to a
4 card "schtraight "
skore[86] = -35; // 18 21 3 card straight flush buggered up
skore[87] = -30; // 18 22 3 card straight flush made into a 4
card pair
skore[88] = -20; // 18 24 3 card straight flush made into a 4
card flush
skore[89] = -12; // 18 26 3 card straight flush made into a 4
card straight
skore[90] = -20; // 18 27 3 card straight flush made into a 4
card "schtraight "
skore[91] = 45; // 18 29 3 card straight flush improved to a 4
card straight flush
skore[92] = 36; // 18 30 3 card straight flush improved to a 4
card "schtraight " flush
skore[93] = -30; // 19 21 3 card "schtraight " flush buggered up
skore[94] = -25; // 19 22 3 card "schtraight " flush made into a
4 card pair
skore[95] = -15; // 19 24 3 card "schtraight " flush made into a
4 card flush
skore[96] = -6; // 19 26 3 card "schtraight " flush made into a
4 card straight
skore[97] = -15; // 19 27 3 card "schtraight " flush made into a
4 card "schtraight "
skore[98] = 49; // 19 29 3 card "schtraight " flush improved to
a 4 card straight flush
skore[99] = 40; // 20 21 3 card bum "schtraight " flush
buggered up
skore[100] = -25; // 20 22 3 card bum "schtraight " flush made
into a 4 card pair
skore[101] = -20; // 20 24 3 card bum "schtraight " flush made
into a 4 card flush
skore[102] = -10; // 20 26 3 card bum "schtraight " flush made
into a 4 card straight
skore[103] = -10; // 20 27 3 card bum "schtraight " flush made
into a 4 card "schtraight "
skore[104] = 44; // 20 30 3 card bum "schtraight " flush
improved to a 4 card "schtraight " flush

skore[105] = 3; // 21 31 4 card bum hand not improved upon
skore[106] = 4; // 21 32 4 card bum hand improved to a 5 card
pair
skore[107] = -7; // 22 32 4 card pair not improved upon
skore[108] = 30; // 22 35 4 card pair improved to a 5 card
prial
skore[109] = 29; // 22 33 4 card pair improved to a 5 card two
pair
skore[110] = -5; // 23 33 4 card two pair not improved upon
skore[111] = 90; // 23 36 4 card two pair improved to a full
hand
skore[112] = -30; // 24 31 4 card flush buggered up
skore[113] = -28; // 24 32 4 card flush made into a 5 card pair
skore[114] = 50; // 24 34 4 card flush improved to a 5 card
flush
skore[115] = -10; // 25 35 4 card prial not improved upon
skore[116] = 100; // 25 38 4 card prial improved to an all fours
skore[117] = 90; // 25 36 4 card prial improved to a full hand
skore[118] = -70; // 26 31 4 card straight buggered up
skore[119] = -68; // 26 32 4 card straight made into a 5 card
pair
skore[120] = 80; // 26 37 4 card straight improved to a 5 card
straight
skore[121] = -65; // 27 31 4 card "schtraight " buggered up
skore[122] = -63; // 27 32 4 card "schtraight " made into a 5
card pair
skore[123] = 85; // 27 37 4 card "schtraight " improved to a 5
card straight
skore[124] = 0; // 28 38 4 card all fours not buggered up but
strangely not improved upon either
skore[125] = -60; // 29 31 4 card straight flush buggered up
skore[126] = -58; // 29 32 4 card straight flush made into a 5
card pair
skore[127] = 48; // 29 34 4 card straight flush made into a 5
card flush
skore[128] = 10; // 29 37 4 card straight flush made into a 5
card straight
skore[129] = 200; // 29 39 4 card straight flush improved to a 5
card STRAIGHT FLUSH bejesus!
skore[130] = -55; // 30 31 4 card "schtraight " flush buggered up
skore[131] = -53; // 30 32 4 card "schtraight " flush made into a
5 card pair
skore[132] = 46; // 30 34 4 card "schtraight " flush made into a
5 card flush
skore[133] = 15; // 30 37 4 card "schtraight " flush made into a
5 card straight
skore[134] = 250; // 30 39 4 card "schtraight " flush improved to
a 5 card STRAIGHT FLUSH bejesus!

beforeski = identify_hand(b efore);
afterski = identify_hand(a fter);

// Zeroise that cocksucker
igta = 0;

// I don't have it with "switch" statements
if (beforeski == -2) igta = 0;
if (beforeski == -1)
{
if (afterski == 0) igta = skore[0];
if (afterski == 1) igta = skore[1];
if (afterski == 2) igta = skore[2];
if (afterski == 3) igta = skore[3];
if (afterski == 4) igta = skore[4];
if (afterski == 5) igta = skore[5];
if (afterski == 6) igta = skore[6];
if (afterski == 7) igta = skore[7];
if (afterski == 8) igta = skore[8];
if (afterski == 9) igta = skore[9];
if (afterski == 10) igta = skore[10];
}
if (beforeski == 0)
{
if (afterski == 11) igta = skore[11];
if (afterski == 12) igta = skore[12];
}
if (beforeski == 1)
{
if (afterski == 12) igta = skore[13];
if (afterski == 14) igta = skore[14];
}
if (beforeski == 2)
{
if (afterski == 11) igta = skore[15];
if (afterski == 12) igta = skore[16];
if (afterski == 13) igta = skore[17];
}
if (beforeski == 3)
{
if (afterski == 11) igta = skore[18];
if (afterski == 12) igta = skore[19];
if (afterski == 15) igta = skore[20];
if (afterski == 16) igta = skore[21];
if (afterski == 17) igta = skore[22];
}
if (beforeski == 4)
{
if (afterski == 11) igta = skore[23];
if (afterski == 12) igta = skore[24];
if (afterski == 15) igta = skore[25];
if (afterski == 16) igta = skore[26];
if (afterski == 17) igta = skore[27];
}
if (beforeski == 5)
{
if (afterski == 11) igta = skore[28];
if (afterski == 12) igta = skore[29];
if (afterski == 16) igta = skore[30];
if (afterski == 17) igta = skore[31];
}
if (beforeski == 6)
{
if (afterski == 11) igta = skore[32];
if (afterski == 12) igta = skore[33];
if (afterski == 17) igta = skore[34];
}
if (beforeski == 7)
{
if (afterski == 11) igta = skore[35];
if (afterski == 12) igta = skore[36];
if (afterski == 13) igta = skore[37];
if (afterski == 15) igta = skore[38];
if (afterski == 16) igta = skore[39];
if (afterski == 17) igta = skore[40];
if (afterski == 18) igta = skore[41];
if (afterski == 19) igta = skore[42];
if (afterski == 20) igta = skore[43];
}
if (beforeski == 8)
{
if (afterski == 11) igta = skore[44];
if (afterski == 12) igta = skore[45];
if (afterski == 13) igta = skore[46];
if (afterski == 15) igta = skore[47];
if (afterski == 16) igta = skore[48];
if (afterski == 17) igta = skore[49];
if (afterski == 18) igta = skore[50];
if (afterski == 19) igta = skore[51];
if (afterski == 20) igta = skore[52];
}
if (beforeski == 9)
{
if (afterski == 11) igta = skore[53];
if (afterski == 12) igta = skore[54];
if (afterski == 13) igta = skore[55];
if (afterski == 16) igta = skore[56];
if (afterski == 17) igta = skore[57];
if (afterski == 19) igta = skore[58];
if (afterski == 20) igta = skore[59];
}
if (beforeski == 10)
{
if (afterski == 11) igta = skore[60];
if (afterski == 12) igta = skore[61];
if (afterski == 13) igta = skore[62];
if (afterski == 17) igta = skore[63];
if (afterski == 20) igta = skore[64];
}
if (beforeski == 11)
{
if (afterski == 21) igta = skore[65];
if (afterski == 22) igta = skore[66];
}
if (beforeski == 12)
{
if (afterski == 22) igta = skore[67];
if (afterski == 25) igta = skore[68];
if (afterski == 23) igta = skore[69];
}
if (beforeski == 13)
{
if (afterski == 21) igta = skore[70];
if (afterski == 22) igta = skore[71];
if (afterski == 24) igta = skore[72];
}
if (beforeski == 14)
{
if (afterski == 25) igta = skore[73];
if (afterski == 28) igta = skore[74];
}
if (beforeski == 15)
{
if (afterski == 21) igta = skore[75];
if (afterski == 22) igta = skore[76];
if (afterski == 26) igta = skore[77];
if (afterski == 27) igta = skore[78];
}
if (beforeski == 16)
{
if (afterski == 21) igta = skore[79];
if (afterski == 22) igta = skore[80];
if (afterski == 26) igta = skore[81];
if (afterski == 27) igta = skore[82];
}
if (beforeski == 17)
{
if (afterski == 21) igta = skore[83];
if (afterski == 22) igta = skore[84];
if (afterski == 27) igta = skore[85];
}
if (beforeski == 18)
{
if (afterski == 21) igta = skore[86];
if (afterski == 22) igta = skore[87];
if (afterski == 24) igta = skore[88];
if (afterski == 26) igta = skore[89];
if (afterski == 27) igta = skore[90];
if (afterski == 29) igta = skore[91];
if (afterski == 30) igta = skore[92];
}
if (beforeski == 19)
{
if (afterski == 21) igta = skore[93];
if (afterski == 22) igta = skore[94];
if (afterski == 24) igta = skore[95];
if (afterski == 26) igta = skore[96];
if (afterski == 27) igta = skore[97];
if (afterski == 29) igta = skore[98];
}
if (beforeski == 20)
{
if (afterski == 21) igta = skore[99];
if (afterski == 22) igta = skore[100];
if (afterski == 24) igta = skore[101];
if (afterski == 26) igta = skore[102];
if (afterski == 27) igta = skore[103];
if (afterski == 30) igta = skore[104];
}
if (beforeski == 21)
{
if (afterski == 31) igta = skore[105];
if (afterski == 32) igta = skore[106];
}
if (beforeski == 22)
{
if (afterski == 32) igta = skore[107];
if (afterski == 35) igta = skore[108];
if (afterski == 33) igta = skore[109];
}
if (beforeski == 23)
{
if (afterski == 33) igta = skore[110];
if (afterski == 36) igta = skore[111];
}
if (beforeski == 24)
{
if (afterski == 31) igta = skore[112];
if (afterski == 32) igta = skore[113];
if (afterski == 34) igta = skore[114];
}
if (beforeski == 25)
{
if (afterski == 35) igta = skore[115];
if (afterski == 38) igta = skore[116];
if (afterski == 36) igta = skore[117];
}
if (beforeski == 26)
{
if (afterski == 31) igta = skore[118];
if (afterski == 32) igta = skore[119];
if (afterski == 37) igta = skore[120];
}
if (beforeski == 27)
{
if (afterski == 31) igta = skore[121];
if (afterski == 32) igta = skore[122];
if (afterski == 37) igta = skore[123];
}
if (beforeski == 28)
{
if (afterski == 38) igta = skore[124];
}
if (beforeski == 29)
{
if (afterski == 31) igta = skore[125];
if (afterski == 32) igta = skore[126];
if (afterski == 34) igta = skore[127];
if (afterski == 37) igta = skore[128];
if (afterski == 39) igta = skore[129];
}
if (beforeski == 30)
{
if (afterski == 31) igta = skore[130];
if (afterski == 32) igta = skore[131];
if (afterski == 34) igta = skore[132];
if (afterski == 37) igta = skore[133];
if (afterski == 39) igta = skore[134];
}


return igta;
}
//////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////// M A I N F U N C T I O N
////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////
void main(void)
{
int card_counter;
int table[11][11];
int i, j, k, x, y, z; // Multi-purpose variables
int row, column, orig_row, orig_col, right, left, top, bottom, high, wide;
int pozzish; // The positional counter ... goes from 0 to
7

int numeric_suit_id entifier;
int the5cards_befor e[5];
int the5cards_after[5];
int random_number;
struct card
{
int numero;
char pips[3];
char suit[2];
int card_id;
};

int compass_score[8][4];
// The compass_score array
// compass_score[n][0] holds LEGAL POSITION: 0 is illegal, 1 is legal ...
// a legal position doesn't neccessarily mean that the game will be
completble,
// it merely means that it's within the 5x5 matrix
//
// compass_score[n][1] holds VERTICAL SCORE for "n"th element
// compass_score[n][2] holds HORIZONTAL SCORE for "n"th element
// compass_score[n][3] holds TOTAL SCORE for "n"th element
bool tchbdf = false; // This card has been dealt
before
bool legal_position = false; // Not a legal position guv'nor, I'm
afraid
int sihl = 0; //stick it here luvva, place card
at pozzish(sihl) for best score...
int slog = 0;
int p = 0;
int sorted_compass_ score_array[8];
int total_score[8];
int the_number_8 = 8;
int skr = 0;
int element = 0;
bool pcot = false; //Place card on table?
int place_card_here = 0; // Please can I place the card on the table
here? 0=E, 1=SE, 2=S, 3=SW, 4=W, 5=NW, 6=N, 7=NE ... compass point style
bool can_do = false;
int v_row, v_column, v_place_card_he re, v_card_counter,
copy_of_table[11][11];

bool card_placeable = false;
bool completable = false;
bool new_card = true;
bool resolved_it = false;
int crack[26][3];
int current_card = 0;
int pozzy = 0, backstop = 0, save_row = 0, save_column = 0;
int hygh = 0, wyde = 0, q_bottom = 0, q_top = 0, q_right = 0, q_left = 0;
int vertical_hand[5], horizontal_hand[5];
int identum = 0;
int current_game = 0;
int vertical_wall[5], horizontal_wall[5];
int scoot;
bool no_walls; // Sausages
int nogtp = 50; // Number of games to play
int vertical_score[5], horizontal_scor e[5];
int best_score_ever = 0, worse_score_eve r = 0;
int best_game_ever = 0, worst_game_ever = 0;
int score_for_this_ game = 0, score_tally = 0;
int bum_hands = 0, one_pairs = 0, two_pairs = 0, flushes = 0, prials = 0,
full_hands = 0, straights = 0, fours = 0, straight_flushe s = 0;
float average_score_p er_game = 0;
float anpg_bum_hands = 0, anpg_one_pairs = 0, anpg_two_pairs = 0,
anpg_flushes = 0, anpg_prials = 0, anpg_full_hands = 0, anpg_straights = 0,
anpg_fours = 0, anpg_straight_f lushes = 0; // anpg = average number per
game
float start_time = 0, stop_time = 0, time_taken = 0, average_time_pe r_game
= 0;

start_time = time(NULL);

ofstream phile ("results.txt") ;

//Seed rand() with current time
srand(unsigned( time(NULL)));
for(current_gam e=1; current_game <= nogtp; current_game++)
{

// A bit of screen output just to let ya know what gives
// cout<<"Game number - "<<current_game <<" ... Card number -
"<<card_counter <<endl;

card the25[25];

//Zeroise card array
for(i=0; i != 25; i++)
{
the25[i].numero = 0;
strcpy(the25[i].pips, " ");
strcpy(the25[i].suit, " ");
the25[i].card_id = 0;
}

//Zeroise table array
for(x=0; x<=10; x++)
for(y=0; y<=10; y++)
table[x][y] = 0;
for(card_counte r=0; card_counter <= 24; card_counter++)
{
// A bit of screen output just to let ya know what gives
cout<<"Game number - "<<current_game <<" ... Card number -
"<<card_counter +1<<endl;
random_number = RandInt(1,52); // Will be between 1 & 52

// This is the first card dealt ... no need to check to see if it's a
duplicate.
if (card_counter == 0) tchbdf = false;
// This is not the first card dealt.
// Need to check to see if the RNG has dealt this card previously.
if (card_counter != 0) tchbdf = true;
while (tchbdf)
{
for(j=0; j<=card_counter ; j++)
{
tchbdf = false;
if (the25[j].numero == random_number)
// Alert! Card matches previously dealt card!
{
tchbdf = true;
// Deal me a PROPER card please Random Number Generator NOT a
DUPLICATE.
random_number = RandInt(1,52); // Will be between 1 & 52
break;
}
}
}
// Okay, you have a unique card, friend, now crack on ...
// Writing card to array ...
the25[card_counter].numero = random_number;

//Okay, so here are the cards:
//Hearts.....(Kin g o' Hearts is a lover and he give her everything)
//1=2H....2=3H... 3=4H...4=5H...5 =6H...6=7H...7= 8H...8=9H...9=1 0H..10=JH..11=Q H..12=KH..13=AH
//Diamonds...(Kin g o' Diamonds is a wedding ring)
//14=2D..15=3D..1 6=4D..17=5D..18 =6D..19=7D..20= 8D..21=9D..22=1 0D..23=JD..24=Q D..25=KD..26=AD
//Clubs......(Kin g o' Clubs makes a dollar)
//27=2C..28=3C..2 9=4C..30=5C..31 =6C..32=7C..33= 8C..34=9C..35=1 0C..36=JC..37=Q C..38=KC..39=AC
//Spades.....(Kin g o' Spades he's a brother, doing his own thing)
//40=2S..41=3S..4 2=4S..43=5S..44 =6S..45=7S..46= 8S..47=9S..48=1 0S..49=JS..50=Q S..51=KS..52=AS

if ((the25[card_counter].numero % 13) == 1)
strcpy(the25[card_counter].pips, " 2");
if ((the25[card_counter].numero % 13) == 2)
strcpy(the25[card_counter].pips, " 3");
if ((the25[card_counter].numero % 13) == 3)
strcpy(the25[card_counter].pips, " 4");
if ((the25[card_counter].numero % 13) == 4)
strcpy(the25[card_counter].pips, " 5");
if ((the25[card_counter].numero % 13) == 5)
strcpy(the25[card_counter].pips, " 6");
if ((the25[card_counter].numero % 13) == 6)
strcpy(the25[card_counter].pips, " 7");
if ((the25[card_counter].numero % 13) == 7)
strcpy(the25[card_counter].pips, " 8");
if ((the25[card_counter].numero % 13) == 8)
strcpy(the25[card_counter].pips, " 9");
if ((the25[card_counter].numero % 13) == 9)
strcpy(the25[card_counter].pips, "10");
if ((the25[card_counter].numero % 13) == 10)
strcpy(the25[card_counter].pips, " J");
if ((the25[card_counter].numero % 13) == 11)
strcpy(the25[card_counter].pips, " Q");
if ((the25[card_counter].numero % 13) == 12)
strcpy(the25[card_counter].pips, " K");
if ((the25[card_counter].numero % 13) == 0)
strcpy(the25[card_counter].pips, " A");
if ((the25[card_counter].numero >= 1) && (the25[card_counter].numero <=
13))
{
strcpy(the25[card_counter].suit, "H");
numeric_suit_id entifier = 1;
}
if ((the25[card_counter].numero >= 14) && (the25[card_counter].numero <=
26))
{
strcpy(the25[card_counter].suit, "D");
numeric_suit_id entifier = 2;
}
if ((the25[card_counter].numero >= 27) && (the25[card_counter].numero <=
39))
{
strcpy(the25[card_counter].suit, "C");
numeric_suit_id entifier = 3;
}
if ((the25[card_counter].numero >= 40) && (the25[card_counter].numero <=
52))
{
strcpy(the25[card_counter].suit, "S");
numeric_suit_id entifier = 4;
}

//The next line gives each dealt card a unique numeric identifier which
makes array sorting
//and the identification of poker hands much easier later in the program
.... See card_id.txt
//See card_id_silly.t xt for my original card identification system and the
associated floating point grief.
the25[card_counter].card_id = (100 * ((the25[card_counter].numero % 13) +
1)) + numeric_suit_id entifier;
//This gives a nice four digit I=N=T=E=G=R=A=L identification to the card
.....
//Don't fuck with floats and doubles when you can stick to good old "int".
//Who needs to find out that this "3" doesn't "EQUAL" that "3" because it
differs by 8.88178e-015? Fuck it!!!
//So yeah ... Silly me ... I was comparing "3" to "2.999999999999 99111822"
and expecting a true!!! Dunce!!

if (card_counter == 0)
// If it's the first card on the table then position it on the table at
(5,5)
{
row = 5;
column = 5;
table[row][column] = card_counter + 1;
}
// Otherwise ...
if (card_counter >= 1)
{

//Zeroise the compass_score array for forthcoming processing
for(x=0; x<=7; x++)
{
compass_score[x][0] = 0;
compass_score[x][1] = 0;
compass_score[x][2] = 0;
compass_score[x][3] = 0;
}

orig_row = row;
orig_col = column;

//////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////// P O Z Z I S H L O O P
/////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////// B E G I N
/////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////
// Plough through the eight possible positions to determine where best to
place card
for(pozzish=0; pozzish<=7; pozzish++)
// There are generally eight possible positions for the drawn card to be
placed ... clockwise from "East"
//
// Position 5 Position 6 Position 7
// (r-1,c-1) (r-1,c) (r-1,c+1)
//
// Position 4 Position 0
// (r,c-1) (r,c) (r,c+1)
//
// Position 3 Position 2 Position 1
// (r+1,c-1) (r+1,c) (r+1,c+1)
{
// What you wanna do here is slog through all eight possible positions
....
// With each possible position 0 through 7 do the following ...
// 1 ... Check to see if the card can be placed on the table ...
// (i) And will not replace an already existing card in the table
// (ii) And fits within the 5 x 5 frame reference
// 2 ... If it does then score it vertically & horizontlly
// This is handled by function evaluate_hand(. ..)
// 3 ... When you've done this for all eight positions sort the score
array
// 4 ... Starting with the highest score see if game is completable
// This is handled by function go_figure(...)
// 5 ... Place card in first available position
// 6 ... Update row & column variables accordingly


if ((pozzish == 5) || (pozzish == 6) || (pozzish == 7)) row--;
if ((pozzish == 3) || (pozzish == 2) || (pozzish == 1)) row++;
if ((pozzish == 5) || (pozzish == 4) || (pozzish == 3)) column--;
if ((pozzish == 7) || (pozzish == 0) || (pozzish == 1)) column++;
legal_position = true;

if (table[row][column] != 0) legal_position = false;

if (card_counter >= 5)
{
if ((row < 0) || (row > 10)) legal_position = false;
if ((column < 0) || (column > 10)) legal_position = false;

// Find top, bottom, left & right of table array ... longwinded
top = find_top(table) ;
bottom = find_bottom(tab le);
left = find_left(table );
right = find_right(tabl e);

wide = right - left + 1;
high = bottom - top + 1;

if (((wide == 5) && ((column < left) || (column > right))) || ((high
== 5) && ((row < top) || (row > bottom)))) legal_position = false;

}
if (legal_position )
{
// Evaluate score for vertical hand
//Zeroise the5cards_befor e & after arrays
for(i=0; i<=4; i++)
the5cards_befor e[i] = 0;
for(i=0; i<=4; i++)
the5cards_after[i] = 0;
j = 0;
for(i=0; i<=10; i++)
{
if (table[i][column] != 0)
{
the5cards_befor e[j] = the25[table[i][column]-1].card_id;
j++;
}
}
for(i=0; i<=4; i++)
the5cards_after[i] = the5cards_befor e[i];
//And now add in the current card at the end position
the5cards_after[4] = the25[card_counter].card_id;
compass_score[pozzish][1] =
evaluate_before _unt_after_hand s(the5cards_bef ore, the5cards_after );

// Evaluate score for horizontal hand
//Zeroise the5cards_befor e & after arrays
for(i=0; i<=4; i++)
the5cards_befor e[i] = 0;
for(i=0; i<=4; i++)
the5cards_after[i] = 0;
j = 0;
for(i=0; i<=10; i++)
{
if (table[row][i] != 0)
{
the5cards_befor e[j] = the25[table[row][i]-1].card_id;
j++;
}
}
for(i=0; i<=4; i++)
the5cards_after[i] = the5cards_befor e[i];
//And now add in the current card at the end position
the5cards_after[4] = the25[card_counter].card_id;
compass_score[pozzish][2] =
evaluate_before _unt_after_hand s(the5cards_bef ore, the5cards_after );

// Add 'em together
compass_score[pozzish][3] = compass_score[pozzish][1] +
compass_score[pozzish][2];

}
if (!legal_positio n) compass_score[pozzish][0] = 0;
if (legal_position ) compass_score[pozzish][0] = 1;
// Reset row & column positions
row = orig_row;
column = orig_col;
// Next!!!
}
//////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////// P O Z Z I S H L O O P
/////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////// E N D
///////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////
// Right so here we are .... and we should have an array called
compass_score containing the legal_position,
// horizontal, vertical & total scores for each of the 8 possible card
placement positions (E, SE, S, SW, W, NW, N & NE).
//
// compass_score[n][0] compass_score[n][1] compass_score[n][2]
compass_score[n][3]
// LEGAL VERTICAL HORIZONTAL
TOTAL
// POSITION? SCORE SCORE
SCORE
// 0 1 5 0
5
// 1 0 0 0
0
// 2 1 -30
0 -30
// 3 0 12 13
25
// 4 1 -5 10
5
// 5 1 80 -30
50
// 6 0 -25 30
5
// 7 0 15 10
25
//
// Thus the sorted_compass_ score_array[] array would contain {5, 3, 7, 0,
4, 6, 1, 2} .. or it had better know why not
// So ... we need to create this sorted_compass_ score_array[] and fill it
with said elements ...

// First up, we'll make a copy of just the TOTAL SCORE
for(i=0; i<=7; i++) total_score[i] = compass_score[i][3];

// Now sort this total_score array ... This will fill the array in
ascending order ... thus {-30, 0, 5, 5, 5, 25, 25 ,50}
sort(total_scor e, total_score + the_number_8);
skr = -999;
k = 0;
for(i=7; i>=0; i--)
{
if (skr != total_score[i])
{
for(j=0; j<=7; j++)
{
if (compass_score[j][3] == total_score[i])
{
sorted_compass_ score_array[k] = j;
k++;
}
}
}
skr = total_score[i];
}


//////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////// S L O G L O O P
////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////// B E G I N
/////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////

// Now slog through sorted_compass_ score_array & try and assess if card
is placeable ....
for(slog=0; slog<=7; slog++)
// SLOG BEGIN
{
place_card_here = sorted_compass_ score_array[slog];
if (compass_score[place_card_here][0] == 0) can_do = false;
if (compass_score[place_card_here][0] == 1) can_do = true;

if ((card_counter >= 1) && (card_counter <= 4))
{
// Don't worry about checking if position valid, first 5 cards on
table impossible to bungle ... Stick 'em where you like
}
if (card_counter == 5)
{
// HEREWITH VALIDATION FOR PLACEMENT OF SIXTH CARD

// This sort of checking was originally left to the jolly old
// go_figure routine but the capture of these here 17 individual
// instances of "no_can_do"-ability makes program MUCHO QUICKER.

// As you can see, the placement of the first 6 cards is quite tricky
// and can easily (without validation) lead to a mullered game and
// a dead game with only 6 cards placed on the table is something
// I am really not interested in, not even a little bit. So there.

// I think I've got all valid instances of circumstances whereby
// the placement of the 6th card leads to a dead game but I ... er
// .... do .... ahem .... I do keep finding new ones. The old program
// (the Borland C++ Builder 1.0) only listed 10 of the 17 detailed
here.

// Instance 1 (loft ladder)
// x x 1 2 3 x x
// x x x x 4 5 6
// x x x x x x x
//if ((table[5][6] == 2) && (table[5][7] == 3) && (table[6][7] == 4)
&& (table[6][8] == 5) && (place_card_her e == 0)) can_do = false;

// Instance 2 (loft ladder)
// x x 1 2 4 x x
// x x x x 3 5 6
// x x x x x x x
//if ((table[5][6] == 2) && (table[6][7] == 3) && (table[5][7] == 4)
&& (table[6][8] == 5) && (place_card_her e == 0)) can_do = false;

// Instance 3 (monkey wrench)
// x x 1 2 3 4 x
// x x x x x 5 6
// x x x x x x x
//if ((table[5][6] == 2) && (table[5][7] == 3) && (table[5][8] == 4)
&& (table[6][8] == 5) && (place_card_her e == 0)) can_do = false;

// Instance 4 (monkey wrench)
// x x 1 2 3 4 x
// x x x x x 6 5
// x x x x x x x
//if ((table[5][6] == 2) && (table[5][7] == 3) && (table[5][8] == 4)
&& (table[6][9] == 5) && (place_card_her e == 4)) can_do = false;

// Instance 5 (monkey wrench)
// x x 1 2 3 5 x
// x x x x x 4 6
// x x x x x x x
//if ((table[5][6] == 2) && (table[5][7] == 3) && (table[6][8] == 4)
&& (table[5][8] == 5) && (place_card_her e == 1)) can_do = false;

// Instance 6 (monkey wrench)
// x x 1 2 3 6 x
// x x x x x 4 5
// x x x x x x x
//if ((table[5][6] == 2) && (table[5][7] == 3) && (table[6][8] == 4)
&& (table[6][9] == 5) && (place_card_her e == 5)) can_do = false;

// Instance 7 (monkey wrench)
// x x 1 2 x x x
// x x x 3 4 5 6
// x x x x x x x
//if ((table[5][6] == 2) && (table[6][6] == 3) && (table[6][7] == 4)
&& (table[6][8] == 5) && (place_card_her e == 0)) can_do = false;

// Instance 8 (monkey wrench)
// x x x 1 2 x x
// 6 5 4 3 x x x
// x x x x x x x
//if ((table[5][6] == 2) && (table[6][5] == 3) && (table[6][4] == 4)
&& (table[6][3] == 5) && (place_card_her e == 4)) can_do = false;

// Instance 9 (monkey wrench)
// x 1 x x
// x 3 2 x
// x x 4 x
// x x 5 x
// x x 6 x
// x x x x
//if ((table[6][6] == 2) && (table[6][5] == 3) && (table[7][6] == 4)
&& (table[8][6] == 5) && (place_card_her e == 2)) can_do = false;

// Instance 10 (monkey wrench)
// 6 5 4 1 x x
// x x x 3 2 x
// x x x x x x
//if ((table[6][6] == 2) && (table[6][5] == 3) && (table[5][4] == 4)
&& (table[5][3] == 5) && (place_card_her e == 4)) can_do = false;

// Instance 11 (monkey wrench)
// x 1 3 x x x
// x x 2 4 5 6
// x x x x x x
//if ((table[6][6] == 2) && (table[5][6] == 3) && (table[6][7] == 4)
&& (table[6][8] == 5) && (place_card_her e == 0)) can_do = false;

// Instance 12 (buttercup)
// x 1 x x x x
// x x 2 x x x
// x x x 3 x x
// x x x x 4 5
// x x x x 6 x
// x x x x x x
//if ((table[6][6] == 2) && (table[7][7] == 3) && (table[8][8] == 4)
&& (table[8][9] == 5) && (place_card_her e == 3)) can_do = false;

// Instance 13 (buttercup)
// x 1 x x x x
// x x 2 x x x
// x x x 3 x x
// x x x x 4 6
// x x x x 5 x
// x x x x x x
//if ((table[6][6] == 2) && (table[7][7] == 3) && (table[8][8] == 4)
&& (table[9][8] == 5) && (place_card_her e == 7)) can_do = false;

// Instance 14 (butterfly wings)
// x x x 1 x x
// x x x 3 2 x
// x 6 4 x x x
// x x 5 x x x
// x x x x x x
//if ((table[6][6] == 2) && (table[6][5] == 3) && (table[7][4] == 4)
&& (table[8][4] == 5) && (place_card_her e == 5)) can_do = false;

// Instance 15 (butterfly wings)
// x x x 1 x x
// x x x 3 2 x
// x 5 4 x x x
// x x 6 x x x
// x x x x x x
//if ((table[6][6] == 2) && (table[6][5] == 3) && (table[7][4] == 4)
&& (table[7][3] == 5) && (place_card_her e == 1)) can_do = false;

// Instance 16 (butterfly wings)
// x x x x x x
// x x x 5 x x
// x x x 4 6 x
// x 1 3 x x x
// x x 2 x x x
//if ((table[6][6] == 2) && (table[5][6] == 3) && (table[4][7] == 4)
&& (table[3][7] == 5) && (place_card_her e == 1)) can_do = false;

// Instance 17 (butterfly wings)
// x x x x x x
// x x x 6 x x
// x x x 4 5 x
// x 1 3 x x x
// x x 2 x x x
//if ((table[6][6] == 2) && (table[5][6] == 3) && (table[4][7] == 4)
&& (table[4][8] == 5) && (place_card_her e == 5)) can_do = false;

// And that should be it ...
// Because of the way cards are placed (E-SE-S-SW-W-NW-N-NE) the only
two possible starts are ...
// x x x x
// x 1 2 x
// x x x x
// ... as above if the computer likes the match between 1st and 2nd
card (ie a pair, same suit, or has straight potential) or ...
// x x x x
// x 1 x x
// x x 2 x
// x x x x
// ... as above if the computer dislikes the match between 1st and
2nd card (ie the two cards are no good for nothing) ...

// Above block restructured ... This will save a couple of picoseconds per
game ...
if (table[5][6] == 2)
{
if (table[5][7] == 3)
{
if ((table[6][7] == 4) && (table[6][8] == 5) && (place_card_her e == 0))
can_do = false; // Instance 1
if (table[5][8] == 4)
{
if ((table[6][8] == 5) && (place_card_her e == 0)) can_do = false; //
Instance 3
if ((table[6][9] == 5) && (place_card_her e == 4)) can_do = false; //
Instance 4
}
if (table[6][8] == 4)
{
if ((table[5][8] == 5) && (place_card_her e == 1)) can_do = false; //
Instance 5
if ((table[6][9] == 5) && (place_card_her e == 5)) can_do = false; //
Instance 6
}
}
if ((table[6][8] == 5) && (place_card_her e == 0))
{
if ((table[6][7] == 3) && (table[5][7] == 4)) can_do = false; //
Instance 2
if ((table[6][6] == 3) && (table[6][7] == 4)) can_do = false; //
Instance 7
}
if ((table[6][5] == 3) && (table[6][4] == 4) && (table[6][3] == 5) &&
(place_card_her e == 4)) can_do = false; // Instance 8
}
else if (table[6][6] == 2)
{
if (table[6][5] == 3)
{
if (table[7][4] == 4)
{
if ((table[8][4] == 5) && (place_card_her e == 5)) can_do = false; //
Instance 14
if ((table[7][3] == 5) && (place_card_her e == 1)) can_do = false; //
Instance 15
}
if ((table[7][6] == 4) && (table[8][6] == 5) && (place_card_her e == 2))
can_do = false; // Instance 9
if ((table[5][4] == 4) && (table[5][3] == 5) && (place_card_her e == 4))
can_do = false; // Instance 10
}
if ((table[7][7] == 3) && (table[8][8] == 4))
{
if ((table[8][9] == 5) && (place_card_her e == 3)) can_do = false; //
Instance 12
if ((table[9][8] == 5) && (place_card_her e == 7)) can_do = false; //
Instance 13
}
if (table[5][6] == 3)
{
if (table[4][7] == 4)
{
if ((table[3][7] == 5) && (place_card_her e == 1)) can_do = false; //
Instance 16
if ((table[4][8] == 5) && (place_card_her e == 5)) can_do = false; //
Instance 17
}
if ((table[6][7] == 4) && (table[6][8] == 5) && (place_card_her e == 0))
can_do = false; // Instance 11
}
}
}
if ((card_counter >= 6) && (card_counter <= 23))
{

if ((compass_score[place_card_here][0]) == 1)
// Legal position
{
// Now it's time to GO FIGURE

//////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////// T H E G O F I G U R E R O U T I N E
///////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////// B E G I N
//////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////
{

// Try and figure out if the game is completable with card at this position
// First five cards on table a doddle ... no validation required
// Sixth card validation handled elsewhere
// HEREWITH validation for 7th to 24th cards (card_counter = 6 to 23)

v_row = row;
v_column = column;

if ((place_card_he re == 5) || (place_card_her e == 6) || (place_card_her e ==
7)) v_row--;
if ((place_card_he re == 3) || (place_card_her e == 2) || (place_card_her e ==
1)) v_row++;
if ((place_card_he re == 5) || (place_card_her e == 4) || (place_card_her e ==
3)) v_column--;
if ((place_card_he re == 7) || (place_card_her e == 0) || (place_card_her e ==
1)) v_column++;
// Make a copy of the "table" array
for (i=0; i<=10; i++)
for(j=0; j<=10; j++)
copy_of_table[i][j] = table[i][j];

// Reset variables for the GO FIGURISATION validation
new_card = true;
pozzy = 0;
can_do = false;
completable = false;
resolved_it = false;
backstop = card_counter;
current_card = backstop + 1;
card_placeable = false;
no_walls = true;

// Now place card on table
copy_of_table[v_row][v_column] = current_card;
// "copy_of_ta ble" array now contains the card previously held in the hand
// Now we need to see if game can be completed

///////////////////////////////////////////////////////////////////////////////////////////////////
/////////////// R O U T I N E T O C H E C K F O R W A L L S
///////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////// B E G I N
///////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////
////
////
//// * * x x
////
//// x x x x x
x x x ////
//// x x x x x x x x
x x ////
//// x x x x x x x x x x *
x x x x * ////
//// x x x x x x x x x x
x ////
////
////
//// For example: "Impassable vertical walls" "Impassable
horizontal walls" ////
//// * = card we wanna place
////
////
////
///////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////
// Find top, bottom, left & right of table array ... longwinded
q_top = find_top(copy_o f_table);
q_bottom = find_bottom(cop y_of_table);
q_left = find_left(copy_ of_table);
q_right = find_right(copy _of_table);

wyde = q_right - q_left + 1;
hygh = q_bottom - q_top + 1;

if ((hygh == 5) || (wyde == 5)) // Simple as that
{
// Perform routines to look for "impassable walls"

// 0 = There are no cards in this column
// 1 = A vertical wall is found in this column
// 2 = Cards are known to be in this column but there is no
vertical wall to be found here
no_walls = true;
if (hygh == 5) // Check for impassable (ie 5 cards high) vertical
"walls"
{
for(i=0; i<=4; i++)
vertical_wall[i] = 0;
for(y=q_left; y<=q_right; y++)
{
scoot = y - q_left;

vertical_wall[scoot] = 1; // Assume it's a "wall"
for(x=q_top; x<=(q_top + 4); x++)
if (copy_of_table[x][y] == 0) vertical_wall[scoot] = 2; //
A-ha! But it isn't a "wall"!
}
// Look for 5 card high columns sandwiched by incomplete columns
@ positions 1, 2 & 3 ...
if ((vertical_wall[1] == 1) && (vertical_wall[0] == 2) &&
((vertical_wall[2] == 2) || (vertical_wall[3] == 2) || (vertical_wall[4] ==
2))) no_walls = false;
if ((vertical_wall[2] == 1) && ((vertical_wall[0] == 2) ||
(vertical_wall[1] == 2)) && ((vertical_wall[3] == 2) || (vertical_wall[4] ==
2))) no_walls = false;
if ((vertical_wall[3] == 1) && (vertical_wall[4] == 2) &&
((vertical_wall[0] == 2) || (vertical_wall[1] == 2) || (vertical_wall[2] ==
2))) no_walls = false;
}
if ((no_walls) && (wyde == 5)) // Check for impassable (ie 5
cards wide) horizontal "walls"
{
for(i=0; i<=4; i++)
horizontal_wall[i] = 0;
for(x=q_top; x<=q_bottom; x++)
{
scoot = x - q_top;

horizontal_wall[scoot] = 1; // Assume it's a "wall"
for(y=q_left; y<=(q_left + 4); y++)
if (copy_of_table[x][y] == 0) horizontal_wall[scoot] = 2;
// A-ha! But it isn't a "wall"!
}
// Look for 5 card wide rows sandwiched by incomplete rows @
positions 1, 2 & 3 ...
if ((horizontal_wa ll[1] == 1) && (horizontal_wal l[0] == 2) &&
((horizontal_wa ll[2] == 2) || (horizontal_wal l[3] == 2) ||
(horizontal_wal l[4] == 2))) no_walls = false;
if ((horizontal_wa ll[2] == 1) && ((horizontal_wa ll[0] == 2) ||
(horizontal_wal l[1] == 2)) && ((horizontal_wa ll[3] == 2) ||
(horizontal_wal l[4] == 2))) no_walls = false;
if ((horizontal_wa ll[3] == 1) && (horizontal_wal l[4] == 2) &&
((horizontal_wa ll[0] == 2) || (horizontal_wal l[1] == 2) ||
(horizontal_wal l[2] == 2))) no_walls = false;
}
}
// I have found at least one VERY VERY NASTY and VERY VERY UNPASSABLE
W-A-L-L!!!! so "NO CAN DO"
if (!no_walls) can_do = false;
///////////////////////////////////////////////////////////////////////////////////////////////////
/////////////// R O U T I N E T O C H E C K F O R W A L L S
///////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////// E N D
/////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////

if (no_walls)
// Alright, so there are no vertical or horizontal "walls" so we'll have to
use some SLOGic to establish if game completable
{

// Zeroise crack array
for (i=0; i<=25; i++)
{
crack[i][0] = 0;
crack[i][1] = 0;
crack[i][2] = 0;
}

// And stick position variables to crack[] array
// This crack array is a sort of tracer, a document of card placements
// It might look like this ... but then again it might not
//
// It's a sort of tracer like I said, what more can I tell you?
//
// 0 0 0
// 0 0 0
// 0 0 0
// 0 0 0
// 0 0 0
// 0 0 0
// 0 0 0
// 0 0 0
// 1 5 7
// 3 5 6
// 6 4 6
// 0 3 5 etc etc

crack[current_card][0] = place_card_here ;
crack[current_card][1] = v_row;
crack[current_card][2] = v_column;
// Begin W-H-I-L-E loop
do
{
if (new_card)
{
save_row = v_row;
save_column = v_column;
}
new_card = false;
card_placeable = true;

//WE NOW NEED NEED TO CHECK TO SEE IF THE CARD IS PLACE-ABLE AT pozzy AND
IF SO "card_place able = true;" ELSE "card_place able = false;"
// card_placeable = check_position( true, pozzy, p_rowski,
p_columnski);
// ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^
^ ^
//THAT's WHAT THIS (now defunct) FUNCTION USED TO
DO!!!!!!!!!!!!! !!!!!!!!!!!!!!! !!!!!!!!!!!! THAT'S WHY IT DON'T WORK!!!!!!
//THIS IS THE VITAL BIT OF machinery THAT IS STOPPING IT ALL FROM WORKING

if ((pozzy == 5) || (pozzy == 6) || (pozzy == 7)) v_row--;
if ((pozzy == 3) || (pozzy == 2) || (pozzy == 1)) v_row++;
if ((pozzy == 5) || (pozzy == 4) || (pozzy == 3)) v_column--;
if ((pozzy == 7) || (pozzy == 0) || (pozzy == 1)) v_column++;

// Find top, bottom, left & right of table array ... longwinded
q_top = find_top(copy_o f_table);
q_bottom = find_bottom(cop y_of_table);
q_left = find_left(copy_ of_table);
q_right = find_right(copy _of_table);

wyde = q_right - q_left + 1;
hygh = q_bottom - q_top + 1;

if ((v_row < 0) || (v_row > 10) || (v_column < 0) || (v_column > 10))
card_placeable = false;
if (copy_of_table[v_row][v_column] != 0) card_placeable = false;
if (((wyde == 5) && ((v_column < q_left) || (v_column > q_right))) ||
((hygh == 5) && ((v_row < q_top) || (v_row > q_bottom)))) card_placeable =
false;

//WE NOW NEED NEED TO CHECK TO SEE IF THE CARD IS PLACE-ABLE AT pozzy AND IF
SO "card_place able = true;" ELSE "card_place able = false;"
// card_placeable = check_position( true, pozzy, p_rowski,
p_columnski);
// ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^
^
//THAT's WHAT THIS (now defunct) FUNCTION USED TO
DO!!!!!!!!!!!!! !!!!!!!!!!!!!!! !!!!!!!!!!!! THAT'S WHY IT DON'T WORK!!!!!!
//THIS IS THE VITAL BIT OF machinery THAT IS STOPPING IT ALL FROM WORKING

//Ah shaddup ... I've only gone and fecking cracked it!!!

if (card_placeable && (pozzy <= 7))
{
// Extra checking ... Never a bad idea
// if (((v_row >= crack[current_card][1] - 1) && (v_row <=
crack[current_card][1] + 1))
// && ((v_column >= crack[current_card][2] - 1) && (v_column
<= crack[current_card][2] + 1)))
// {
current_card++;
crack[current_card][0] = pozzy;
crack[current_card][1] = v_row;
crack[current_card][2] = v_column;
copy_of_table[v_row][v_column] = current_card;
new_card = true;
pozzy = 0;
// }
if (current_card == 25)
{
completable = true;
resolved_it = true;
}
}
else
{
v_row = save_row;
v_column = save_column;
pozzy++;
if (pozzy == 8) // Slogged through all eight positions and found
none legal. We now need to backup one level ...
{
do
{
// Backup one card ... And try different pozzish
copy_of_table[save_row][save_column] = 0;
// If the following pozzy is 8 then backup again
pozzy = crack[current_card][0] + 1;
// Erase values from crack[]
crack[current_card][0] = 0;
crack[current_card][1] = 0;
crack[current_card][2] = 0;
current_card--;
if (current_card == backstop)
{
resolved_it = true;
completable = false;
}
save_row = crack[current_card][1];
save_column = crack[current_card][2];
v_row = crack[current_card][1];
v_column = crack[current_card][2];
}
while (pozzy == 8);
}
}
}
while (!resolved_it);
// End W-H-I-L-E loop
}
if (completable) can_do = true;
}
//////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////// T H E G O F I G U R E R O U T I N E
///////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////// E N D
////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////
}
}
if (can_do)
{

if ((place_card_he re == 5) || (place_card_her e == 6) ||
(place_card_her e == 7)) row--;
if ((place_card_he re == 3) || (place_card_her e == 2) ||
(place_card_her e == 1)) row++;
if ((place_card_he re == 5) || (place_card_her e == 4) ||
(place_card_her e == 3)) column--;
if ((place_card_he re == 7) || (place_card_her e == 0) ||
(place_card_her e == 1)) column++;

table[row][column] = card_counter + 1;
break; // Exit the FOR
loop
}
if (slog == 7 && !can_do)
{
cout<<"Oh dear. I appear to have fucked up (like the cunt I am). I'm
very sorry."<<endl;
phile<<"I'm afraid I've fucked this one up. Don't blame me though, I
only do what I'm told."<<endl;
exit;
}

}
//////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////// S L O G L O O P
////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////// E N D
////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////
}

}
//////////////////////////////////////////////////////////////////////////////////////////////////
///////////////// W R I T E R E S U L T S F I L E T O D I S
K ////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////// B E G I N
//////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////


// Write table to file BEGIN


top = find_top(table) ;
left = find_left(table );
// According to Hoyle ...
//
// One Pair - 1
// Two Pair - 3
// Flush - 5
// Threes - 6
// Full - 10
// Straight - 12
// Fours - 16
// Straight Flush - 30


phile<<"Game number - "<<current_game <<endl<<"====== =========";
if (current_game >= 10) phile<<"=";
if (current_game >= 100) phile<<"=";
if (current_game >= 100) phile<<"=";
if (current_game >= 1000) phile<<"=";
if (current_game >= 10000) phile<<"=";
phile<<endl<<en dl;

for(i=0; i<=4; i++)
{

for(j=0; j<=4; j++)
{

k = table[i+top][j+left] - 1;
phile<<table[i+top][j+left];
if (k >= 0)
{
phile<<"-";
if ((table[i+top][j+left] >= 1) && (table[i+top][j+left] <= 9)) phile
<< " ";
phile<<the25[k].pips<<the25[k].suit<<" ";
}
if (j == 4)
// List score for horizontal hand ...
{
for(x=0; x<=4; x++)
horizontal_hand[x] = the25[table[top+i][left+x]-1].card_id;
identum = identify_hand(h orizontal_hand) ;
if (identum == 31)
{
horizontal_scor e[i] = 0;
phile<<" ---- shite";
bum_hands++;
}
if (identum == 32)
{
horizontal_scor e[i] = 1;
phile<<" ---- 1pair";
one_pairs++;
}
if (identum == 33)
{
horizontal_scor e[i] = 3;
phile<<" ---- 2pair";
two_pairs++;
}
if (identum == 34)
{
horizontal_scor e[i] = 5;
phile<<" ---- flush";
flushes++;
}
if (identum == 35)
{
horizontal_scor e[i] = 6;
phile<<" ---- prial";
prials++;
}
if (identum == 36)
{
horizontal_scor e[i] = 10;
phile<<" ---- fulla";
full_hands++;
}
if (identum == 37)
{
horizontal_scor e[i] = 12;
phile<<" ---- run";
straights++;
}
if (identum == 38)
{
horizontal_scor e[i] = 16;
phile<<" ---- fours";
fours++;
}
if (identum == 39)
{
horizontal_scor e[i] = 30;
phile<<" ---- S F";
straight_flushe s++;
}
}

}
phile<<endl<<en dl;
}

// List scores for vertical hands ...
for(i=0; i<=4; i++)
{
for(j=0; j<=4; j++)
vertical_hand[j] = the25[table[top+j][left+i]-1].card_id;
identum = identify_hand(v ertical_hand);
if (i == 0) phile<<" | | | | |
"<<endl<<" | | | | | "<<endl;
if (identum == 31)
{
vertical_score[i] = 0;
phile<<" shite ";
bum_hands++;
}
if (identum == 32)
{
vertical_score[i] = 1;
phile<<" 1pair ";
one_pairs++;
}
if (identum == 33)
{
vertical_score[i] = 3;
phile<<" 2pair ";
two_pairs++;
}
if (identum == 34)
{
vertical_score[i] = 5;
phile<<" flush ";
flushes++;
}
if (identum == 35)
{
vertical_score[i] = 6;
phile<<" prial ";
prials++;
}
if (identum == 36)
{
vertical_score[i] = 10;
phile<<" fulla ";
full_hands++;
}
if (identum == 37)
{
vertical_score[i] = 12;
phile<<" run ";
straights++;
}
if (identum == 38)
{
vertical_score[i] = 16;
phile<<" fours ";
fours++;
}
if (identum == 39)
{
vertical_score[i] = 30;
phile<<" S F ";
straight_flushe s++;
}
}

score_for_this_ game = 0;
for(i=0; i<=4; i++)
score_for_this_ game = score_for_this_ game + vertical_score[i] +
horizontal_scor e[i];

if (current_game == 1)
{
best_score_ever = score_for_this_ game;
worse_score_eve r = score_for_this_ game;
}
else if (current_game > 2)
{
if (score_for_this _game > best_score_ever )
{
best_score_ever = score_for_this_ game;
best_game_ever = current_game;
}
if (score_for_this _game < worse_score_eve r)
{
worse_score_eve r = score_for_this_ game;
worst_game_ever = current_game;
}
}

score_tally = score_tally + score_for_this_ game;

phile<<" SCORE - "<<score_for_th is_game<<endl<< endl<<endl<<end l;

// Write table to file END

// END nogtp current_game loop
}

average_score_p er_game = (float)score_ta lly/nogtp;
anpg_bum_hands = (float) bum_hands/nogtp;
anpg_one_pairs = (float) one_pairs/nogtp;
anpg_two_pairs = (float) two_pairs/nogtp;
anpg_flushes = (float) flushes/nogtp;
anpg_prials = (float) prials/nogtp;
anpg_full_hands = (float) full_hands/nogtp;
anpg_straights = (float) straights/nogtp;
anpg_fours = (float) fours/nogtp;
anpg_straight_f lushes = (float) straight_flushe s/nogtp;

stop_time = time(NULL);
time_taken = stop_time - start_time;
average_time_pe r_game = (float) time_taken/nogtp;

phile<<endl<<en dl<<endl<<endl;
phile<<"Number of Games played ............... ........... "<<nogtp<<e ndl;
phile<<"Total time taken ............... ............... .. "<<time_taken<< "
seconds"<<endl;
phile<<"Average time per game ............... ............
"<<average_time _per_game<<" seconds"<<endl< <endl;

phile<<"AVerage S-C-O-R-E per game ............... .......
"<<average_scor e_per_game<<end l;
phile<<"Worst Game Score ............... ............... ..
"<<worse_score_ ever<<" (Game "<<worst_game_e ver<<")"<<endl;
phile<<"Best Game Score ............... ............... ...
"<<best_score_e ver<<" (Game "<<best_game_ev er<<")"<<endl<< endl;
phile<<"Average number of Bum Hands per game ............
"<<anpg_bum_han ds<<endl;
phile<<"Average number of One Pairs per game ............
"<<anpg_one_pai rs<<endl;
phile<<"Average number of Two Pairs per game ............
"<<anpg_two_pai rs<<endl;
phile<<"Average number of Flushes per game ..............
"<<anpg_flushes <<endl;
phile<<"Average number of Prials per game ...............
"<<anpg_prials< <endl;
phile<<"Average number of Full Hands per game ...........
"<<anpg_full_ha nds<<endl;
phile<<"Average number of Straights per game ............
"<<anpg_straigh ts<<endl;
phile<<"Average number of Fours per game ............... .
"<<anpg_fours<< endl;
phile<<"Average number of Straight Flushes per game .....
"<<anpg_straigh t_flushes<<endl <<endl<<endl;

phile<<"Thank you for playing Mister Divvy Bollocks' Poker Patience, have a
nice day.";

phile.close();

//////////////////////////////////////////////////////////////////////////////////////////////////
///////////////// W R I T E R E S U L T S F I L E T O D I S
K ////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////// E N D
////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////

}


Mar 30 '06 #1
1 1473

namespace Troll
{
...

};
Mar 30 '06 #2

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

0
1007
by: Andy Leszczynski | last post by:
Python 2.3, one of the latest Twisted version: I noted that under Linux there is not way to Control-C the reactor loop. After digging a little I found that following change helpes: # diff base.py{,.ori} > 302d301 < print "1",sysEvtTriggers 305d303
1
5598
by: Martin | last post by:
I got a core from my client but i am not able to find out where it crashed. I got the following: From my experience, when i got lots of warning which complains about the path mismatch.. I can use "pathmap" to tell dbx the new path of the libraries and then use "where" to find out where it crashed. however, this time, the DBX itself crashed. I can no way to use pathmap. Can any guru kindly tell me what i can do to debug the core? How can...
1
3513
by: Martin | last post by:
I use dbx and i got the following error: Reading GL_CliConnMgr core file header read successfully Reading ld.so.1 dbx: core file read error: address 0xff3e6000 not available dbx: core file read error: address 0xff3e70a0 not available dbx: warning: could not initialize librtld_db.so.1 -- trying libDP_rtld_db.so Make sure this is the same version of Solaris where the core dump
10
4026
by: ken | last post by:
hello, i'm writing a c program on a linux system. i'm debugging a segmentation fault but i don't want it to dump a core file because the memory footprint of the program is over 300Mb and i don't need it to generate a 300Mb file every time I add a new printf statement to debug the code. can i do something to prevent it from dumping the core file even when it seg faults? (is this a unix/linux thing, or a c thing?) thanks!
2
2719
by: Paul Aspinall | last post by:
Hi Has anyone any experiences of using .NET Reactor, in order to protect their assemblies?? http://www.eziriz.com/ Any opinions / experiences appreciated. Thanks
2
2688
by: webwarrior | last post by:
Hi, Is there a reason why we have to pay more for licensing for a different kind of processor? Why are we not charged for the Hyperthreading on some processors also. If Oracle is really conserned about the low end business market (small and medium), then they should drop their attitude on Dual Core processors.
1
4310
by: maxime_phan | last post by:
hello, everyone I use twisted 1.3 in my python application. in my program, I have one server and on client running at same time (so 2 reactor.run(installSignalHandlers=0) ) the client run in one thread and the server in an other thread ( reactor.callInThread(self.client... , reactor.callInThread(self.server .....) when I catch "escape" button, I make a reactor.stop() but it doesn't seem to work and quit, and the application freeze. does...
11
2673
by: Toast | last post by:
First of all... I'm very new to all of this and really do not know anything more than how to "snoop" and try to see what things might be causing problems. I do not know how to program. Everything here is not in a verbatim or verbose format. I think I did well enough though, considering I don't even know how to explain these things. All specs are at end of this post. Ok... the issue I have smtp set up properly for outgoing "fake" and I...
10
1963
by: Michele Simionato | last post by:
I have always been curious about how people implement mainloops (or, in Twisted terminology, reactors). So I sit down and I wrote the following simple implementation: import itertools class SimpleReactor(object): DELAY = 0.001 # seconds
0
9706
marktang
by: marktang | last post by:
ONU (Optical Network Unit) is one of the key components for providing high-speed Internet services. Its primary function is to act as an endpoint device located at the user's premises. However, people are often confused as to whether an ONU can Work As a Router. In this blog post, we’ll explore What is ONU, What Is Router, ONU & Router’s main usage, and What is the difference between ONU and Router. Let’s take a closer look ! Part I. Meaning of...
0
9579
by: Hystou | last post by:
Most computers default to English, but sometimes we require a different language, especially when relocating. Forgot to request a specific language before your computer shipped? No problem! You can effortlessly switch the default language on Windows 10 without reinstalling. I'll walk you through it. First, let's disable language synchronization. With a Microsoft account, language settings sync across devices. To prevent any complications,...
0
10332
jinu1996
by: jinu1996 | last post by:
In today's digital age, having a compelling online presence is paramount for businesses aiming to thrive in a competitive landscape. At the heart of this digital strategy lies an intricately woven tapestry of website design and digital marketing. It's not merely about having a website; it's about crafting an immersive digital experience that captivates audiences and drives business growth. The Art of Business Website Design Your website is...
1
10321
by: Hystou | last post by:
Overview: Windows 11 and 10 have less user interface control over operating system update behaviour than previous versions of Windows. In Windows 11 and 10, there is no way to turn off the Windows Update option using the Control Panel or Settings app; it automatically checks for updates and installs any it finds, whether you like it or not. For most users, this new feature is actually very convenient. If you want to control the update process,...
0
9152
agi2029
by: agi2029 | last post by:
Let's talk about the concept of autonomous AI software engineers and no-code agents. These AIs are designed to manage the entire lifecycle of a software development project—planning, coding, testing, and deployment—without human intervention. Imagine an AI that can take a project description, break it down, write the code, debug it, and then launch it, all on its own.... Now, this would greatly impact the work of software developers. The idea...
0
6853
by: conductexam | last post by:
I have .net C# application in which I am extracting data from word file and save it in database particularly. To store word all data as it is I am converting the whole word file firstly in HTML and then checking html paragraph one by one. At the time of converting from word file to html my equations which are in the word document file was convert into image. Globals.ThisAddIn.Application.ActiveDocument.Select();...
1
4300
by: 6302768590 | last post by:
Hai team i want code for transfer the data from one system to another through IP address by using C# our system has to for every 5mins then we have to update the data what the data is updated we have to send another system
2
3820
muto222
by: muto222 | last post by:
How can i add a mobile payment intergratation into php mysql website.
3
2991
bsmnconsultancy
by: bsmnconsultancy | last post by:
In today's digital era, a well-designed website is crucial for businesses looking to succeed. Whether you're a small business owner or a large corporation in Toronto, having a strong online presence can significantly impact your brand's success. BSMN Consultancy, a leader in Website Development in Toronto offers valuable insights into creating effective websites that not only look great but also perform exceptionally well. In this comprehensive...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.