class Cup { float m_X; float m_Y; boolean m_Eliminated; int m_BeerState; // 0 - calm // 1 - small splash // 2 - big splash int m_CurrentImageIndex; int m_SplashCounter; void Reset() { m_X = 0.0; m_Y = 0.0; m_BeerState = 0; m_CurrentImageIndex = 5; m_SplashCounter = 0; m_Eliminated = false; } void DrawTop( float opacity, float offsetX, float offsetY ) { tint( 255.0, opacity ); image( IMAGE_POOL.m_Images[0], m_X + offsetX, m_Y + offsetY ); } void DrawBottom( float opacity, float offsetX, float offsetY ) { tint( 255.0, opacity ); image( IMAGE_POOL.m_Images[1], m_X + offsetX, m_Y + offsetY ); } void DrawBeer( float opacity, float offsetX, float offsetY ) { UpdateBeer(); tint( 255.0, opacity ); image( IMAGE_POOL.m_Images[m_CurrentImageIndex], m_X + offsetX, m_Y + offsetY ); } void UpdateBeer() { switch( m_BeerState ) { case 0: m_CurrentImageIndex = 5; return; case 1: case 2: { switch( m_SplashCounter ) { case 0: m_CurrentImageIndex = 6; break; case 2: m_CurrentImageIndex = 7; break; case 4: m_CurrentImageIndex = 8; break; case 6: m_CurrentImageIndex = 9; break; case 8: m_BeerState = 0; m_SplashCounter = 0; m_CurrentImageIndex = 5; return; } ++m_SplashCounter; } } } void SetSmallSplash() { m_BeerState = 1; } void SetBigSplash() { m_BeerState = 2; } } class GameTable { int m_NumCups; Cup [] m_Cups; float m_CupWidth; float m_CupHeight; void Initialize() { int i; m_CupWidth = IMAGE_POOL.m_Images[0].width; m_CupHeight = IMAGE_POOL.m_Images[0].height; m_NumCups = 10; m_Cups = new Cup[m_NumCups]; for( i = 0; i < m_NumCups; ++i ) { m_Cups[i] = new Cup(); } Reset(); /* 0 1 2 3 -row 0 4 5 6 -row 1 7 8 -row 2 9 -row 3 */ } void Reset() { int i; for( i = 0; i < m_NumCups; ++i ) { m_Cups[i].Reset(); } m_Cups[0].m_X = 33; m_Cups[0].m_Y = 10; m_Cups[1].m_X = 67; m_Cups[1].m_Y = 10; m_Cups[2].m_X = 101; m_Cups[2].m_Y = 10; m_Cups[3].m_X = 135; m_Cups[3].m_Y = 10; m_Cups[4].m_X = 50; m_Cups[4].m_Y = 30; m_Cups[5].m_X = 84; m_Cups[5].m_Y = 30; m_Cups[6].m_X = 118; m_Cups[6].m_Y = 30; m_Cups[7].m_X = 67; m_Cups[7].m_Y = 50; m_Cups[8].m_X = 101; m_Cups[8].m_Y = 50; m_Cups[9].m_X = 84; m_Cups[9].m_Y = 70; } void DrawCupTops( float opacity, float offsetX, float offsetY, int rangeLow, int rangeHigh ) { int i; /* for( i = 0; i < 10; ++i ) { Vector2D cupCenter = new Vector2D( GAME_TABLE.m_Cups[i].m_X + (GAME_TABLE.m_CupWidth / 2.0), GAME_TABLE.m_Cups[i].m_Y + (GAME_TABLE.m_CupHeight / 4.0) ); ellipse( cupCenter.x, cupCenter.y, 32, 16 ); } /**/ /**/ for( i = rangeLow; i < rangeHigh; ++i ) { if( m_Cups[i].m_Eliminated == false ) { m_Cups[i].DrawTop( opacity, offsetX, offsetY ); } } /**/ } void DrawCupBottoms( float opacity, float offsetX, float offsetY, int rangeLow, int rangeHigh ) { int i; for( i = rangeLow; i < rangeHigh; ++i ) { if( m_Cups[i].m_Eliminated == false ) { m_Cups[i].DrawBottom( opacity, offsetX, offsetY ); } } } void DrawBeer( float opacity, float offsetX, float offsetY, int rangeLow, int rangeHigh ) { int i; for( i = rangeLow; i < rangeHigh; ++i ) { if( m_Cups[i].m_Eliminated == false ) { m_Cups[i].DrawBeer( opacity, offsetX, offsetY ); } } } /* void DrawCups( float opacity, float offsetX, float offsetY, int ballRow ) { DrawCupTops( opacity, offsetX, offsetY, 0, 4 ); } /**/ /**/ void DrawCups( float opacity, float offsetX, float offsetY, int ballRow ) { DrawCupTops( opacity, offsetX, offsetY, 0, 4 ); DrawBeer( opacity, offsetX, offsetY, 0, 4 ); if( ballRow == 0 ) { BALL.Draw( opacity, offsetX, offsetY ); } DrawCupBottoms( opacity, offsetX, offsetY, 0, 4 ); DrawCupTops( opacity, offsetX, offsetY, 4, 7 ); DrawBeer( opacity, offsetX, offsetY, 4, 7 ); if( ballRow == 1 ) { BALL.Draw( opacity, offsetX, offsetY ); } DrawCupBottoms( opacity, offsetX, offsetY, 4, 7 ); DrawCupTops( opacity, offsetX, offsetY, 7, 9 ); DrawBeer( opacity, offsetX, offsetY, 7, 9 ); if( ballRow == 2 ) { BALL.Draw( opacity, offsetX, offsetY ); } DrawCupBottoms( opacity, offsetX, offsetY, 7, 9 ); DrawCupTops( opacity, offsetX, offsetY, 9, 10 ); DrawBeer( opacity, offsetX, offsetY, 9, 10 ); if( ballRow == 3 ) { BALL.Draw( opacity, offsetX, offsetY ); } DrawCupBottoms( opacity, offsetX, offsetY, 9, 10 ); } /**/ void DrawTable( float opacity, float offsetX, float offsetY ) { tint( 255.0, opacity ); image( IMAGE_POOL.m_Images[4], 23 + offsetX, 8 + offsetY ); } void CheckForWin() { int i; for( i = 0; i < m_NumCups; ++i ) { if( m_Cups[i].m_Eliminated == false ) { return; } } //all cups are eliminated MENUS.SetWin(); } }