From a00e3cde42753d75ba319865ee55c1159bd80011 Mon Sep 17 00:00:00 2001 From: doitux Date: Fri, 30 Mar 2007 12:44:16 +0000 Subject: [PATCH] gui freeze --- pokerth.png | Bin 0 -> 7684 bytes src/engine/local_engine/localhand.cpp | 11 +- src/engine/local_engine/localplayer.cpp | 429 +++++++++++-------- src/engine/local_engine/localplayer.h | 6 + src/engine/local_engine/localriver.cpp | 2 + src/engine/playerinterface.h | 3 + src/gui/qt/mainwindow.ui | 99 ++--- src/gui/qt/mainwindow/mainwindowimpl.cpp | 10 +- src/gui/qt/mainwindow/mainwindowimpl.h | 2 + src/gui/qt/mainwindow/mycardspixmaplabel.cpp | 12 +- src/gui/qt/mainwindow/mycardspixmaplabel.h | 1 + 11 files changed, 342 insertions(+), 233 deletions(-) create mode 100644 pokerth.png diff --git a/pokerth.png b/pokerth.png new file mode 100644 index 0000000000000000000000000000000000000000..e36e86aa8305a5b6631b02107bdf3597c9449ca7 GIT binary patch literal 7684 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 playerArray[i]->setMyCardsValueInt(myCardsValue.cardsValue(tempPlayerAndBoardArray,playerArray[i]->getMyBestHandPosition())); + // myBestHandPosition auf Fehler ueberpruefen for(j=0; j<5; j++) { if((playerArray[i]->getMyBestHandPosition())[j] == -1) { - cout << "FEHLER bei myBestHandPosition-Ermittlung!!!" << endl; + cout << "ERROR get myBestHandPosition in localhand.cpp" << endl; } } + + // sBluff für alle aktiver Spieler außer human player setzen + if(i) { + myTool.getRandNumber(1,100,1,&sBluff,0); + playerArray[i]->setSBluff(sBluff); + } + k++; } } diff --git a/src/engine/local_engine/localplayer.cpp b/src/engine/local_engine/localplayer.cpp index 3e55b73c..f0f03371 100755 --- a/src/engine/local_engine/localplayer.cpp +++ b/src/engine/local_engine/localplayer.cpp @@ -23,7 +23,7 @@ using namespace std; -LocalPlayer::LocalPlayer(BoardInterface *b, int id, std::string name, std::string avatar, int sC, bool aS, int mB) : PlayerInterface(), actualHand(0), actualBoard(b), myCardsValue(0), myID(id), myName(name), myAvatar(avatar), myDude(0), myDude4(0), myCardsValueInt(0), myOdds(-1.0), myCash(sC), mySet(0), myAction(0), myButton(mB), myActiveStatus(aS), myTurn(0), myRoundStartCash(0) +LocalPlayer::LocalPlayer(BoardInterface *b, int id, std::string name, std::string avatar, int sC, bool aS, int mB) : PlayerInterface(), actualHand(0), actualBoard(b), myCardsValue(0), myID(id), myName(name), myAvatar(avatar), myDude(0), myDude4(0), myCardsValueInt(0), myOdds(-1.0), myCash(sC), mySet(0), myAction(0), myButton(mB), myActiveStatus(aS), myTurn(0), myRoundStartCash(0), sBluff(0) { // myBestHandPosition mit -1 initialisieren int i; @@ -133,6 +133,8 @@ void LocalPlayer::preflopEngine() { int bet = 0; int raise = 0; + int cBluff; + Tools myTool; // temporär solange preflopValue und flopValue noch nicht bereinigt für sechs und sieben spieler int players = actualHand->getActualQuantityPlayers(); @@ -143,7 +145,7 @@ void LocalPlayer::preflopEngine() { // Niveaus setzen + Dude + Anzahl Gegenspieler // 1. Fold -- Call - myNiveau[0] = 40 + myDude4 - 6*(players - 2); + myNiveau[0] = 42 + myDude4 - 6*(players - 2); // 3. Call -- Raise myNiveau[2] = 53 + myDude4 - 6*(players - 2); @@ -166,24 +168,18 @@ void LocalPlayer::preflopEngine() { // cout << myID << ": " << myHoleCardsValue << " - " << myNiveau[0] << " " << myNiveau[2] << " - " << myCards[0] << " " << myCards[1] << endl; // Aggresivität des humanPlayers auslesen - int aggValue = (int)(((actualHand->getPlayerArray()[0]->getMyAggressive()*0.1)/7.0 - 1.0/actualHand->getActualQuantityPlayers())*7.0); + int aggValue = (int)(((actualHand->getPlayerArray()[0]->getMyAggressive()*1.0)/7.0 - 1.0/actualHand->getActualQuantityPlayers())*14.0); -// if(aggValue > 0) { -// myNiveau[0] -= aggValue; -// myNiveau[2] -= aggValue; -// } +// cout << aggValue << " "; + myNiveau[0] -= aggValue; + myNiveau[2] -= aggValue; -// int aggValue = ( (50*(actualHand->getPlayerArray()[0]->getMyAverageSets()-6*actualHand->getSmallBlind())) / (actualHand->getStartQuantityPlayers()*actualHand->getStartCash() - 6*actualHand->getSmallBlind()) ); - -// if(aggValue > 0) { -// myNiveau[0] -= aggValue; -// myNiveau[2] -= aggValue; -// } -// cout << "Spieler " << myID << ": Dude " << myDude4 << "\t Wert " << myHoleCardsValue << "\t Niveau " << myNiveau[0] << " " << myNiveau[1] << " " << myNiveau[2] << "\t Agg " << aggValue << " " << endl; - +// cout << "Spieler " << myID << ": Dude " << myDude4 << "\t Wert " << myHoleCardsValue << "\t Niveau " << myNiveau[0] << " " << myNiveau[1] << " " << myNiveau[2] << "\t Agg " << aggValue << " " << endl; + // Check-Bluff generieren + myTool.getRandNumber(1,100,1,&cBluff,0); // aktive oder passivie Situation ? -> im preflop nur passiv @@ -201,7 +197,7 @@ void LocalPlayer::preflopEngine() { else { myAction = 3; } - + // Standard-Raise-Routine } else { // raise-Betrag ermitteln @@ -216,6 +212,13 @@ void LocalPlayer::preflopEngine() { } myAction = 5; } + + // auf cBluff testen --> call statt raise + if(cBluff > 80) myAction = 3; + if(cBluff > 70 && myOdds >= myNiveau[2] + 4) myAction = 3; + if(cBluff > 60 && myOdds >= myNiveau[2] + 8) myAction = 3; + if(cBluff > 50 && myOdds >= myNiveau[2] + 12) myAction = 3; + } else { // call @@ -232,6 +235,36 @@ void LocalPlayer::preflopEngine() { } } + cout << sBluff << endl; + + // auf sBluff testen --> raise statt call oder fold + if(sBluff < 100/(((actualHand->getActualQuantityPlayers()-2)*6)+3) && myOdds < myNiveau[2] && actualHand->getPreflop()->getHighestSet() == 2*actualHand->getSmallBlind()) { + + cout << "sBLUFF!" << endl; + + // Gegner raisen ebenfalls -> call + if(actualHand->getPreflop()->getHighestSet() >= 12*actualHand->getSmallBlind()) { + myAction = 3; + } + // Standard-Raise-Routine + else { + // raise-Betrag ermitteln + raise = (sBluff/(8-actualHand->getActualQuantityPlayers()))*actualHand->getSmallBlind(); + // raise-Betrag zu klein -> mindestens Standard-raise + if(raise < actualHand->getPreflop()->getHighestSet()) { + raise = actualHand->getPreflop()->getHighestSet(); + } + // all in bei nur wenigen Chips oder knappem raise + if(myCash/(2*actualHand->getSmallBlind()) <= 6 || raise >= (myCash*4)/5) { + raise = myCash; + } + myAction = 5; + } + + + } + + evaluation(bet, raise); } @@ -240,6 +273,9 @@ void LocalPlayer::flopEngine() { int raise = 0; int bet = 0; + int i; + int cBluff; + Tools myTool; // übergang solange preflopValue und flopValue noch nicht bereinigt int players = actualHand->getActualQuantityPlayers(); @@ -249,24 +285,26 @@ void LocalPlayer::flopEngine() { // Niveaus setzen + Dude + Anzahl Gegenspieler // 1. Fold -- Call - myNiveau[0] = 40 + myDude4 - 6*(players - 2); + myNiveau[0] = 42 + myDude4 - 6*(players - 2); // 2. Check -- Bet - myNiveau[1] = 52 + myDude4 - 6*(players - 2); + myNiveau[1] = 54 + myDude4 - 6*(players - 2); // 3. Call -- Raise - myNiveau[2] = 64 + myDude4 - 6*(players - 2); - - // auf Aggresivität des humanPlayers eingehen -// int aggValue = ( (50*(actualHand->getPlayerArray()[0]->getMyAverageSets()-6*actualHand->getSmallBlind())) / (actualHand->getStartQuantityPlayers()*actualHand->getStartCash() - 6*actualHand->getSmallBlind()) ); - -// if(aggValue > 0) { -// myNiveau[0] -= aggValue; -// myNiveau[2] -= aggValue; -// } + myNiveau[2] = 66 + myDude4 - 6*(players - 2); // eigenes mögliches highestSet int individualHighestSet = actualHand->getFlop()->getHighestSet(); if(individualHighestSet > myCash) individualHighestSet = myCash; + // Aggresivität des humanPlayers auslesen + int aggValue = (int)(((actualHand->getPlayerArray()[0]->getMyAggressive()*1.0)/7.0 - 1.0/actualHand->getActualQuantityPlayers())*14.0); + + for(i=0; i<3; i++) { + myNiveau[i] -= aggValue; + } + + // Check-Bluff generieren + myTool.getRandNumber(1,100,1,&cBluff,0); + // aktiv oder passiv? if(actualHand->getFlop()->getHighestSet() > 0) { @@ -311,6 +349,13 @@ void LocalPlayer::flopEngine() { } myAction = 5; } + + // auf cBluff testen --> call statt raise + if(cBluff > 90) myAction = 3; + if(cBluff > 80 && myOdds >= myNiveau[2] + 4) myAction = 3; + if(cBluff > 70 && myOdds >= myNiveau[2] + 8) myAction = 3; + if(cBluff > 60 && myOdds >= myNiveau[2] + 12) myAction = 3; + } else { // call -> über niveau0, schon einiges gesetzt im flop, schon einiges insgesamt gesetzt @@ -329,12 +374,8 @@ void LocalPlayer::flopEngine() { } } else { - // check - if(myOdds < myNiveau[1]) { - myAction = 2; - } // bet - else { + if(myOdds >= myNiveau[1]) { bet = (((int)myOdds-myNiveau[1])/8)*2*actualHand->getSmallBlind(); // bet zu klein if(bet == 0) { @@ -342,13 +383,23 @@ void LocalPlayer::flopEngine() { } // all in bei nur wenigen Chips if(myCash/(2*actualHand->getSmallBlind()) <= 6) { - raise = myCash; + bet = myCash; } // all in bei knappem bet if(bet > (myCash*4.0)/5.0) { bet = myCash; } myAction = 4; + + // auf cBluff testen --> check statt bet + if(cBluff > 80) myAction = 2; + if(cBluff > 70 && myOdds >= myNiveau[1] + 4) myAction = 2; + if(cBluff > 60 && myOdds >= myNiveau[1] + 8) myAction = 2; + if(cBluff > 50 && myOdds >= myNiveau[1] + 12) myAction = 2; + } + // bet + else { + myAction = 2; } } @@ -626,32 +677,37 @@ void LocalPlayer::turnEngine() { int raise = 0; int bet = 0; + int i; + int cBluff; + Tools myTool; readFile(); // Niveaus setzen + Dude + Anzahl Gegenspieler // 1. Fold -- Call - myNiveau[0] = 42 + myDude4/* - 6*(actualHand->getActualQuantityPlayers() - 2)*/; + myNiveau[0] = 44 + myDude4/* - 6*(actualHand->getActualQuantityPlayers() - 2)*/; // 2. Check -- Bet - myNiveau[1] = 53 + myDude4/* - 6*(actualHand->getActualQuantityPlayers() - 2)*/; + myNiveau[1] = 55 + myDude4/* - 6*(actualHand->getActualQuantityPlayers() - 2)*/; // 3. Call -- Raise - myNiveau[2] = 64 + myDude4/* - 6*(actualHand->getActualQuantityPlayers() - 2)*/; + myNiveau[2] = 66 + myDude4/* - 6*(actualHand->getActualQuantityPlayers() - 2)*/; - // auf Aggresivität des humanPlayers eingehen -// int aggValue = ( (50*(actualHand->getPlayerArray()[0]->getMyAverageSets()-6*actualHand->getSmallBlind())) / (actualHand->getStartQuantityPlayers()*actualHand->getStartCash() - 6*actualHand->getSmallBlind()) ); +// Aggresivität des humanPlayers auslesen + int aggValue = (int)(((actualHand->getPlayerArray()[0]->getMyAggressive()*1.0)/7.0 - 1.0/actualHand->getActualQuantityPlayers())*14.0); -// if(aggValue > 0) { -// myNiveau[0] -= aggValue; -// myNiveau[2] -= aggValue; -// } + for(i=0; i<3; i++) { + myNiveau[i] -= aggValue; + } -// cout << "Spieler " << myID << ": Dude " << myDude4 << "\t Wert " << myHoleCardsValue << "\t Niveau " << myNiveau[0] << " " << myNiveau[1] << " " << myNiveau[2] << "\t Agg " << aggValue << " " << endl; +// cout << "Spieler " << myID << ": Dude " << myDude4 << "\t Wert " << myHoleCardsValue << "\t Niveau " << myNiveau[0] << " " << myNiveau[1] << " " << myNiveau[2] << "\t Agg " << aggValue << " " << endl; // eigenes mögliches highestSet int individualHighestSet = actualHand->getTurn()->getHighestSet(); if(individualHighestSet > myCash) individualHighestSet = myCash; + // Check-Bluff generieren + myTool.getRandNumber(1,100,1,&cBluff,0); + // aktiv oder passiv? if(actualHand->getTurn()->getHighestSet() > 0) { @@ -696,6 +752,11 @@ void LocalPlayer::turnEngine() { } myAction = 5; } + // auf cBluff testen --> call statt raise + if(cBluff > 90) myAction = 3; + if(cBluff > 80 && myOdds >= myNiveau[2] + 5) myAction = 3; + if(cBluff > 70 && myOdds >= myNiveau[2] + 10) myAction = 3; + if(cBluff > 60 && myOdds >= myNiveau[2] + 15) myAction = 3; } else { // call -> über niveau0, schon einiges gesetzt im flop, schon einiges insgesamt gesetzt @@ -714,6 +775,147 @@ void LocalPlayer::turnEngine() { } } // aktiv + else { + // bet + if(myOdds >= myNiveau[1]) { + bet = (((int)myOdds-myNiveau[1])/6)*2*actualHand->getSmallBlind(); + if(bet == 0) { + bet = 2*actualHand->getSmallBlind(); + } + // all in bei nur wenigen Chips + if(myCash/(2*actualHand->getSmallBlind()) <= 6) { + bet = myCash; + } + // all in bei knappem bet + if(bet > (myCash*4.0)/5.0) { + bet = myCash; + } + myAction = 4; + + // auf cBluff testen --> call statt raise + if(cBluff > 90) myAction = 2; + if(cBluff > 80 && myOdds >= myNiveau[2] + 5) myAction = 2; + if(cBluff > 70 && myOdds >= myNiveau[2] + 10) myAction = 2; + if(cBluff > 60 && myOdds >= myNiveau[2] + 15) myAction = 2; + } + // check + else { + myAction = 2; + } + } + + evaluation(bet, raise); + +} + + +void LocalPlayer::riverEngine() { + + ConfigFile myConfig; + +// int tempArray[6]; +// int boardCards[5]; +// int i; + +// for(i=0; i<2; i++) tempArray[i] = myCards[i]; +// actualBoard->getMyCards(boardCards); +// for(i=0; i<4; i++) tempArray[2+i] = boardCards[i]; + +// for(i=0; i<5; i++) cout << tempArray[i] << " "; +// cout << endl; + +// cout << myID << ": "; + +// turnCardsValue(tempArray); + + + int raise = 0; + int bet = 0; + int i; + + readFile(); + + // Niveaus setzen + Dude + Anzahl Gegenspieler + // 1. Fold -- Call + myNiveau[0] = 44 + myDude4/* - 6*(actualHand->getActualQuantityPlayers() - 2)*/; + // 2. Check -- Bet + myNiveau[1] = 55 + myDude4/* - 6*(actualHand->getActualQuantityPlayers() - 2)*/; + // 3. Call -- Raise + myNiveau[2] = 66 + myDude4/* - 6*(actualHand->getActualQuantityPlayers() - 2)*/; + + // Aggresivität des humanPlayers auslesen + int aggValue = (int)(((actualHand->getPlayerArray()[0]->getMyAggressive()*1.0)/7.0 - 1.0/actualHand->getActualQuantityPlayers())*14.0); + + for(i=0; i<3; i++) { + myNiveau[i] -= aggValue; + } + +// cout << "Spieler " << myID << ": Dude " << myDude4 << "\t Wert " << myHoleCardsValue << "\t Niveau " << myNiveau[0] << " " << myNiveau[1] << " " << myNiveau[2] << "\t Agg " << aggValue << " " << endl; + + // eigenes mögliches highestSet + int individualHighestSet = actualHand->getRiver()->getHighestSet(); + if(individualHighestSet > myCash) individualHighestSet = myCash; + + // aktiv oder passiv? + if(actualHand->getRiver()->getHighestSet() > 0) { + + // Verhaeltnis Set / Cash + if(myCash/individualHighestSet >= 25) { + myNiveau[0] += (25-myCash/individualHighestSet)/10; + } else { + myNiveau[0] += (25-myCash/individualHighestSet)/3; + } + + // Verhaeltnis Set / Cash für raise + if(myCash/individualHighestSet < 10) { + myNiveau[2] += (10-myCash/individualHighestSet)/2; + } + + // raise (bei hohem Niveau) + if(myOdds >= myNiveau[2]) { + // raise-loop unterbinden -> d.h. entweder call oder bei superblatt all in + if(actualHand->getRiver()->getHighestSet() >= 12*actualHand->getSmallBlind()) { + // all in + if(myOdds >= myNiveau[2] + 8) { + raise = myCash; + myAction = 5; + } + // nur call + else { + myAction = 3; + } + } + // Standard-Raise-Routine + else { + // raise-Betrag ermitteln + raise = (((int)myOdds-myNiveau[2])/2)*2*actualHand->getSmallBlind(); + // raise-Betrag zu klein -> mindestens Standard-raise + if(raise == 0) { + raise = actualHand->getRiver()->getHighestSet(); + } + // all in bei nur wenigen Chips + if(myCash/(2*actualHand->getSmallBlind()) <= 8) { + raise = myCash; + } + myAction = 5; + } + } + else { + // call -> über niveau0, schon einiges gesetzt im flop, schon einiges insgesamt gesetzt + if(myOdds >= myNiveau[0] || (mySet >= actualHand->getRiver()->getHighestSet()/2 && myOdds >= myNiveau[0]-5) || (myRoundStartCash-myCash > individualHighestSet && myNiveau[0]-3)) { + // all in bei knappem call + if(myCash-actualHand->getRiver()->getHighestSet() <= (myCash*1)/4) { + raise = myCash; + myAction = 5; + } + else myAction = 3; + } + // fold + else { + myAction = 1; + } + } + } else { // check if(myOdds < myNiveau[1]) { @@ -721,7 +923,7 @@ void LocalPlayer::turnEngine() { } // bet else { - bet = (((int)myOdds-myNiveau[1])/6)*2*actualHand->getSmallBlind(); + bet = (((int)myOdds-myNiveau[1])/3)*2*actualHand->getSmallBlind(); if(bet == 0) { bet = 2*actualHand->getSmallBlind(); } @@ -735,147 +937,11 @@ void LocalPlayer::turnEngine() { } myAction = 4; } + } evaluation(bet, raise); -} - - -void LocalPlayer::riverEngine() { - - ConfigFile myConfig; - -// int tempArray[6]; -// int boardCards[5]; -// int i; - -// for(i=0; i<2; i++) tempArray[i] = myCards[i]; -// actualBoard->getMyCards(boardCards); -// for(i=0; i<4; i++) tempArray[2+i] = boardCards[i]; - -// for(i=0; i<5; i++) cout << tempArray[i] << " "; -// cout << endl; - -// cout << myID << ": "; - -// turnCardsValue(tempArray); - - - int raise = 0; - int bet = 0; - - readFile(); - - // Niveaus setzen + Dude + Anzahl Gegenspieler - // 1. Fold -- Call - myNiveau[0] = 42 + myDude4/* - 6*(actualHand->getActualQuantityPlayers() - 2)*/; - // 2. Check -- Bet - myNiveau[1] = 53 + myDude4/* - 6*(actualHand->getActualQuantityPlayers() - 2)*/; - // 3. Call -- Raise - myNiveau[2] = 64 + myDude4/* - 6*(actualHand->getActualQuantityPlayers() - 2)*/; - - // auf Aggresivität des humanPlayers eingehen -// int aggValue = ( (50*(actualHand->getPlayerArray()[0]->getMyAverageSets()-6*actualHand->getSmallBlind())) / (actualHand->getStartQuantityPlayers()*actualHand->getStartCash() - 6*actualHand->getSmallBlind()) ); - -// if(aggValue > 0) { -// myNiveau[0] -= aggValue; -// myNiveau[2] -= aggValue; -// } - -// cout << "Spieler " << myID << ": Dude " << myDude4 << "\t Wert " << myHoleCardsValue << "\t Niveau " << myNiveau[0] << " " << myNiveau[1] << " " << myNiveau[2] << "\t Agg " << aggValue << " " << endl; - - // eigenes mögliches highestSet - int individualHighestSet = actualHand->getRiver()->getHighestSet(); - if(individualHighestSet > myCash) individualHighestSet = myCash; - - // aktiv oder passiv? - if(actualHand->getRiver()->getHighestSet() > 0) { - - // Verhaeltnis Set / Cash - if(myCash/individualHighestSet >= 25) { - myNiveau[0] += (25-myCash/individualHighestSet)/10; - } else { - myNiveau[0] += (25-myCash/individualHighestSet)/3; - } - - // Verhaeltnis Set / Cash für raise - if(myCash/individualHighestSet < 10) { - myNiveau[2] += (10-myCash/individualHighestSet)/2; - } - - // raise (bei hohem Niveau) - if(myOdds >= myNiveau[2]) { - - // raise-loop unterbinden -> d.h. entweder call oder bei superblatt all in - if(actualHand->getRiver()->getHighestSet() >= 12*actualHand->getSmallBlind()) { - // all in - if(myOdds >= myNiveau[2] + 8) { - raise = myCash; - myAction = 5; - } - // nur call - else { - myAction = 3; - } - - // Standard-Raise-Routine - } else { - // raise-Betrag ermitteln - raise = (((int)myOdds-myNiveau[2])/2)*2*actualHand->getSmallBlind(); - // raise-Betrag zu klein -> mindestens Standard-raise - if(raise == 0) { - raise = actualHand->getRiver()->getHighestSet(); - } - // all in bei nur wenigen Chips - if(myCash/(2*actualHand->getSmallBlind()) <= 8) { - raise = myCash; - } - myAction = 5; - } - } - else { - // call -> über niveau0, schon einiges gesetzt im flop, schon einiges insgesamt gesetzt - if(myOdds >= myNiveau[0] || (mySet >= actualHand->getRiver()->getHighestSet()/2 && myOdds >= myNiveau[0]-5) || (myRoundStartCash-myCash > individualHighestSet && myNiveau[0]-3)) { - // all in bei knappem call - if(myCash-actualHand->getRiver()->getHighestSet() <= (myCash*1)/4) { - raise = myCash; - myAction = 5; - } - else myAction = 3; - } - // fold - else { - myAction = 1; - } - } - } - else { - // check - if(myOdds < myNiveau[1]) { - myAction = 2; - } - // bet - else { - bet = (((int)myOdds-myNiveau[1])/3)*2*actualHand->getSmallBlind(); - if(bet == 0) { - bet = 2*actualHand->getSmallBlind(); - } - // all in bei nur wenigen Chips - if(myCash/(2*actualHand->getSmallBlind()) <= 6) { - raise = myCash; - } - // all in bei knappem bet - if(bet > (myCash*4.0)/5.0) { - bet = myCash; - } - myAction = 4; - } - - } - - evaluation(bet, raise); - @@ -1644,6 +1710,7 @@ int LocalPlayer::flopCardsValue(int* cards) { } + void LocalPlayer::readFile() { ConfigFile myConfig; diff --git a/src/engine/local_engine/localplayer.h b/src/engine/local_engine/localplayer.h index f4f98a95..3898b21a 100755 --- a/src/engine/local_engine/localplayer.h +++ b/src/engine/local_engine/localplayer.h @@ -105,6 +105,9 @@ public: return sum; } + void setSBluff ( int theValue ) { sBluff = theValue; } + int getSBluff() const { return sBluff; } + void action(); void preflopEngine(); @@ -124,6 +127,7 @@ public: void readFile(); void evaluation(int, int); + private: @@ -159,6 +163,8 @@ private: int myAverageSets[4]; bool myAggressive[7]; + int sBluff; + }; #endif diff --git a/src/engine/local_engine/localriver.cpp b/src/engine/local_engine/localriver.cpp index d1e2e8b7..a17a3290 100755 --- a/src/engine/local_engine/localriver.cpp +++ b/src/engine/local_engine/localriver.cpp @@ -163,6 +163,8 @@ void LocalRiver::postRiverRun() { // prüfen ob nur noch der human player an der verteilung teilnimmt und myAggressive für human player setzen myHand->getPlayerArray()[0]->setMyAggressive(potPlayers == 1 && myHand->getPlayerArray()[0]->getMyActiveStatus() && myHand->getPlayerArray()[0]->getMyAction() != 1); + cout << "myAggressive: " << myHand->getPlayerArray()[0]->getMyAggressive() << endl; + // Pot-Verteilung distributePot(); diff --git a/src/engine/playerinterface.h b/src/engine/playerinterface.h index d6207a2a..3030957f 100644 --- a/src/engine/playerinterface.h +++ b/src/engine/playerinterface.h @@ -79,6 +79,9 @@ public: virtual void setMyAggressive(const bool& theValue) =0; virtual int getMyAggressive() const =0; + + virtual void setSBluff ( int theValue ) =0; + virtual int getSBluff() const =0; virtual void action() =0; diff --git a/src/gui/qt/mainwindow.ui b/src/gui/qt/mainwindow.ui index a4b9ece3..eb67d905 100644 --- a/src/gui/qt/mainwindow.ui +++ b/src/gui/qt/mainwindow.ui @@ -819,38 +819,6 @@ Qt::AlignCenter - - - - 95 - 40 - 118 - 111 - - - - - - 9 - 35 - 100 - 40 - - - - - 0 - 20 - - - - - - - Qt::AlignCenter - - - @@ -1065,6 +1033,41 @@ true + + + + 95 + 40 + 118 + 111 + + + + + + 9 + 35 + 100 + 40 + + + + + 0 + 20 + + + + + + + Qt::AlignCenter + + + Qt::NoTextInteraction + + + @@ -1790,22 +1793,6 @@ 185 - - - - 89 - 60 - 90 - 124 - - - - :/guiv2/resources/guiv2/cardholder_03.png - - - true - - @@ -2490,6 +2477,22 @@ + + + + 89 + 60 + 90 + 124 + + + + :/guiv2/resources/guiv2/cardholder_03.png + + + true + + diff --git a/src/gui/qt/mainwindow/mainwindowimpl.cpp b/src/gui/qt/mainwindow/mainwindowimpl.cpp index 5d6f52bd..a4acbb1e 100755 --- a/src/gui/qt/mainwindow/mainwindowimpl.cpp +++ b/src/gui/qt/mainwindow/mainwindowimpl.cpp @@ -54,7 +54,7 @@ const int maxQuantityPlayersConst = 7; using namespace std; mainWindowImpl::mainWindowImpl(QMainWindow *parent) - : QMainWindow(parent), actualGame(0), actualHand(0), mySession(0), maxQuantityPlayers(maxQuantityPlayersConst), gameSpeed(0), debugMode(0), breakAfterActualHand(FALSE) + : QMainWindow(parent), actualGame(0), actualHand(0), mySession(0), maxQuantityPlayers(maxQuantityPlayersConst), gameSpeed(0), debugMode(1), breakAfterActualHand(FALSE) { int i; @@ -124,6 +124,7 @@ mainWindowImpl::mainWindowImpl(QMainWindow *parent) pixmapLabel_card0a->setObjectName(QString::fromUtf8("pixmapLabel_card0a")); pixmapLabel_card0a->setScaledContents(true); pixmapLabel_card0a->setGeometry(QRect(0, 0, 80, 111)); +// pixmapLabel_card0a->setFocusPolicy(Qt::NoFocus); pixmapLabel_card0b = new MyCardsPixmapLabel(frame_Cards0); pixmapLabel_card0b->setObjectName(QString::fromUtf8("pixmapLabel_card0b")); @@ -2156,10 +2157,15 @@ void mainWindowImpl::keyPressEvent ( QKeyEvent * event ) { ctrlPressed = TRUE; // QTimer::SingleShot } //CTRL -// if (event->key() == 65) { paintStartSplash(); + if (event->key() == 65) { pixmapLabel_card0a->setUpdatesEnabled(FALSE); } // if (event->key() == 66) { label_logo->hide(); } } +// bool mainWindowImpl::event ( QEvent * event ) { + +// if(event->type() == QEvent::MouseMove) { event->setAccepted ( FALSE ); } +// } + void mainWindowImpl::switchLeftToolBox() { if (groupBox_LeftToolBox->isHidden()) { groupBox_LeftToolBox->show(); } diff --git a/src/gui/qt/mainwindow/mainwindowimpl.h b/src/gui/qt/mainwindow/mainwindowimpl.h index ae84ae9b..3587dc90 100755 --- a/src/gui/qt/mainwindow/mainwindowimpl.h +++ b/src/gui/qt/mainwindow/mainwindowimpl.h @@ -180,6 +180,8 @@ public slots: void breakButtonClicked(); void keyPressEvent ( QKeyEvent*); +// bool event ( QEvent * ); + void switchLeftToolBox(); void switchRightToolBox(); void switchFullscreen(); diff --git a/src/gui/qt/mainwindow/mycardspixmaplabel.cpp b/src/gui/qt/mainwindow/mycardspixmaplabel.cpp index eece80db..78d68e14 100644 --- a/src/gui/qt/mainwindow/mycardspixmaplabel.cpp +++ b/src/gui/qt/mainwindow/mycardspixmaplabel.cpp @@ -65,8 +65,9 @@ void MyCardsPixmapLabel::nextFadeOutFrame() { update(); } else { + fadeOutTimer->stop(); - fadeOutAction = FALSE; +// fadeOutAction = FALSE; } } @@ -177,3 +178,12 @@ void MyCardsPixmapLabel::paintEvent(QPaintEvent * event) { } + +// bool MyCardsPixmapLabel::event ( QEvent * event ) { +// +// if(event->type() == QEvent::MouseMove) { event->ignore(); } +// QLabel::event(event); +// } + + + diff --git a/src/gui/qt/mainwindow/mycardspixmaplabel.h b/src/gui/qt/mainwindow/mycardspixmaplabel.h index e83a952f..02a16059 100644 --- a/src/gui/qt/mainwindow/mycardspixmaplabel.h +++ b/src/gui/qt/mainwindow/mycardspixmaplabel.h @@ -46,6 +46,7 @@ public slots: void nextFadeOutFrame(); void nextFlipCardsFrame(); +// bool event ( QEvent * ); private: