Set puzzle: Difference between revisions

Content added Content deleted
Line 161: Line 161:
return 0;
return 0;
}</lang>
}</lang>

=={{header|C++}}==
<lang cpp>
#include <windows.h>
#include <iostream>
#include <deque>
#include <string>
#include <algorithm>

//--------------------------------------------------------------------------------------------------
using namespace std;

//--------------------------------------------------------------------------------------------------
enum _color { red, green, purple, cndn };
enum _number { one, two, three, nndn };
enum _symbol { oval, squiggle, diamond, sndn };
enum _shade { solid, open, striped, hndn };

//--------------------------------------------------------------------------------------------------
class _card
{
public:
_card() : clr( cndn ), nbr( nndn ), syb( sndn ), shd( hndn ), used( false ) {}
_color getColor () const { return clr; }
_number getNumber() const { return nbr; }
_symbol getSymbol() const { return syb; }
_shade getShade () const { return shd; }
bool isUsed () const { return used; }
void setColor ( _color c ) { clr = c; }
void setNumber( _number n ) { nbr = n; }
void setSymbol( _symbol s ) { syb = s; }
void setShade ( _shade h ) { shd = h; }
void setUsed ( bool u ) { used = u; }

void printMe ()
{
string c, n, s, h;
switch( clr )
{
case red: c = "red"; break;
case green: c = "green"; break;
case purple: c = "purple"; break;
default: c = "";
}
switch( nbr )
{
case one: n = "one"; break;
case two: n = "two"; break;
case three: n = "three"; break;
default: n = "";
}

switch( syb )
{
case oval: s = "oval"; break;
case squiggle: s = "squiggle"; break;
case diamond: s = "diamond"; break;
default: s = "";
}

switch( shd )
{
case solid: h = "solid"; break;
case open: h = "open"; break;
case striped: h = "striped"; break;
default: h = "";
}

cout << c << ", " << n << ", " << s << ", " << h << endl;
}

//--------------------------------------------------------------------------------------------------
private:
_color clr;
_number nbr;
_symbol syb;
_shade shd;
bool used;
};
//--------------------------------------------------------------------------------------------------
class _deck
{
public:
_deck()
{
for( int c = 0; c < 3; c++ )
for( int n = 0; n < 3; n++ )
for( int s = 0; s < 3; s++ )
for( int h = 0; h < 3; h++ )
{
_card crd;
crd.setColor( ( _color )c );
crd.setNumber( ( _number )n );
crd.setSymbol( ( _symbol )s );
crd.setShade( ( _shade )h );
deck.push_back( crd );
}

for( int s = 0; s < 4; s++ )
random_shuffle( deck.begin(), deck.end() );

}

_card deal()
{
_card c;
for( deque<_card>::iterator it = deck.begin(); it != deck.end(); it++ )
{
if( !( *it ).isUsed() )
{
c = *it;
( *it ).setUsed( true );
break;
}
}

if( c.getColor() == cndn )
{
for( deque<_card>::iterator it = deck.begin(); it != deck.end(); it++ )
( *it ).setUsed( false );

for( int s = 0; s < 4; s++ )
random_shuffle( deck.begin(), deck.end() );

return deal();
}

return c;
}

//--------------------------------------------------------------------------------------------------
private:
deque<_card> deck;
};
//--------------------------------------------------------------------------------------------------
int _tmain(int argc, _TCHAR* argv[])
{
srand( GetTickCount() );
_deck d;
_card mc;
char c;
int i, j;

while( true )
{
system( "cls" );
cout << "What do you wanna play: <B>asic or <A>dvanced? ( <Q>uit )";
cin >> c;

if( c == 'Q' || c == 'q' ) return 0;
system( "cls" );

switch( c )
{
case 'A':
case 'a':
for( i = 0; i < 4; i++ )
{
for( j = 0; j < 3; j++ )
{
mc = d.deal();
mc.printMe();
}
cout << endl;
}
break;
case 'B':
case 'b':
for( i = 0; i < 3; i++ )
{
for( j = 0; j < 3; j++ )
{
mc = d.deal();
mc.printMe();
}
cout << endl;
}
}

cout << endl << endl;

system( "pause" );
}

return 0;
}
//--------------------------------------------------------------------------------------------------
</lang>


=={{header|D}}==
=={{header|D}}==