<html>

<head><script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
<!-- MyFirstUnitAd -->
<ins class="adsbygoogle"
     style="display:inline-block;width:970px;height:250px"
     data-ad-client="ca-pub-5778386704669218"
     data-ad-slot="1503492166"></ins>
<script>
(adsbygoogle = window.adsbygoogle || []).push({});
</script>

<meta http-equiv="Content-Language" content="zh-cn">
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta name="GENERATOR" content="Microsoft FrontPage 5.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<title>Population</title>
</head>

<body>



<p align="left"><font size="6" color="#FF0000"><b><span lang="en-ca">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>
</b></font><span lang="en-ca"><font size="6" color="#FF0000"><b>Poke---Shuffler</b></font></span></p>

<div align="left">
  <pre><b><font color="#ff0000" size="5">A.<span lang="en-ca">First</span> Edition</font></b></pre>
</div>
<div align="left">
  <pre><b>This is actually </b><span lang="en-ca"><b>first edition of my poke class and it has only a trivial function of shuffling.</b></span></pre>
</div>
<div align="left">
  <pre><b><font color="#ff0000" size="5"><span lang="en-ca">B</span>.<span lang="en-ca"><a name="problem"></a>The problem</span></font></b></pre>
</div>
<div align="left">
  <pre><span lang="en-ca"><b>Everybody plays poke, right? And I simply want to write a program that can play the simple game. There have been</b></span></pre>
</div>
<div align="left">
  <pre><span lang="en-ca"><b>countless such programs.</b></span></pre>
</div>
<div align="left">
  <b><font color="#ff0000" size="5"><span lang="en-ca">C</span>.<span lang="en-ca">The
  </span></font></b><span lang="en-ca"><font size="5" color="#FF0000"><b>idea of 
  program</b></font></span></div>
<div align="left">
  <pre><span lang="en-ca"><b>How to design your classes? I think it is a good practice for me to design such container classes, such as</b></span></pre>
</div>
<div align="left">
  <pre><span lang="en-ca"><b>Suit is in Card, Card is in Player. You see one Suit has 13 cards, and one Card has four Suits.</b></span></pre>
</div>
<div align="left">
  <pre><span lang="en-ca"><b>I used a lot of operator overloading, and the friend function is really annoying! I even re-installed the VC++!</b></span></pre>
</div>
<div align="left">
  <pre><span lang="en-ca"><b>I cannot figure out why it always gives me a wrong message on the friend function of a class. It seems that compiler</b></span></pre>
</div>
<div align="left">
  <pre><span lang="en-ca"><b>cannot recognize this function as friend function unless it is defined as inline function. Why????</b></span></pre>
</div>
<div align="left">
  <pre><span lang="en-ca"><b>Another painful thing is that I cannot declare variables or constants in header file cause the driver .cpp file </b></span></pre>
</div>
<div align="left">
  <pre><span lang="en-ca"><b>need to include the header file and then this variables will be re-declared! Why???</b></span></pre>
</div>
<div align="left">
  <pre><b><font color="#ff0000" size="5">D.<span lang="en-ca"><a name="Method"></a>The </span>major functions</font></b></pre>
</div>
<div align="left">
  <pre>กก</pre>
</div>
<pre>//Poke.h
#ifndef  POKE_H
#define POKE_H
#include &lt;iostream&gt;

using namespace std;


enum SuitColor
{Spade, Heart, Diamond, Club};

enum ColorCard
{J =11, Q = 12, K= 13, A=14};

const int SuitLength = 13;

enum Status
{InHand, Played};

enum Position
{UpHand, Opposit, DownHand, SelfHand};




//a help class
class Suit
{
	friend ostream&amp; operator&lt;&lt;(ostream&amp; out, const Suit&amp; mySuit)
	{
		out&lt;&lt;&quot;suit name is &quot;&lt;&lt;mySuit.suitName&lt;&lt;&quot; length is &quot;&lt;&lt;mySuit.length&lt;&lt;&quot;\n&quot;;
		for (int i=0; i&lt;mySuit.length; i++)
		{
			if (mySuit.suit[i]&gt;1&amp;&amp;mySuit.suit[i]&lt;11)
			{
				out&lt;&lt;mySuit.suit[i]&lt;&lt;&quot; &quot;;
			}
			else
			{
				switch (mySuit.suit[i])
				{
				case 14:
					out&lt;&lt;&quot;A&quot;&lt;&lt;&quot; &quot;;
					break;
				case 11:
					out&lt;&lt;&quot;J&quot;&lt;&lt;&quot; &quot;;
					break;
				case 12:
					out&lt;&lt;&quot;Q&quot;&lt;&lt;&quot; &quot;;
					break;
				case 13:
					out&lt;&lt;&quot;K&quot;&lt;&lt;&quot; &quot;;
					break;
				}
			}
		}
		return out;
	}

private:
	int suit[SuitLength];
	int length;
	char* suitName;
public:
	const char* getName() const { return suitName;}
	void setName(const char* name);
	const int&amp; operator[](int index) const  {return suit[index];}
	int&amp; operator[](int index) { return suit[index];}
	int getLength() const { return length;}
	void operator()(int newCard);
};

class Card
{
	friend ostream&amp; operator&lt;&lt;(ostream&amp; out, const Card&amp; myCard)
	{
		for (int i=0; i&lt;4; i++)
		{
			out&lt;&lt;myCard.cards[i]&lt;&lt;&quot;\n&quot;;
		}
		out&lt;&lt;&quot;\n&quot;;
		return out;
	}
private:
	Suit cards[4];
	int cardNumber;
public:
	const Suit&amp; operator[](int suit) const {return cards[suit];}
	Suit&amp; operator[](int suit) { return cards[suit];}
	bool addCard(int suitColor, int card);
	Card();
};

class Poke
{
	//I don't know why I have to define it as an inline function
	friend ostream&amp; operator&lt;&lt;(ostream&amp; out, const Poke&amp; poke)
	{
		for (int i=0; i&lt;4; i++)
		{
			for (int j=0; j&lt;poke.myHand[InHand][i].getLength(); j++)
			{
				out&lt;&lt;poke.myHand[InHand][i][j]&lt;&lt;&quot; &quot;;
			}		
		}	
		return out;
	}

private:
	static int round;
	Card myHand[2];
	Card enemy[3];
public:
	void setHand(const Card&amp;  aHand);
};


class Player
{
	friend ostream&amp; operator&lt;&lt;(ostream&amp; out, const Player&amp; player)
	{
		for (int i=0; i&lt;4; i++)
		{
			out&lt;&lt;shuffledCards[i]&lt;&lt;&quot;\n&quot;;
		}
		return out;
	}


private:
	static Card shuffledCards[4];
	void initialize();
public:
	void shuffle();
	Card&amp; operator[](int index) { return shuffledCards[index];}
	
};

#endif

	
	
<span lang="en-ca">//poke.cpp</span></pre>
<pre>#include &lt;iostream&gt;
#include &quot;Poke.h&quot;


const char* SuitName[4] = {&quot;Spade&quot;, &quot;Heart&quot;, &quot;Diamond&quot;, &quot;Club&quot;};

Card Player::shuffledCards[4];
int Poke::round = 0;

void Poke::setHand(const Card&amp; aHand)
{
	for (int i=0; i&lt;4; i++)
	{
		for (int j=0; j&lt;aHand[i].getLength(); j++)
		{
			myHand[InHand][i][j] = aHand[i][j];
		}
	}
}

void Player::initialize()
{
	for (int i=0; i&lt;4; i++)
	{
		for (int j=1; j&lt;14; j++)
		{
			shuffledCards[i].addCard(i, j);
		}
	}
}


void Player::shuffle()
{
	int index = rand()%4;
//	initialize();
	for (int i=0; i&lt;4; i++)
	{
		for (int j=2; j&lt;=SuitLength+1; j++)
		{
			//will do until adding succeeded
			while (true)
			{
				index = rand()%4;
				if (shuffledCards[index].addCard(i, j))
				{
					break;
				}
			}
		}
	}
}

bool Card::addCard(int suitColor, int card)
{
	if (cardNumber==SuitLength)
	{
		return false;
	}
	else
	{
		cards[suitColor](card);
		cardNumber++;
		return true;
	}
}


Card::Card()
{
	cardNumber = 0;
	for (int i=0; i&lt;4; i++)
	{
		cards[i].setName(SuitName[i]);
	}
}

void Suit::setName(const char* name)
{
	delete []suitName;
	suitName = new char(strlen(name)+1);
	strcpy(suitName, name);
}

void Suit::operator ()(int newCard)
{
	int first= newCard, second;
	bool insertNow = false;
	bool small = true;
	for (int i=0; i&lt;=length; i++)
	{
		if (!insertNow&amp;&amp; newCard&lt;suit[i])
		{
			small = true;
		}
		if (!insertNow&amp;&amp;small&amp;&amp;newCard&gt;suit[i])
		{
			insertNow = true;
		}
		if (insertNow)
		{
			//insert here
			second = suit[i];
			suit[i] = first;
			first = second;
		}
	}
	length++;

}




</pre>
<pre>
<span lang="en-ca">//driver.cpp</span></pre>
<pre>#include &lt;ctime&gt;
#include &quot;Poke.h&quot;

#include &lt;iostream&gt;


using namespace std;



int main()
{
	srand(time(0));
	Player P;
	P.shuffle();
	cout&lt;&lt;P;
	return 0;
}
</pre>
<pre>กก</pre>
<pre>


			
</pre>
<pre><font color="#FF0000"><a name="Result"></a>The following is result of program: </font></pre>
<pre>suit name is Spade length is 3
A Q 2
suit name is Heart length is 3
8 7 5
suit name is Diamond length is 5
K 10 8 4 2
suit name is Club length is 2
Q 4


suit name is Spade length is 3
J 9 3
suit name is Heart length is 5
A K J 10 6
suit name is Diamond length is 3
Q 9 5
suit name is Club length is 2
7 6


suit name is Spade length is 4
K 8 7 6
suit name is Heart length is 1
2
suit name is Diamond length is 2
A 6
suit name is Club length is 6
A K J 9 3 2


suit name is Spade length is 3
10 5 4
suit name is Heart length is 4
Q 9 4 3
suit name is Diamond length is 3
J 7 3
suit name is Club length is 3
10 8 5


Press any key to continue

</pre>

<p>กก</p>

<pre></pre>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;                                   
&nbsp;&nbsp;&nbsp; <a href="WhoAmI.htm">                  







                       <img src="picture/back.gif" style="border: medium none" alt="back.gif (341 bytes)" width="32" height="35"></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
<a href="index.htm"><img src="picture/up.gif" style="border: medium none" alt="up.gif (335 bytes)" width="35" height="32"></a>       &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;                         
<img src="picture/next.gif" style="border: medium none" alt="next.gif (337 bytes)" width="32" height="35">          


</p>

</body>

</html>