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}}== |