From d5908bf8a1b9ac1c53c84eece05305997aec468f Mon Sep 17 00:00:00 2001 From: doitux Date: Thu, 22 Mar 2007 23:19:16 +0000 Subject: [PATCH] engine 0.4 rev6 (flop part 3) --- src/engine/local_engine/localplayer.cpp | 353 ++++++++++++------------ src/engine/local_engine/localplayer.h | 2 +- 2 files changed, 181 insertions(+), 174 deletions(-) diff --git a/src/engine/local_engine/localplayer.cpp b/src/engine/local_engine/localplayer.cpp index a2fcbd5a..24cbe7eb 100755 --- a/src/engine/local_engine/localplayer.cpp +++ b/src/engine/local_engine/localplayer.cpp @@ -686,7 +686,7 @@ void LocalPlayer::flopEngine() { cout << myID << ": "; - flopCardsValue(tempArray,info); + flopCardsValue(tempArray); // aktive Situation --> check / bet if(actualHand->getFlop()->getHighestSet() == 0) { @@ -1309,13 +1309,16 @@ void LocalPlayer::riverEngine() { -int LocalPlayer::flopCardsValue(int* cards, int* info) { +int LocalPlayer::flopCardsValue(int* cards) { int array[5][3]; int j1, j2, j3, j4, k1, k2, ktemp[3]; - int tempChance = 0; + int temp = 0; + int temp1 = 0; + int temp2 = 0; + int temp2Array[2]; + int tempValue; bool breakLoop = 0; - info[3] = 0; // Kartenwerte umwandeln (z.B. [ 11 (Karo K�ig) -> 0 11 ] oder [ 31 (Pik 7) -> 2 5 ] ) for(j1=0; j1<5; j1++) { @@ -1363,28 +1366,19 @@ int LocalPlayer::flopCardsValue(int* cards, int* info) { if(array[0][0] == array[1][0] && array[0][0] == array[2][0] && array[0][0] == array[3][0] && array[0][0] == array[4][0]) { // Straight Flush? if(array[0][1]-4 == array[4][1]) { - info[0] = 8; - info[1] = array[0][1]; - info[3] = 2; - cout << "Straight Flush " << info[3] << endl; - return 0; + cout << "Straight Flush"; + return 80000; } else { // Straight Flush Ausnahme: 5-4-3-2-A if(array[0][1]==12 && array[1][1]==3 && array[2][1]==2 && array[3][1]==1 && array[4][1]==0) { - info[0] = 8; - info[1] = 3; - info[3] = 2; - cout << "Straight Flush Ass unten " << info[3] << endl; - return 0; + cout << "Straight Flush Ass unten"; + return 80000; } // Flush else { - info[0] = 5; - info[1] = array[j1][1]; - info[3] = 2; - cout << "Flush " << info[3] << endl; - return 0; + cout << "Flush"; + return 80000; } } } @@ -1397,51 +1391,74 @@ int LocalPlayer::flopCardsValue(int* cards, int* info) { if(array[j1][1]-3 == array[j1+3][1]) { // Strassenansatz am Rand? if(array[j1][1] == 12) { - tempChance += 45; + cout << "zusammenhaengender Straight-Flush-Draw mit Ass high"; for(j2=0; j2<4; j2++) { - if(array[j1+j2][2] <= 1) info[3]++; + if(array[j1+j2][2] <= 1) temp++; } - cout << "zusammenhaengender Straight-Flush-Draw mit Ass high " << info[3] << "\t"; - breakLoop = 1; + return (70012 + temp*100); } // Strassenansatz in der Mitte else { - tempChance += 54; + cout << "zusammenhaengender Straight-Flush-Draw in der Mitte"; for(j2=0; j2<4; j2++) { - if(array[j1+j2][2] <= 1) info[3]++; + if(array[j1+j2][2] <= 1) temp++; } - cout << "zusammenhaengender Straight-Flush-Draw in der Mitte " << info[3] << "\t"; - breakLoop = 1; + return (70000 + temp*100 + array[j1][1]); } } else { // Bauchschuss ? if(array[j1][1]-4 == array[j1+3][1]) { - tempChance += 45; + cout << "Straight-Flush-Bauchschuss"; for(j2=0; j2<4; j2++) { - if(array[j1+j2][2] <= 1) info[3]++; + if(array[j1+j2][2] <= 1) temp++; } - cout << "Straight-Flush-Bauchschuss " << info[3] << "\t"; - breakLoop = 1; + return (71000 + temp*100 + array[j1][1]); } else { // Test auf Straight-Flush-Ausnahme 5-4-3-2-A if(array[j1][1] == 12 && (array[j1+1][1]<=3 || (array[j1+2][1]<=3 && array[j1][0]==array[j1+4][0]))) { - tempChance += 45; + cout << "Straight-Flush-Draw Ass unten"; for(j2=0; j2<4; j2++) { - if(array[j1+j2][2] <= 1) info[3]++; + if(array[j1+j2][2] <= 1) temp++; } - cout << "Straight-Flush-Draw Ass unten " << info[3] << "\t"; - breakLoop = 1; + return (71012 + temp*100); } // Flush Draw else { - tempChance += 35; + cout << "Flush Draw"; for(j2=0; j2<4; j2++) { - if(array[j1+j2][2] <= 1) info[3]++; + if(array[j1+j2][2] <= 1) { + temp2Array[temp] = array[j1+j2][1]; + temp++; + } + } + if(temp==2) { + for(j2=0; j2<4; j2++) { + if(temp2Array[1] > array[j1+j2][1]) temp1++; + if(temp2Array[0] > array[j1+j2][1]) temp2++; + } + return (60000 + temp1*1000 + temp2*100 + array[j1][1]); + } else { + + // 2.Stelle + for(j2=0; j2<4; j2++) { + if(j1==0) { + if(array[4][1] < array[j1+j2][1]) temp1++; + } else { + if(array[0][1] < array[j1+j2][1]) temp1++; + } + } + if(temp1 >= 2) temp1 = 1; + if(temp1 == 4) temp1 = 2; + + // 3.Stelle + for(j2=0; j2<4; j2++) { + if(temp2Array[0] < array[j1+j2][1]) temp2++; + } + tempValue = (50000 + temp1*1000 + temp2*100 + temp2Array[0]); + breakLoop = 1; } - cout << "Flush Draw " << info[3] << "\t"; - breakLoop = 1; } } } @@ -1468,13 +1485,8 @@ int LocalPlayer::flopCardsValue(int* cards, int* info) { // auf Vierling testen for(j1=0; j1<2; j1++) { if(array[j1][1] == array[j1+1][1] && array[j1][1] == array[j1+2][1] && array[j1][1] == array[j1+3][1]) { - info[0] = 7; - info[1] = array[j1][1]; - for(j2=0; j2<4; j2++) { - if(array[j1+j2][2] <= 1) info[3]++; - } - cout << "Vierling " << info[3] << endl; - return 0; + cout << "Vierling "; + return 80000; } } @@ -1482,140 +1494,135 @@ int LocalPlayer::flopCardsValue(int* cards, int* info) { // auf Straight und Full House testen // Straight if((array[0][1]-1 == array[1][1] || array[0][1]-9 == array[1][1] ) && array[1][1]-1 == array[2][1] && array[2][1]-1 == array[3][1] && array[3][1]-1 == array[4][1]) { - info[0] = 4; - if(array[0][1]-1 == array[1][1]) { - info[1] = array[0][1]; - } else { - info[1] = array[1][1]; - } - info[3] = 2; - cout << "Straight " << info[3] << endl; - return 0; + cout << "Straight"; + return 80000; } // Full House if((array[0][1] == array[1][1] && array[0][1] == array[2][1] && array[3][1] == array[4][1]) || (array[2][1] == array[3][1] && array[2][1] == array[4][1] && array[0][1] == array[1][1])) { - info[0] = 6; - info[3] = 2; - cout << "Full House " << info[3] << endl; - return 0; + cout << "Full House"; + return 80000; } -// auf Straßenansatz testen - for(j1=0; j1<5 && !breakLoop; j1++) { - for(j2=j1+1; j2<5 && !breakLoop; j2++) { - for(j3=j2+1; j3<5 && !breakLoop; j3++) { - for(j4=j3+1; j4<5 && !breakLoop; j4++) { - // zusammenhaengender Strassenansatz ? - if((array[j1][1]-1 == array[j2][1] || array[j1][1]-9 == array[j2][1]) && array[j2][1]-1 == array[j3][1] && array[j3][1]-1 == array[j4][1]) { - // Strassenansatz am Rand? - if(array[j1][1] == 12) { - tempChance += 16; - if(array[j1][2] <= 1) info[3]++; - if(array[j2][2] <= 1) info[3]++; - if(array[j3][2] <= 1) info[3]++; - if(array[j4][2] <= 1) info[3]++; - cout << "zusammenhaengender Straight-Draw mit Ass high " << info[3] << "\t"; - breakLoop = 1; - } - // Strassenansatz in der Mitte - else { - tempChance += 31; - if(array[j1][2] <= 1) info[3]++; - if(array[j2][2] <= 1) info[3]++; - if(array[j3][2] <= 1) info[3]++; - if(array[j4][2] <= 1) info[3]++; - cout << "zusammenhaengender Straight-Draw in der Mitte " << info[3] << "\t"; - breakLoop = 1; - } - } - else { - // Bauchschuss ? - if((array[j1][1]-2 == array[j2][1] && array[j2][1]-1 == array[j3][1] && array[j3][1]-1 == array[j4][1]) || (array[j1][1]-1 == array[j2][1] && array[j2][1]-2 == array[j3][1] && array[j3][1]-1 == array[j4][1]) || (array[j1][1]-1 == array[j2][1] && array[j2][1]-1 == array[j3][1] && array[j3][1]-2 == array[j4][1])) { - tempChance += 16; - if(array[j1][2] <= 1) info[3]++; - if(array[j2][2] <= 1) info[3]++; - if(array[j3][2] <= 1) info[3]++; - if(array[j4][2] <= 1) info[3]++; - cout << "Straight-Draw Bauchschuss " << info[3] << "\t"; - breakLoop = 1; - } - else { - // Test auf Straßenansatz-Ausnahme 5-4-3-2-A - if((array[j1][1]-9 == array[j2][1] && array[j2][1]-1 == array[j3][1] && array[j3][1]-1 == array[j4][1]) || (array[j1][1]-9 == array[j2][1] && array[j2][1]-1 == array[j3][1] && array[j3][1]-2 == array[j4][1]) || (array[j1][1]-9 == array[j2][1] && array[j2][1]-2 == array[j3][1] && array[j3][1]-1 == array[j4][1]) || (array[j1][1]-10 == array[j2][1] && array[j2][1]-1 == array[j3][1] && array[j3][1]-1 == array[j4][1])) { - tempChance += 16; - if(array[j1][2] <= 1) info[3]++; - if(array[j2][2] <= 1) info[3]++; - if(array[j3][2] <= 1) info[3]++; - if(array[j4][2] <= 1) info[3]++; - cout << "Straight-Draw Ass unten " << info[3] << "\t"; - breakLoop = 1; - } - } - } - } - } - } - } - - -// auf Drilling testen - for(j1=0; j1<3; j1++) { - if(array[j1][1] == array[j1+1][1] && array[j1][1] == array[j1+2][1]) { - info[0] = 3; - if(j1==0) info[1] = array[3][1]; - else info[1] = array[0][1]; - for(j2=0; j2<3; j2++) { - if(array[j1+j2][2] <= 1) info[3]++; - } - cout << "Drilling " << info[3] << endl; - return 0; - } - } - - // auf Zwei Paare testen - for(j1=0; j1<2; j1++) { - for(j2=j1+2; j2<4; j2++) { - if(array[j1][1] == array[j1+1][1] && array[j2][1] == array[j2+1][1]) { - info[0] = 2; - info[1] = array[j1][1]; - for(j3=0; j3<2; j3++) { - if(array[j1+j3][2] <= 1) info[3]++; - if(array[j2+j3][2] <= 1) info[3]++; - } - cout << "Zwei Paare " << info[3] << endl; - return 0; - } - } - } - - // auf Paar testen - for(j1=0; j1<4; j1++) { - if(array[j1][1] == array[j1+1][1]) { - info[0] = 1; - info[1] = 0; - for(j2=0; j2<5; j2++) { - if(array[j2][2] >= 2 && array[j2][1] > array[j1][1]) info[1]++; - } - for(j2=0; j2<2; j2++) { - if(array[j1+j2][2] <= 1) info[3]++; - } - cout << "Paar " << info[1] << "\t" << info[3] << endl; - return 0; - } - } - - // Highest Card (Klasse 0) + Kicker - info[0] = 0; - info[1] = array[0][1]; - info[2] = tempChance; - if(!breakLoop) { - if(array[0][2] <= 1) info[3] = 1; - else info[3] = 0; - cout << "Highest Card " << info[3]; - } - cout << endl; +// // auf Straßenansatz testen +// for(j1=0; j1<5 && !breakLoop; j1++) { +// for(j2=j1+1; j2<5 && !breakLoop; j2++) { +// for(j3=j2+1; j3<5 && !breakLoop; j3++) { +// for(j4=j3+1; j4<5 && !breakLoop; j4++) { +// // zusammenhaengender Strassenansatz ? +// if((array[j1][1]-1 == array[j2][1] || array[j1][1]-9 == array[j2][1]) && array[j2][1]-1 == array[j3][1] && array[j3][1]-1 == array[j4][1]) { +// // Strassenansatz am Rand? +// if(array[j1][1] == 12) { +// cout << "zusammenhaengender Straight-Draw mit Ass high"; +// +// tempChance = +// breakLoop = 1; +// +// for(j2=0; j2<4; j2++) { +// if(array[j1+j2][2] <= 1) temp++; +// } +// +// } +// // Strassenansatz in der Mitte +// else { +// tempChance += 31; +// if(array[j1][2] <= 1) info[3]++; +// if(array[j2][2] <= 1) info[3]++; +// if(array[j3][2] <= 1) info[3]++; +// if(array[j4][2] <= 1) info[3]++; +// cout << "zusammenhaengender Straight-Draw in der Mitte " << info[3] << "\t"; +// breakLoop = 1; +// } +// } +// else { +// // Bauchschuss ? +// if((array[j1][1]-2 == array[j2][1] && array[j2][1]-1 == array[j3][1] && array[j3][1]-1 == array[j4][1]) || (array[j1][1]-1 == array[j2][1] && array[j2][1]-2 == array[j3][1] && array[j3][1]-1 == array[j4][1]) || (array[j1][1]-1 == array[j2][1] && array[j2][1]-1 == array[j3][1] && array[j3][1]-2 == array[j4][1])) { +// tempChance += 16; +// if(array[j1][2] <= 1) info[3]++; +// if(array[j2][2] <= 1) info[3]++; +// if(array[j3][2] <= 1) info[3]++; +// if(array[j4][2] <= 1) info[3]++; +// cout << "Straight-Draw Bauchschuss " << info[3] << "\t"; +// breakLoop = 1; +// } +// else { +// // Test auf Straßenansatz-Ausnahme 5-4-3-2-A +// if((array[j1][1]-9 == array[j2][1] && array[j2][1]-1 == array[j3][1] && array[j3][1]-1 == array[j4][1]) || (array[j1][1]-9 == array[j2][1] && array[j2][1]-1 == array[j3][1] && array[j3][1]-2 == array[j4][1]) || (array[j1][1]-9 == array[j2][1] && array[j2][1]-2 == array[j3][1] && array[j3][1]-1 == array[j4][1]) || (array[j1][1]-10 == array[j2][1] && array[j2][1]-1 == array[j3][1] && array[j3][1]-1 == array[j4][1])) { +// tempChance += 16; +// if(array[j1][2] <= 1) info[3]++; +// if(array[j2][2] <= 1) info[3]++; +// if(array[j3][2] <= 1) info[3]++; +// if(array[j4][2] <= 1) info[3]++; +// cout << "Straight-Draw Ass unten " << info[3] << "\t"; +// breakLoop = 1; +// } +// } +// } +// } +// } +// } +// } +// +// +// // auf Drilling testen +// for(j1=0; j1<3; j1++) { +// if(array[j1][1] == array[j1+1][1] && array[j1][1] == array[j1+2][1]) { +// info[0] = 3; +// if(j1==0) info[1] = array[3][1]; +// else info[1] = array[0][1]; +// for(j2=0; j2<3; j2++) { +// if(array[j1+j2][2] <= 1) info[3]++; +// } +// cout << "Drilling " << info[3] << endl; +// return 0; +// } +// } +// +// // auf Zwei Paare testen +// for(j1=0; j1<2; j1++) { +// for(j2=j1+2; j2<4; j2++) { +// if(array[j1][1] == array[j1+1][1] && array[j2][1] == array[j2+1][1]) { +// info[0] = 2; +// info[1] = array[j1][1]; +// for(j3=0; j3<2; j3++) { +// if(array[j1+j3][2] <= 1) info[3]++; +// if(array[j2+j3][2] <= 1) info[3]++; +// } +// cout << "Zwei Paare " << info[3] << endl; +// return 0; +// } +// } +// } +// +// // auf Paar testen +// for(j1=0; j1<4; j1++) { +// if(array[j1][1] == array[j1+1][1]) { +// info[0] = 1; +// info[1] = 0; +// for(j2=0; j2<5; j2++) { +// if(array[j2][2] >= 2 && array[j2][1] > array[j1][1]) info[1]++; +// } +// for(j2=0; j2<2; j2++) { +// if(array[j1+j2][2] <= 1) info[3]++; +// } +// cout << "Paar " << info[1] << "\t" << info[3] << endl; +// return 0; +// } +// } +// +// // Highest Card (Klasse 0) + Kicker +// info[0] = 0; +// info[1] = array[0][1]; +// info[2] = tempChance; +// if(!breakLoop) { +// if(array[0][2] <= 1) info[3] = 1; +// else info[3] = 0; +// cout << "Highest Card " << info[3]; +// } +// cout << endl; return 0; + + } diff --git a/src/engine/local_engine/localplayer.h b/src/engine/local_engine/localplayer.h index 665bb06c..c50ff8ba 100755 --- a/src/engine/local_engine/localplayer.h +++ b/src/engine/local_engine/localplayer.h @@ -94,7 +94,7 @@ public: void turnEngine(); void riverEngine(); - int flopCardsValue(int*, int*); + int flopCardsValue(int*); int turnCardsValue(int*);