Finished Lab 4 Pt 1
Dependencies: mbed Sounds PinDetect
Buzzy.cpp
- Committer:
- trmontgomery
- Date:
- 2019-04-05
- Revision:
- 0:daf9e2f8e1a1
File content as of revision 0:daf9e2f8e1a1:
#include "Buzzy.h" #include "Ghosts.h" #include "BuzzyGraphics.h" #include "uLCD_4DGL.h" #include "Speaker.h" extern char gDynaMaze[MAZE_NUM_ROW][MAZE_NUM_COL]; extern Ghosts gGhosts[NUM_GHOSTS]; extern Buzzy gBuzzy; extern uLCD_4DGL guLCD; extern Speaker gSpeakerOut; extern DigitalOut myled1; ///////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////// // Constructor Buzzy::Buzzy(enDIRECTIONS inDir, unsigned int inRow, unsigned int inCol): Sprite(inDir, inRow, inCol) { m_CurrentDirection = RIGHT_DIR; } /////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////// void Buzzy::Move() { if (m_DesiredDirection == NO_DIR) { // Nothing to do // Switch over to the siren sound gSpeakerOut.SwitchSound(Speaker::SIREN); return; } //Try to move Buzzy in desired direction switch(m_DesiredDirection){ case UP_DIR: { if (IsMoveAllowed(m_RowPos+1, m_ColPos)) { m_CurrentDirection = UP_DIR; } else { //m_CurrentDirection = NO_DIR; } break; } case DOWN_DIR: { if (IsMoveAllowed(m_RowPos-1, m_ColPos)) { m_CurrentDirection = DOWN_DIR; }else { //m_CurrentDirection = NO_DIR; } break; } case LEFT_DIR: { if (IsMoveAllowed(m_RowPos, m_ColPos-1)) { m_CurrentDirection = LEFT_DIR; }else { // m_CurrentDirection = NO_DIR; } break; } case RIGHT_DIR: { if (IsMoveAllowed(m_RowPos, m_ColPos+1)) { m_CurrentDirection = RIGHT_DIR; }else { //m_CurrentDirection = NO_DIR; } break; } } //if you can't move in the desired direction keep going in the current direction switch(m_CurrentDirection){ case UP_DIR:{ if (IsMoveAllowed(m_RowPos+1, m_ColPos)){ gBuzzy.DrawInNewLocation(m_RowPos+1, m_ColPos); } break; } case DOWN_DIR:{ if (IsMoveAllowed(m_RowPos-1, m_ColPos)){ gBuzzy.DrawInNewLocation(m_RowPos-1, m_ColPos); } break; } case LEFT_DIR:{ if (IsMoveAllowed(m_RowPos, m_ColPos-1)){ gBuzzy.DrawInNewLocation(m_RowPos, m_ColPos-1); } break; } case RIGHT_DIR:{ if (IsMoveAllowed(m_RowPos, m_ColPos+1)){ gBuzzy.DrawInNewLocation(m_RowPos, m_ColPos+1); } break; } } } /////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////// void Buzzy::DrawInNewLocation(const int &nRow,const int &nCol) { int x1, y1; // Test if we hit a honeydrop or fruit or ghost if (gDynaMaze[nRow][nCol] == HONEYDROP_SQUARE){ gBuzzy.honey++; gSpeakerOut.SwitchSound(Speaker::CHOMP); myled1 = !myled1; } else { gSpeakerOut.SwitchSound(Speaker::SIREN); myled1 = !myled1; } x1 = (3*m_RowPos+1)-4; y1 = (3*m_ColPos+1)-4; guLCD.BLIT(x1, y1, 9, 9, &BuzzyIcon[2][0][0]); //update the dynamic maze gDynaMaze[m_RowPos][m_ColPos] = 0; gDynaMaze[nRow][nCol] = 5; //draw Buzzy in new location x1 = (3*nRow+1)-4; y1 = (3*nCol+1)-4; guLCD.BLIT(x1, y1, 9, 9, &BuzzyIcon[GetImageIndex()][0][0]); //update Buzzy's location gBuzzy.SetLocation(nRow, nCol); } /////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////// bool Buzzy::DidGhostGetBuzzy() { return false; } /////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////// bool Buzzy::IsMoveAllowed(const int &nNewRow, const int &nNewCol) { bool a,b,c; switch(m_DesiredDirection){ case UP_DIR: { a = gCnstMaze[nNewRow+1][nNewCol-1] != 1; b = gCnstMaze[nNewRow+1][nNewCol] != 1; c = gCnstMaze[nNewRow+1][nNewCol+1] != 1; break; } case DOWN_DIR: { a = gCnstMaze[nNewRow-1][nNewCol-1] != 1; b = gCnstMaze[nNewRow-1][nNewCol] != 1; c = gCnstMaze[nNewRow-1][nNewCol+1] != 1; break; } case LEFT_DIR: { a = gCnstMaze[nNewRow-1][nNewCol-1] != 1; b = gCnstMaze[nNewRow][nNewCol-1] != 1; c = gCnstMaze[nNewRow+1][nNewCol-1] != 1; break; } case RIGHT_DIR: { a = gCnstMaze[nNewRow-1][nNewCol+1] != 1; b = gCnstMaze[nNewRow][nNewCol+1] != 1; c = gCnstMaze[nNewRow+1][nNewCol+1] != 1; break; } } return a && b && c; }