4 Copyright (c) 2010 Lode Vandevenne
7 This file is part of OOPoker.
9 OOPoker is free software: you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation, either version 3 of the License, or
12 (at your option) any later version.
14 OOPoker is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
19 You should have received a copy of the GNU General Public License
20 along with OOPoker. If not, see <http://www.gnu.org/licenses/>.
25 #include "combination.h"
32 Event::Event(EventType type
)
37 Event::Event(EventType type
, const std::string
& player
)
43 Event::Event(EventType type
, const std::string
& player
, int chips
)
50 Event::Event(EventType type
, int position
, const std::string
& player
)
57 Event::Event(EventType type
, int position
, int chips
, const std::string
& player
)
65 Event::Event(EventType type
, const std::string
& player
, const std::string
& ai
)
72 Event::Event(EventType type
, const Card
& card1
)
78 Event::Event(EventType type
, const Card
& card1
, const Card
& card2
)
85 Event::Event(EventType type
, const Card
& card1
, const Card
& card2
, const Card
& card3
)
93 Event::Event(EventType type
, const Card
& card1
, const Card
& card2
, const Card
& card3
, const Card
& card4
)
102 Event::Event(EventType type
, const Card
& card1
, const Card
& card2
, const Card
& card3
, const Card
& card4
, const Card
& card5
)
112 Event::Event(EventType type
, const std::string
& player
, const Card
& card1
, const Card
& card2
, const Card
& card3
, const Card
& card4
, const Card
& card5
)
123 Event::Event(EventType type
, const std::string
& player
, const Card
& card1
, const Card
& card2
)
130 Event::Event(const std::string
& message
, EventType type
)
136 Event::Event(EventType type
, int smallBlind
, int bigBlind
, int ante
)
138 , smallBlind(smallBlind
)
144 std::string
eventToString(const Event
& event
)
146 std::stringstream ss
;
147 std::string playerName
= event
.player
;
151 case E_JOIN
: ss
<< "Joins: " << playerName
<< ", chips: " << event
.chips
; break;
152 case E_QUIT
: ss
<< "Quits: " << playerName
<< ", chips: " << event
.chips
; break;
153 case E_REBUY
: ss
<< "Player " << playerName
<< " rebuys with " << event
.chips
<< " chips"; break;
154 case E_SMALL_BLIND
: ss
<< "Small Blind: " << playerName
<< ", chips: " << event
.chips
; break;
155 case E_BIG_BLIND
: ss
<< "Big Blind: " << playerName
<< ", chips: " << event
.chips
; break;
156 case E_ANTE
: ss
<< "Ante: " << playerName
<< ", chips: " << event
.chips
; break;
157 case E_FOLD
: ss
<< "Folds: " << playerName
; break;
158 case E_CHECK
: ss
<< "Checks: " << playerName
; break;
159 case E_CALL
: ss
<< "Calls: " << playerName
; break;
160 case E_RAISE
: ss
<< "Raises: " << playerName
<< ", chips: " << event
.chips
; break;
161 case E_NEW_DEAL
: ss
<< "New deal." << " SB: " << event
.smallBlind
<< " BB: " << event
.bigBlind
<< " Ante: " << event
.ante
; break;
162 case E_RECEIVE_CARDS
: ss
<< "Received cards: " << event
.card1
.getShortName() << " " << event
.card2
.getShortName(); break;
163 case E_FLOP
: ss
<< "Flop: " << event
.card1
.getShortName() << " " << event
.card2
.getShortName() << " " << event
.card3
.getShortName(); break;
164 case E_TURN
: ss
<< "Turn: " << event
.card4
.getShortName(); break;
165 case E_RIVER
: ss
<< "River: " << event
.card5
.getShortName(); break;
166 case E_SHOWDOWN
: ss
<< "Showdown Reached"; break;
167 case E_POT_DIVISION
: ss
<< "Pot size: " << event
.chips
; break;
168 case E_WIN
: ss
<< "Wins: " << playerName
<< ", chips: " << event
.chips
; break;
169 case E_PLAYER_SHOWDOWN
: ss
<< "Shows: " << playerName
<< ", " << event
.card1
.getShortName() << " " << event
.card2
.getShortName(); break;
170 case E_BOAST
: ss
<< "Boasts: " << playerName
<< ", " << event
.card1
.getShortName() << " " << event
.card2
.getShortName(); break;
174 getCombo(combo
, event
.card1
, event
.card2
, event
.card3
, event
.card4
, event
.card5
);
175 ss
<< "Combination: " << playerName
<< ", " << combo
.getNameWithAllCards();
178 case E_DEALER
: ss
<< "Dealer: " << playerName
; break;
179 case E_TOURNAMENT_RANK
: ss
<< "Ranking: " << playerName
<< ", Place: " << event
.position
<< ", Score: " << event
.chips
; break;
180 case E_REVEAL_AI
: ss
<< "Reveal AI: " << playerName
<< ", AI: " << event
.ai
; break;
181 case E_LOG_MESSAGE
: ss
<< event
.message
; break;
182 case E_DEBUG_MESSAGE
: ss
<< "DEBUG MESSAGE: " << event
.message
; break;
183 default: ss
<< "??????";
189 std::string
eventToStringVerbose(const Event
& event
)
191 std::stringstream ss
;
192 std::string playerName
= event
.player
;
196 case E_JOIN
: ss
<< "Player " << playerName
<< " joins with " << event
.chips
<< " chips"; break;
197 case E_QUIT
: ss
<< "Player " << playerName
<< " leaves with " << event
.chips
<< " chips"; break;
198 case E_REBUY
: ss
<< "Player " << playerName
<< " rebuys with " << event
.chips
<< " chips"; break;
199 case E_SMALL_BLIND
: ss
<< "Player " << playerName
<< " places the small blind (" << event
.chips
<< ")"; break;
200 case E_BIG_BLIND
: ss
<< "Player " << playerName
<< " places the big blind (" << event
.chips
<< ")"; break;
201 case E_ANTE
: ss
<< "Player " << playerName
<< " places ante (" << event
.chips
<< ")"; break;
202 case E_FOLD
: ss
<< "Player " << playerName
<< " folds."; break;
203 case E_CHECK
: ss
<< "Player " << playerName
<< " checks."; break;
204 case E_CALL
: ss
<< "Player " << playerName
<< " calls."; break;
205 case E_RAISE
: ss
<< "Player " << playerName
<< " raises with " << event
.chips
<< "."; break;
206 case E_NEW_DEAL
: ss
<< "New deal." << " Small Blind: " << event
.smallBlind
<< " Big Blind: " << event
.bigBlind
<< " Ante: " << event
.ante
; break;
207 case E_RECEIVE_CARDS
: ss
<< "Received cards: " << event
.card1
.getShortName() << " " << event
.card2
.getShortName(); break;
208 case E_FLOP
: ss
<< "Flop: " << event
.card1
.getShortName() << " " << event
.card2
.getShortName() << " " << event
.card3
.getShortName(); break;
209 case E_TURN
: ss
<< "Turn: " << event
.card4
.getShortName(); break;
210 case E_RIVER
: ss
<< "River: " << event
.card5
.getShortName(); break;
211 case E_SHOWDOWN
: ss
<< "Showdown Reached"; break;
212 case E_POT_DIVISION
: ss
<< "Betting finished. Pot size: " << event
.chips
; break;
213 case E_WIN
: ss
<< "Player " << playerName
<< " wins " << event
.chips
; break;
214 case E_PLAYER_SHOWDOWN
: ss
<< "Player " << playerName
<< " shows " << event
.card1
.getShortName() << " " << event
.card2
.getShortName(); break;
215 case E_BOAST
: ss
<< "Player " << playerName
<< " boasts " << event
.card1
.getShortName() << " " << event
.card2
.getShortName(); break;
219 getCombo(combo
, event
.card1
, event
.card2
, event
.card3
, event
.card4
, event
.card5
);
220 ss
<< "Player " << playerName
<< " has " << combo
.getNameWithAllCards();
223 case E_DEALER
: ss
<< "Player " << playerName
<< " is dealer"; break;
224 case E_TOURNAMENT_RANK
: ss
<< "Player " << playerName
<< " finishes at place " << event
.position
<< ". Score: " << event
.chips
; break;
225 case E_REVEAL_AI
: ss
<< "The AI of player " << playerName
<< " was: " << event
.ai
; break;
226 case E_LOG_MESSAGE
: ss
<< event
.message
; break;
227 case E_DEBUG_MESSAGE
: ss
<< "DEBUG MESSAGE: " << event
.message
; break;
228 default: ss
<< "??????";
234 void sendEventToPlayers(std::vector
<Player
>& players
, const Event
& event
)
236 for(size_t i
= 0; i
< players
.size(); i
++)
238 if(!players
[i
].isHuman() && (event
.type
== E_LOG_MESSAGE
|| event
.type
== E_DEBUG_MESSAGE
)) continue; //AI's are not allowed to get this information.
239 players
[i
].onEvent(event
);
242 void sendEventToObservers(std::vector
<Observer
*>& observers
, const Event
& event
)
244 for(size_t i
= 0; i
< observers
.size(); i
++)
246 observers
[i
]->onEvent(event
);
250 void sendEventsToPlayers(size_t& counter
, std::vector
<Player
>& players
, std::vector
<Observer
*>& observers
, const std::vector
<Event
>& events
)
252 for(size_t i
= counter
; i
< events
.size(); i
++)
254 sendEventToPlayers(players
, events
[i
]);
255 sendEventToObservers(observers
, events
[i
]);
258 counter
= events
.size();