Finished Lab 4 Pt 1
Dependencies: mbed Sounds PinDetect
Buzzy.cpp@0:daf9e2f8e1a1, 2019-04-05 (annotated)
- Committer:
- trmontgomery
- Date:
- Fri Apr 05 19:46:26 2019 +0000
- Revision:
- 0:daf9e2f8e1a1
Finished Lab 4 pt 1
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
trmontgomery | 0:daf9e2f8e1a1 | 1 | #include "Buzzy.h" |
trmontgomery | 0:daf9e2f8e1a1 | 2 | #include "Ghosts.h" |
trmontgomery | 0:daf9e2f8e1a1 | 3 | #include "BuzzyGraphics.h" |
trmontgomery | 0:daf9e2f8e1a1 | 4 | #include "uLCD_4DGL.h" |
trmontgomery | 0:daf9e2f8e1a1 | 5 | #include "Speaker.h" |
trmontgomery | 0:daf9e2f8e1a1 | 6 | |
trmontgomery | 0:daf9e2f8e1a1 | 7 | extern char gDynaMaze[MAZE_NUM_ROW][MAZE_NUM_COL]; |
trmontgomery | 0:daf9e2f8e1a1 | 8 | extern Ghosts gGhosts[NUM_GHOSTS]; |
trmontgomery | 0:daf9e2f8e1a1 | 9 | extern Buzzy gBuzzy; |
trmontgomery | 0:daf9e2f8e1a1 | 10 | extern uLCD_4DGL guLCD; |
trmontgomery | 0:daf9e2f8e1a1 | 11 | extern Speaker gSpeakerOut; |
trmontgomery | 0:daf9e2f8e1a1 | 12 | extern DigitalOut myled1; |
trmontgomery | 0:daf9e2f8e1a1 | 13 | |
trmontgomery | 0:daf9e2f8e1a1 | 14 | |
trmontgomery | 0:daf9e2f8e1a1 | 15 | |
trmontgomery | 0:daf9e2f8e1a1 | 16 | ///////////////////////////////////////////////////////////////////////// |
trmontgomery | 0:daf9e2f8e1a1 | 17 | ///////////////////////////////////////////////////////////////////////// |
trmontgomery | 0:daf9e2f8e1a1 | 18 | ///////////////////////////////////////////////////////////////////////// |
trmontgomery | 0:daf9e2f8e1a1 | 19 | // Constructor |
trmontgomery | 0:daf9e2f8e1a1 | 20 | Buzzy::Buzzy(enDIRECTIONS inDir, unsigned int inRow, unsigned int inCol): |
trmontgomery | 0:daf9e2f8e1a1 | 21 | Sprite(inDir, inRow, inCol) |
trmontgomery | 0:daf9e2f8e1a1 | 22 | { |
trmontgomery | 0:daf9e2f8e1a1 | 23 | m_CurrentDirection = RIGHT_DIR; |
trmontgomery | 0:daf9e2f8e1a1 | 24 | } |
trmontgomery | 0:daf9e2f8e1a1 | 25 | /////////////////////////////////////////////////////////////////////////////// |
trmontgomery | 0:daf9e2f8e1a1 | 26 | /////////////////////////////////////////////////////////////////////////////// |
trmontgomery | 0:daf9e2f8e1a1 | 27 | /////////////////////////////////////////////////////////////////////////////// |
trmontgomery | 0:daf9e2f8e1a1 | 28 | void Buzzy::Move() |
trmontgomery | 0:daf9e2f8e1a1 | 29 | { |
trmontgomery | 0:daf9e2f8e1a1 | 30 | |
trmontgomery | 0:daf9e2f8e1a1 | 31 | if (m_DesiredDirection == NO_DIR) |
trmontgomery | 0:daf9e2f8e1a1 | 32 | { |
trmontgomery | 0:daf9e2f8e1a1 | 33 | // Nothing to do |
trmontgomery | 0:daf9e2f8e1a1 | 34 | // Switch over to the siren sound |
trmontgomery | 0:daf9e2f8e1a1 | 35 | gSpeakerOut.SwitchSound(Speaker::SIREN); |
trmontgomery | 0:daf9e2f8e1a1 | 36 | return; |
trmontgomery | 0:daf9e2f8e1a1 | 37 | } |
trmontgomery | 0:daf9e2f8e1a1 | 38 | |
trmontgomery | 0:daf9e2f8e1a1 | 39 | //Try to move Buzzy in desired direction |
trmontgomery | 0:daf9e2f8e1a1 | 40 | switch(m_DesiredDirection){ |
trmontgomery | 0:daf9e2f8e1a1 | 41 | |
trmontgomery | 0:daf9e2f8e1a1 | 42 | case UP_DIR: { |
trmontgomery | 0:daf9e2f8e1a1 | 43 | if (IsMoveAllowed(m_RowPos+1, m_ColPos)) { |
trmontgomery | 0:daf9e2f8e1a1 | 44 | m_CurrentDirection = UP_DIR; |
trmontgomery | 0:daf9e2f8e1a1 | 45 | } else { |
trmontgomery | 0:daf9e2f8e1a1 | 46 | //m_CurrentDirection = NO_DIR; |
trmontgomery | 0:daf9e2f8e1a1 | 47 | } |
trmontgomery | 0:daf9e2f8e1a1 | 48 | break; |
trmontgomery | 0:daf9e2f8e1a1 | 49 | } |
trmontgomery | 0:daf9e2f8e1a1 | 50 | |
trmontgomery | 0:daf9e2f8e1a1 | 51 | case DOWN_DIR: { |
trmontgomery | 0:daf9e2f8e1a1 | 52 | if (IsMoveAllowed(m_RowPos-1, m_ColPos)) { |
trmontgomery | 0:daf9e2f8e1a1 | 53 | m_CurrentDirection = DOWN_DIR; |
trmontgomery | 0:daf9e2f8e1a1 | 54 | }else { |
trmontgomery | 0:daf9e2f8e1a1 | 55 | //m_CurrentDirection = NO_DIR; |
trmontgomery | 0:daf9e2f8e1a1 | 56 | } |
trmontgomery | 0:daf9e2f8e1a1 | 57 | break; |
trmontgomery | 0:daf9e2f8e1a1 | 58 | } |
trmontgomery | 0:daf9e2f8e1a1 | 59 | |
trmontgomery | 0:daf9e2f8e1a1 | 60 | case LEFT_DIR: { |
trmontgomery | 0:daf9e2f8e1a1 | 61 | if (IsMoveAllowed(m_RowPos, m_ColPos-1)) { |
trmontgomery | 0:daf9e2f8e1a1 | 62 | m_CurrentDirection = LEFT_DIR; |
trmontgomery | 0:daf9e2f8e1a1 | 63 | }else { |
trmontgomery | 0:daf9e2f8e1a1 | 64 | // m_CurrentDirection = NO_DIR; |
trmontgomery | 0:daf9e2f8e1a1 | 65 | } |
trmontgomery | 0:daf9e2f8e1a1 | 66 | break; |
trmontgomery | 0:daf9e2f8e1a1 | 67 | } |
trmontgomery | 0:daf9e2f8e1a1 | 68 | |
trmontgomery | 0:daf9e2f8e1a1 | 69 | case RIGHT_DIR: { |
trmontgomery | 0:daf9e2f8e1a1 | 70 | if (IsMoveAllowed(m_RowPos, m_ColPos+1)) { |
trmontgomery | 0:daf9e2f8e1a1 | 71 | m_CurrentDirection = RIGHT_DIR; |
trmontgomery | 0:daf9e2f8e1a1 | 72 | }else { |
trmontgomery | 0:daf9e2f8e1a1 | 73 | //m_CurrentDirection = NO_DIR; |
trmontgomery | 0:daf9e2f8e1a1 | 74 | } |
trmontgomery | 0:daf9e2f8e1a1 | 75 | break; |
trmontgomery | 0:daf9e2f8e1a1 | 76 | } |
trmontgomery | 0:daf9e2f8e1a1 | 77 | } |
trmontgomery | 0:daf9e2f8e1a1 | 78 | |
trmontgomery | 0:daf9e2f8e1a1 | 79 | //if you can't move in the desired direction keep going in the current direction |
trmontgomery | 0:daf9e2f8e1a1 | 80 | switch(m_CurrentDirection){ |
trmontgomery | 0:daf9e2f8e1a1 | 81 | case UP_DIR:{ |
trmontgomery | 0:daf9e2f8e1a1 | 82 | if (IsMoveAllowed(m_RowPos+1, m_ColPos)){ |
trmontgomery | 0:daf9e2f8e1a1 | 83 | gBuzzy.DrawInNewLocation(m_RowPos+1, m_ColPos); |
trmontgomery | 0:daf9e2f8e1a1 | 84 | } |
trmontgomery | 0:daf9e2f8e1a1 | 85 | break; |
trmontgomery | 0:daf9e2f8e1a1 | 86 | } |
trmontgomery | 0:daf9e2f8e1a1 | 87 | case DOWN_DIR:{ |
trmontgomery | 0:daf9e2f8e1a1 | 88 | if (IsMoveAllowed(m_RowPos-1, m_ColPos)){ |
trmontgomery | 0:daf9e2f8e1a1 | 89 | gBuzzy.DrawInNewLocation(m_RowPos-1, m_ColPos); |
trmontgomery | 0:daf9e2f8e1a1 | 90 | } |
trmontgomery | 0:daf9e2f8e1a1 | 91 | break; |
trmontgomery | 0:daf9e2f8e1a1 | 92 | } |
trmontgomery | 0:daf9e2f8e1a1 | 93 | case LEFT_DIR:{ |
trmontgomery | 0:daf9e2f8e1a1 | 94 | if (IsMoveAllowed(m_RowPos, m_ColPos-1)){ |
trmontgomery | 0:daf9e2f8e1a1 | 95 | gBuzzy.DrawInNewLocation(m_RowPos, m_ColPos-1); |
trmontgomery | 0:daf9e2f8e1a1 | 96 | } |
trmontgomery | 0:daf9e2f8e1a1 | 97 | break; |
trmontgomery | 0:daf9e2f8e1a1 | 98 | } |
trmontgomery | 0:daf9e2f8e1a1 | 99 | case RIGHT_DIR:{ |
trmontgomery | 0:daf9e2f8e1a1 | 100 | if (IsMoveAllowed(m_RowPos, m_ColPos+1)){ |
trmontgomery | 0:daf9e2f8e1a1 | 101 | gBuzzy.DrawInNewLocation(m_RowPos, m_ColPos+1); |
trmontgomery | 0:daf9e2f8e1a1 | 102 | } |
trmontgomery | 0:daf9e2f8e1a1 | 103 | break; |
trmontgomery | 0:daf9e2f8e1a1 | 104 | } |
trmontgomery | 0:daf9e2f8e1a1 | 105 | } |
trmontgomery | 0:daf9e2f8e1a1 | 106 | |
trmontgomery | 0:daf9e2f8e1a1 | 107 | } |
trmontgomery | 0:daf9e2f8e1a1 | 108 | /////////////////////////////////////////////////////////////////////////////// |
trmontgomery | 0:daf9e2f8e1a1 | 109 | /////////////////////////////////////////////////////////////////////////////// |
trmontgomery | 0:daf9e2f8e1a1 | 110 | /////////////////////////////////////////////////////////////////////////////// |
trmontgomery | 0:daf9e2f8e1a1 | 111 | void Buzzy::DrawInNewLocation(const int &nRow,const int &nCol) |
trmontgomery | 0:daf9e2f8e1a1 | 112 | { |
trmontgomery | 0:daf9e2f8e1a1 | 113 | int x1, y1; |
trmontgomery | 0:daf9e2f8e1a1 | 114 | // Test if we hit a honeydrop or fruit or ghost |
trmontgomery | 0:daf9e2f8e1a1 | 115 | if (gDynaMaze[nRow][nCol] == HONEYDROP_SQUARE){ |
trmontgomery | 0:daf9e2f8e1a1 | 116 | gBuzzy.honey++; |
trmontgomery | 0:daf9e2f8e1a1 | 117 | gSpeakerOut.SwitchSound(Speaker::CHOMP); |
trmontgomery | 0:daf9e2f8e1a1 | 118 | myled1 = !myled1; |
trmontgomery | 0:daf9e2f8e1a1 | 119 | } else { |
trmontgomery | 0:daf9e2f8e1a1 | 120 | gSpeakerOut.SwitchSound(Speaker::SIREN); |
trmontgomery | 0:daf9e2f8e1a1 | 121 | myled1 = !myled1; |
trmontgomery | 0:daf9e2f8e1a1 | 122 | } |
trmontgomery | 0:daf9e2f8e1a1 | 123 | |
trmontgomery | 0:daf9e2f8e1a1 | 124 | x1 = (3*m_RowPos+1)-4; |
trmontgomery | 0:daf9e2f8e1a1 | 125 | y1 = (3*m_ColPos+1)-4; |
trmontgomery | 0:daf9e2f8e1a1 | 126 | guLCD.BLIT(x1, y1, 9, 9, &BuzzyIcon[2][0][0]); |
trmontgomery | 0:daf9e2f8e1a1 | 127 | |
trmontgomery | 0:daf9e2f8e1a1 | 128 | |
trmontgomery | 0:daf9e2f8e1a1 | 129 | //update the dynamic maze |
trmontgomery | 0:daf9e2f8e1a1 | 130 | gDynaMaze[m_RowPos][m_ColPos] = 0; |
trmontgomery | 0:daf9e2f8e1a1 | 131 | gDynaMaze[nRow][nCol] = 5; |
trmontgomery | 0:daf9e2f8e1a1 | 132 | |
trmontgomery | 0:daf9e2f8e1a1 | 133 | //draw Buzzy in new location |
trmontgomery | 0:daf9e2f8e1a1 | 134 | x1 = (3*nRow+1)-4; |
trmontgomery | 0:daf9e2f8e1a1 | 135 | y1 = (3*nCol+1)-4; |
trmontgomery | 0:daf9e2f8e1a1 | 136 | guLCD.BLIT(x1, y1, 9, 9, &BuzzyIcon[GetImageIndex()][0][0]); |
trmontgomery | 0:daf9e2f8e1a1 | 137 | |
trmontgomery | 0:daf9e2f8e1a1 | 138 | //update Buzzy's location |
trmontgomery | 0:daf9e2f8e1a1 | 139 | gBuzzy.SetLocation(nRow, nCol); |
trmontgomery | 0:daf9e2f8e1a1 | 140 | } |
trmontgomery | 0:daf9e2f8e1a1 | 141 | /////////////////////////////////////////////////////////////////////////////// |
trmontgomery | 0:daf9e2f8e1a1 | 142 | /////////////////////////////////////////////////////////////////////////////// |
trmontgomery | 0:daf9e2f8e1a1 | 143 | /////////////////////////////////////////////////////////////////////////////// |
trmontgomery | 0:daf9e2f8e1a1 | 144 | bool Buzzy::DidGhostGetBuzzy() |
trmontgomery | 0:daf9e2f8e1a1 | 145 | { |
trmontgomery | 0:daf9e2f8e1a1 | 146 | |
trmontgomery | 0:daf9e2f8e1a1 | 147 | return false; |
trmontgomery | 0:daf9e2f8e1a1 | 148 | } |
trmontgomery | 0:daf9e2f8e1a1 | 149 | /////////////////////////////////////////////////////////////////////////////// |
trmontgomery | 0:daf9e2f8e1a1 | 150 | /////////////////////////////////////////////////////////////////////////////// |
trmontgomery | 0:daf9e2f8e1a1 | 151 | /////////////////////////////////////////////////////////////////////////////// |
trmontgomery | 0:daf9e2f8e1a1 | 152 | bool Buzzy::IsMoveAllowed(const int &nNewRow, const int &nNewCol) |
trmontgomery | 0:daf9e2f8e1a1 | 153 | { |
trmontgomery | 0:daf9e2f8e1a1 | 154 | bool a,b,c; |
trmontgomery | 0:daf9e2f8e1a1 | 155 | |
trmontgomery | 0:daf9e2f8e1a1 | 156 | switch(m_DesiredDirection){ |
trmontgomery | 0:daf9e2f8e1a1 | 157 | case UP_DIR: { |
trmontgomery | 0:daf9e2f8e1a1 | 158 | a = gCnstMaze[nNewRow+1][nNewCol-1] != 1; |
trmontgomery | 0:daf9e2f8e1a1 | 159 | b = gCnstMaze[nNewRow+1][nNewCol] != 1; |
trmontgomery | 0:daf9e2f8e1a1 | 160 | c = gCnstMaze[nNewRow+1][nNewCol+1] != 1; |
trmontgomery | 0:daf9e2f8e1a1 | 161 | break; |
trmontgomery | 0:daf9e2f8e1a1 | 162 | } |
trmontgomery | 0:daf9e2f8e1a1 | 163 | case DOWN_DIR: { |
trmontgomery | 0:daf9e2f8e1a1 | 164 | a = gCnstMaze[nNewRow-1][nNewCol-1] != 1; |
trmontgomery | 0:daf9e2f8e1a1 | 165 | b = gCnstMaze[nNewRow-1][nNewCol] != 1; |
trmontgomery | 0:daf9e2f8e1a1 | 166 | c = gCnstMaze[nNewRow-1][nNewCol+1] != 1; |
trmontgomery | 0:daf9e2f8e1a1 | 167 | break; |
trmontgomery | 0:daf9e2f8e1a1 | 168 | } |
trmontgomery | 0:daf9e2f8e1a1 | 169 | case LEFT_DIR: { |
trmontgomery | 0:daf9e2f8e1a1 | 170 | a = gCnstMaze[nNewRow-1][nNewCol-1] != 1; |
trmontgomery | 0:daf9e2f8e1a1 | 171 | b = gCnstMaze[nNewRow][nNewCol-1] != 1; |
trmontgomery | 0:daf9e2f8e1a1 | 172 | c = gCnstMaze[nNewRow+1][nNewCol-1] != 1; |
trmontgomery | 0:daf9e2f8e1a1 | 173 | break; |
trmontgomery | 0:daf9e2f8e1a1 | 174 | } |
trmontgomery | 0:daf9e2f8e1a1 | 175 | case RIGHT_DIR: { |
trmontgomery | 0:daf9e2f8e1a1 | 176 | a = gCnstMaze[nNewRow-1][nNewCol+1] != 1; |
trmontgomery | 0:daf9e2f8e1a1 | 177 | b = gCnstMaze[nNewRow][nNewCol+1] != 1; |
trmontgomery | 0:daf9e2f8e1a1 | 178 | c = gCnstMaze[nNewRow+1][nNewCol+1] != 1; |
trmontgomery | 0:daf9e2f8e1a1 | 179 | break; |
trmontgomery | 0:daf9e2f8e1a1 | 180 | } |
trmontgomery | 0:daf9e2f8e1a1 | 181 | } |
trmontgomery | 0:daf9e2f8e1a1 | 182 | |
trmontgomery | 0:daf9e2f8e1a1 | 183 | return a && b && c; |
trmontgomery | 0:daf9e2f8e1a1 | 184 | |
trmontgomery | 0:daf9e2f8e1a1 | 185 | } |