im writing in here

Published April 28, 2005
Advertisement
I have alot of the little bugs worked out of the game logic code. Some new stuff was added for a computer player AI with Basic Stratigy plus a High-Low count. I was going to add input so the player wasnt always a computer player, but I didnt really try too hard. I was busy cleaning up the rules logic, it was some times paying out on player busts. I still have a some-how-broken bool that is getting a true reading, when the last function set it to false. But oh well, here is a run that went better than any have with the current build.
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>
Previous Entry a journal entry
Next Entry Untitled
0 likes 1 comments

Comments

Michael Tanczos
Try using FTP instead of the file manager. Since you are GDNet+ you can just FTP to members.gamedev.net with your gamedev.net username and password.

---
Michael Tanczos
April 30, 2005 12:46 PM
You must log in to join the conversation.
Don't have a GameDev.net account? Sign up!
Profile
Author
Advertisement

Latest Entries

Not bad.

1137 views

Zoned out.

1010 views

more

1089 views

Slow down champ.

907 views

I'll be back

870 views

Busy.

1025 views

oh teh noes!!

914 views
Advertisement