2007-01-13 02:40:33 +00:00
|
|
|
/***************************************************************************
|
|
|
|
|
* Copyright (C) 2006 by FThauer FHammer *
|
|
|
|
|
* f.thauer@web.de *
|
|
|
|
|
* *
|
|
|
|
|
* This program is free software; you can redistribute it and/or modify *
|
|
|
|
|
* it under the terms of the GNU General Public License as published by *
|
|
|
|
|
* the Free Software Foundation; either version 2 of the License, or *
|
|
|
|
|
* (at your option) any later version. *
|
|
|
|
|
* *
|
|
|
|
|
* This program is distributed in the hope that it will be useful, *
|
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
|
|
|
|
* GNU General Public License for more details. *
|
|
|
|
|
* *
|
|
|
|
|
* You should have received a copy of the GNU General Public License *
|
|
|
|
|
* along with this program; if not, write to the *
|
|
|
|
|
* Free Software Foundation, Inc., *
|
|
|
|
|
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
|
|
|
|
|
***************************************************************************/
|
|
|
|
|
#include "game.h"
|
|
|
|
|
|
2007-01-13 20:47:48 +00:00
|
|
|
#include "enginefactory.h"
|
|
|
|
|
#include "localenginefactory.h"
|
|
|
|
|
|
2007-01-13 02:40:33 +00:00
|
|
|
#include "guiinterface.h"
|
2007-01-13 20:47:48 +00:00
|
|
|
#include "boardinterface.h"
|
|
|
|
|
#include "playerinterface.h"
|
|
|
|
|
#include "handinterface.h"
|
|
|
|
|
|
2007-01-13 02:40:33 +00:00
|
|
|
|
|
|
|
|
using namespace std;
|
|
|
|
|
|
2007-01-13 14:27:56 +00:00
|
|
|
Game::Game(GuiInterface* g, int qP, int sC, int sB) : myGui(g), actualHand(0), actualBoard(0), startQuantityPlayers(qP), startCash(sC), startSmallBlind(sB), actualQuantityPlayers(qP), actualSmallBlind(sB), actualHandID(0), dealerPosition(0)
|
2007-01-13 02:40:33 +00:00
|
|
|
{
|
|
|
|
|
int i;
|
|
|
|
|
|
2007-01-13 14:27:56 +00:00
|
|
|
for(i=0; i<myGui->getMaxQuantityPlayers(); i++) {
|
2007-01-13 02:40:33 +00:00
|
|
|
playerArray[i] = 0;
|
|
|
|
|
}
|
|
|
|
|
|
2007-01-13 14:27:56 +00:00
|
|
|
myGui->setGame(this);
|
2007-01-13 20:47:48 +00:00
|
|
|
|
|
|
|
|
//EngineFactory erstellen
|
|
|
|
|
myFactory = new LocalEngineFactory; // LocalEngine erstellen
|
2007-01-13 02:40:33 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
// Board erstellen
|
2007-01-13 22:29:17 +00:00
|
|
|
actualBoard = myFactory->createBoard();
|
|
|
|
|
|
2007-01-13 02:40:33 +00:00
|
|
|
|
|
|
|
|
// ersten Dealer bestimmen
|
|
|
|
|
Tools myTool;
|
|
|
|
|
myTool.getRandNumber(0, startQuantityPlayers-1, 1, &dealerPosition, 0);
|
|
|
|
|
|
|
|
|
|
// Player erstellen
|
2007-01-13 22:29:17 +00:00
|
|
|
PlayerInterface *tempPlayer;
|
2007-01-13 14:27:56 +00:00
|
|
|
for(i=0; i<myGui->getMaxQuantityPlayers(); i++) {
|
2007-01-19 19:13:59 +00:00
|
|
|
|
|
|
|
|
// cout << myGui->getPlayerName(i) << "\n";
|
|
|
|
|
|
|
|
|
|
tempPlayer = myFactory->createPlayer(actualBoard, i, myGui->getPlayerName(i), startCash, startQuantityPlayers > i, 0);
|
2007-01-13 02:40:33 +00:00
|
|
|
playerArray[i] = tempPlayer;
|
|
|
|
|
}
|
|
|
|
|
actualBoard->setPlayer(playerArray);
|
|
|
|
|
|
|
|
|
|
//// SPIEL-SCHLEIFE
|
|
|
|
|
|
|
|
|
|
startHand();
|
|
|
|
|
|
|
|
|
|
// SPIEL-SCHLEIFE
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Game::~Game()
|
|
|
|
|
{
|
|
|
|
|
int i;
|
|
|
|
|
|
|
|
|
|
delete actualBoard;
|
|
|
|
|
actualBoard = 0;
|
|
|
|
|
delete actualHand;
|
|
|
|
|
actualHand = 0;
|
|
|
|
|
|
2007-01-13 22:29:17 +00:00
|
|
|
PlayerInterface *tempPlayer;
|
2007-01-13 14:27:56 +00:00
|
|
|
for(i=0; i<myGui->getMaxQuantityPlayers(); i++) {
|
2007-01-13 02:40:33 +00:00
|
|
|
tempPlayer = playerArray[i];
|
|
|
|
|
playerArray[i] = 0;
|
|
|
|
|
delete tempPlayer;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void Game::startHand()
|
|
|
|
|
{
|
|
|
|
|
int i;
|
|
|
|
|
|
|
|
|
|
//eventuell vorhandene Hand l�chen
|
|
|
|
|
if(actualHand) {
|
|
|
|
|
delete actualHand;
|
|
|
|
|
actualHand = 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
actualHandID++;
|
|
|
|
|
|
|
|
|
|
// smallBlind alle 9 Runden erh�en
|
|
|
|
|
if(actualHandID%9 == 0) actualSmallBlind *= 2;
|
|
|
|
|
|
|
|
|
|
//Spieler Action auf 0 setzen
|
2007-01-13 14:27:56 +00:00
|
|
|
for(i=0; i<myGui->getMaxQuantityPlayers(); i++) {
|
2007-01-13 02:40:33 +00:00
|
|
|
playerArray[i]->setMyAction(0);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Spieler mit leerem Cash auf inactive setzen
|
2007-01-13 14:27:56 +00:00
|
|
|
for(i=0; i<myGui->getMaxQuantityPlayers(); i++) {
|
2007-01-13 02:40:33 +00:00
|
|
|
if(playerArray[i]->getMyCash() == 0) playerArray[i]->setMyActiveStatus(0);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Hand erstellen
|
2007-01-14 13:23:04 +00:00
|
|
|
actualHand = myFactory->createHand(myFactory, myGui, actualBoard, playerArray, actualHandID, actualQuantityPlayers, dealerPosition, actualSmallBlind, startCash);
|
2007-01-13 02:40:33 +00:00
|
|
|
|
2007-01-13 22:29:17 +00:00
|
|
|
|
2007-01-13 02:40:33 +00:00
|
|
|
//GUI bereinigen
|
2007-01-13 14:27:56 +00:00
|
|
|
myGui->nextRoundCleanGui();
|
2007-01-13 02:40:33 +00:00
|
|
|
|
|
|
|
|
//Spielernamen schreiben
|
2007-01-13 14:27:56 +00:00
|
|
|
myGui->refreshPlayerName();
|
2007-01-13 02:40:33 +00:00
|
|
|
|
|
|
|
|
// Dealer-Button weiterschieben --> Achtung inactive
|
|
|
|
|
do {
|
2007-01-13 14:27:56 +00:00
|
|
|
dealerPosition = (dealerPosition+1)%(myGui->getMaxQuantityPlayers());
|
2007-01-13 02:40:33 +00:00
|
|
|
} while(!(playerArray[dealerPosition]->getMyActiveStatus()));
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Abfrage Cash==0 -> player inactive -> actualQuantityPlayer--
|
|
|
|
|
}
|