Quote: -- Begin Round: 10593 --
Count is: 5
Player bets $20
Dealer: D7 D10 Points: 17
Player: CJ D2 Points: 12
Player takes a card: S2 Points: 14
Player takes a card: H8 Points: 22
Player busted.
Player lost $20
Player Funds: $0
Game ended.
High Funds: $1687.5 (Round 6124)
Most runs only go 400-900 rounds, and have a high funds of about the same range.
I tried to upload it, but I get this:
Quote:aspSmartUpload error '800a0006'
Overflow
/community/forums/mod/fileman/fileman.asp, line 298
I try again, and I get a different error. So Ill just post the new stuff in source.
#ifndef _TABLE_H_#define _TABLE_H_#include "Player.h"#include "Deck.h"#include "Hand.h"#include "Card.h"typedef struct TableRulesT{ float minBet; float maxBet; unsigned int numDecks; float Saturation;} TableRules;class Table{public: Deck* TheCards; Deck* TheBoot; Player * Dealer; vector Players; TableRules Rules; Table() { Dealer = new Player(); Dealer->name = "Dealer"; TheCards = new Deck();// (52); TheBoot = new Deck(); SetRules(); TheCards->Generate(Rules.numDecks); } ~Table() { delete Dealer; delete TheCards; delete TheBoot; vector::iterator b = Players.begin(); vector::iterator e = Players.end(); for(;b != e; ++b) delete *b; } Player* AddPlayer() { Player * p; Players.push_back((p = new Player())); string pnum; string pname = "Player"; p->name = pname ; p->funds = 300; return p; } Player* GetPlayer(unsigned int i) { return Players;<br> }<br> TableRules SetRules(<span class="cpp-keyword">float</span> minBet = <span class="cpp-number">5</span>, <span class="cpp-keyword">float</span> maxBet = <span class="cpp-number">200</span>,<br> <span class="cpp-keyword">unsigned</span> <span class="cpp-keyword">int</span> numDecks = <span class="cpp-number">4</span>, <span class="cpp-keyword">float</span> sat = <span class="cpp-number">0</span>.35f)<br> {<br> Rules.minBet = minBet;<br> Rules.maxBet = maxBet;<br> Rules.numDecks = numDecks;<br> Rules.Saturation = sat;<br> <span class="cpp-keyword">return</span> Rules;<br> }<br><br> <span class="cpp-keyword">bool</span> BetsDown();<br> <span class="cpp-keyword">void</span> Deal();<br> <span class="cpp-keyword">void</span> ShowTable();<br> <span class="cpp-keyword">void</span> DealerTurn();<br> <span class="cpp-keyword">void</span> PlayersTurn();<br> <span class="cpp-keyword">void</span> ScoreRound();<br> <span class="cpp-keyword">void</span> CollectHands();<br> <span class="cpp-keyword">void</span> AIBasicPlayer(Player * player);<br>};<br><br><span class="cpp-directive">#endif</span><br><br><span class="cpp-directive">#include</span> <span class="cpp-literal">"Table.h"</span><br><br><span class="cpp-keyword">bool</span> Table::BetsDown()<br>{<br> <span class="cpp-keyword">bool</span> AllDown = <span class="cpp-keyword">true</span>;<br> Player * p;<br> vector<Player*>::iterator b = Players.begin();<br> vector<Player*>::iterator e = Players.end();<br> <span class="cpp-keyword">for</span>(;b != e; ++b)<br> {<br> p = *b;<br> <span class="cpp-keyword">if</span>(p->active)<br> {<br> p->busted = <span class="cpp-keyword">false</span>;<br> <span class="cpp-keyword">if</span>(p->computer)<br> {<br> <span class="cpp-comment">// setup computers Count based bet</span><br> <span class="cpp-keyword">if</span>(TheCards->Count > <span class="cpp-number">1</span>)<br> {<br> cout << <span class="cpp-literal">"Count is: "</span> << TheCards->Count << endl;<br> <span class="cpp-keyword">float</span> bet = (Rules.minBet * TheCards->Count);<br> <span class="cpp-keyword">if</span>(bet > p->funds)<br> bet = p->funds;<br> p->bet = bet;<br> }<br> <span class="cpp-keyword">else</span><br> {<br> p->bet = Rules.minBet;<br> }<br> }<br> <span class="cpp-keyword">else</span><br> {<br> <span class="cpp-comment">// input bet</span><br> }<br> <span class="cpp-keyword">if</span>( (p->bet >= Rules.minBet) && (p->bet <= Rules.maxBet) )<br> {<br> <span class="cpp-keyword">if</span>(p->bet > p->funds)<br> p->bet = p->funds;<br> <span class="cpp-keyword">if</span>(!p->bet)<br> {<br> AllDown = <span class="cpp-keyword">false</span>;<br> }<br> <span class="cpp-keyword">else</span><br> {<br> p->funds -= p->bet;<br> }<br> }<br> <span class="cpp-keyword">else</span> <br> {<br> p->bet = <span class="cpp-number">0</span>;<br> p->active = <span class="cpp-keyword">false</span>;<br> }<br> cout << p->name.c_str() << <span class="cpp-literal">" bets $"</span> << p->bet << endl;<br> }<br> }<br> <span class="cpp-keyword">return</span> AllDown;<br>}<br><br><span class="cpp-keyword">void</span> Table::Deal()<br>{<br> <span class="cpp-keyword">if</span>(TheCards->Cards.size() <= <span class="cpp-number">12</span>)<br> {<br> *TheCards = *TheCards + *TheBoot;<br> TheBoot->numCards = <span class="cpp-number">0</span>;<br> TheBoot->Cards.clear();<br> TheCards->Shuffle();<br> cout << <span class="cpp-literal">"** Shuffled Deck **"</span> << endl;<br> }<br> Dealer->hand.Hit(TheCards->Draw());<br> <span class="cpp-keyword">for</span>(<span class="cpp-keyword">unsigned</span> <span class="cpp-keyword">int</span> i = <span class="cpp-number">0</span>;i < Players.size(); ++i)<br> {<br> Players<span style="font-weight:bold;">->hand.Hit(TheCards->Draw());<br> Players<span style="font-weight:bold;">->active = <span class="cpp-keyword">true</span>;<br> Players<span style="font-weight:bold;">->busted = <span class="cpp-keyword">false</span>;<br> }<br> Dealer->hand.Hit(TheCards->Draw());<br> <span class="cpp-keyword">for</span>(<span class="cpp-keyword">unsigned</span> <span class="cpp-keyword">int</span> i = <span class="cpp-number">0</span>;i < Players.size(); ++i)<br> {<br> Players<span style="font-weight:bold;">->hand.Hit(TheCards->Draw());<br> }<br>}<br><br><span class="cpp-keyword">void</span> Table::ShowTable()<br>{<br> cout << <span class="cpp-literal">"Dealer: "</span>;<br> Dealer->RevealCards();<br> <span class="cpp-keyword">for</span>(<span class="cpp-keyword">unsigned</span> <span class="cpp-keyword">int</span> i=<span class="cpp-number">0</span>;i < Players.size(); ++i)<br> {<br> cout << Players<span style="font-weight:bold;">->name.c_str() << <span class="cpp-literal">": "</span>;<br> Players<span style="font-weight:bold;">->RevealCards();<br> }<br>}<br><br><span class="cpp-keyword">void</span> Table::DealerTurn()<br>{<br> <span class="cpp-keyword">while</span>(Dealer->Points() < <span class="cpp-number">17</span>)<br> {<br> cout << <span class="cpp-literal">"Dealer takes a card.."</span> << endl;<br> Dealer->hand.Hit(TheCards->Draw());<br> Dealer->RevealCards();<br> }<br><br>}<br><br><span class="cpp-keyword">void</span> Table::PlayersTurn()<br>{<br> vector<Player*>::iterator b = Players.begin();<br> vector<Player*>::iterator e = Players.end();<br> Player * p;<br> <span class="cpp-keyword">while</span>(b != e)<br> {<br> p = *b;<br> <span class="cpp-keyword">if</span>(p->active)<br> {<br> <span class="cpp-keyword">if</span>(p->computer)<br> {<br> AIBasicPlayer(p);<br> }<br> <span class="cpp-keyword">else</span><br> {<br> <span class="cpp-comment">// input player</span><br> }<br> <span class="cpp-keyword">if</span>(p->busted == <span class="cpp-keyword">true</span>)<br> {<br> *TheBoot = *TheBoot + p->hand.GiveBack();<br> }<br> }<br> ++b;<br> }<br>}<br><br><span class="cpp-keyword">void</span> Table::ScoreRound()<br>{<br> <span class="cpp-keyword">unsigned</span> <span class="cpp-keyword">int</span> pnts;<br> <span class="cpp-keyword">unsigned</span> <span class="cpp-keyword">int</span> dpnt = Dealer->Points();<br> <span class="cpp-keyword">float</span> income;<br> vector<Player*>::iterator b = Players.begin();<br> vector<Player*>::iterator e = Players.end();<br> Player * p;<br> <span class="cpp-keyword">for</span>(;b != e; ++b)<br> {<br> p = *b;<br> pnts = p->Points();<br> <span class="cpp-keyword">if</span>( p->busted )<br> {<br> cout << p->name.c_str() << <span class="cpp-literal">" lost $"</span> << p->bet << endl;<br> }<br> <span class="cpp-keyword">else</span> <span class="cpp-keyword">if</span>( (pnts < <span class="cpp-number">22</span> && pnts > dpnt) || dpnt > <span class="cpp-number">21</span>)<br> {<br> cout << p->name.c_str() << <span class="cpp-literal">" wins $"</span>;<br> <span class="cpp-keyword">if</span>(pnts == <span class="cpp-number">21</span> && p->hand.Cards.size() == <span class="cpp-number">2</span>)<br> {<br> income = p->bet + (p->bet * <span class="cpp-number">1</span>.5f);<br> p->funds += income;<br> }<br> <span class="cpp-keyword">else</span><br> {<br> income = (p->bet * <span class="cpp-number">2</span>);<br> p->funds += income;<br> }<br> cout << (income - p->bet) << endl;<br> }<br> <span class="cpp-keyword">else</span> <span class="cpp-keyword">if</span>( pnts == dpnt )<br> {<br> cout << p->name.c_str() << <span class="cpp-literal">" pushed."</span> << endl;<br> income = p->bet;<br> p->funds += income;<br><br> }<br> <span class="cpp-keyword">else</span><br> {<br> cout << p->name.c_str() << <span class="cpp-literal">" lost $"</span> << p->bet << endl;<br> }<br> p->bet = <span class="cpp-number">0</span>;<br> cout << p->name.c_str() << <span class="cpp-literal">" Funds: $"</span> << p->funds << endl;<br><br> }<br>}<br><br><span class="cpp-keyword">void</span> Table::CollectHands()<br>{<br> Deck in;<br> in = in + Dealer->hand.GiveBack();<br> vector<Player*>::iterator b = Players.begin();<br> vector<Player*>::iterator e = Players.end();<br> Player * p;<br> <span class="cpp-keyword">for</span>(;b != e; ++b)<br> {<br> p = *b;<br> <span class="cpp-keyword">if</span>(p->active && (p->busted == <span class="cpp-keyword">false</span>) )<br> in = in + p->hand.GiveBack();<br> }<br> *TheBoot = *TheBoot + in;<br>}<br><br><span class="cpp-keyword">void</span> Table::AIBasicPlayer(Player * player)<br>{<br> Card dupc = Dealer->hand.Cards[<span class="cpp-number">1</span>];<br> <span class="cpp-keyword">bool</span> thinking = <span class="cpp-keyword">true</span>;<br> player->busted = <span class="cpp-keyword">false</span>;<br> <span class="cpp-keyword">while</span>(thinking)<br> {<br> <span class="cpp-comment">/*<br> if(TheCards->Count > 4)<br> {<br> thinking = false;<br> cout << player->name.c_str() << " stands." << endl;<br> break;<br> }<br> */</span><br> <span class="cpp-keyword">if</span>(player->Points() == <span class="cpp-number">21</span> && player->hand.numCards == <span class="cpp-number">2</span>)<br> {<br> cout << player->name.c_str() << <span class="cpp-literal">" blackjack!"</span> << endl;<br> thinking = <span class="cpp-keyword">false</span>;<br> <span class="cpp-keyword">break</span>;<br> }<br> <span class="cpp-keyword">switch</span>(dupc.Point())<br> {<br> <span class="cpp-keyword">case</span> 0x03:<br> <span class="cpp-keyword">case</span> 0x04:<br> <span class="cpp-keyword">case</span> 0x05:<br> <span class="cpp-keyword">case</span> 0x06:<br> {<br> <span class="cpp-keyword">if</span>(player->Points() <= <span class="cpp-number">11</span>)<br> {<br> Card C = player->hand.Hit(TheCards->Draw());<br> cout << player->name.c_str() << <span class="cpp-literal">" takes a card: "</span>;<br> DisplaySV(C.value); cout << <span class="cpp-literal">"Points: "</span> << player->Points() << endl;<br> <span class="cpp-comment">// hit card</span><br> }<br> <span class="cpp-keyword">else</span><br> {<br> thinking = <span class="cpp-keyword">false</span>;<br> cout << player->name.c_str() << <span class="cpp-literal">" stands."</span> << endl;<br> <span class="cpp-comment">// stand</span><br> }<br> <span class="cpp-keyword">break</span>;<br> } <br> <span class="cpp-keyword">case</span> 0x07:<br> <span class="cpp-keyword">case</span> 0x08:<br> <span class="cpp-keyword">case</span> 0x09:<br> <span class="cpp-keyword">case</span> 0x0A:<br> <span class="cpp-comment">//case 0x0B:</span><br> <span class="cpp-comment">//case 0x0C:</span><br> <span class="cpp-comment">//case 0x0D:</span><br> <span class="cpp-keyword">case</span> 0x01:<br> {<br> <span class="cpp-keyword">if</span>( player->Points() <= <span class="cpp-number">16</span> )<br> {<br> Card C = player->hand.Hit(TheCards->Draw());<br> cout << player->name.c_str() << <span class="cpp-literal">" takes a card: "</span>;<br> DisplaySV(C.value); cout << <span class="cpp-literal">"Points: "</span> << player->Points() << endl;<br> <span class="cpp-comment">// hit</span><br> }<br> <span class="cpp-keyword">else</span><br> {<br> thinking = <span class="cpp-keyword">false</span>;<br> cout << player->name.c_str() << <span class="cpp-literal">" stands."</span> << endl;<br> <span class="cpp-comment">// stand</span><br> }<br> <span class="cpp-keyword">break</span>;<br> }<br> <span class="cpp-keyword">default</span>:<br> thinking = <span class="cpp-keyword">false</span>;<br> cout << player->name.c_str() << <span class="cpp-literal">" stands."</span> << endl;<br> <span class="cpp-comment">// stand</span><br> <span class="cpp-keyword">break</span>;<br> }<br> <span class="cpp-comment">//****</span><br> <span class="cpp-comment">// check for busted</span><br> <span class="cpp-comment">//****</span><br> <span class="cpp-keyword">if</span>(player->Points() > <span class="cpp-number">21</span>)<br> {<br> cout << player->name.c_str() << <span class="cpp-literal">" busted."</span> << endl;<br> thinking = <span class="cpp-keyword">false</span>;<br> player->busted = <span class="cpp-keyword">true</span>;<br> }<br> }<br>}<br><br></pre></div><!–ENDSCRIPT–><br>It's in progress still in places.<div>
</div>
---
Michael Tanczos