Finished Lab 4 Pt 1

Dependencies:   mbed Sounds PinDetect

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?

UserRevisionLine numberNew 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 }