Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed FATFileSystem
CaMove/CaMove.cpp@21:f3b0ce18b44f, 2019-05-09 (annotated)
- Committer:
- rottenegg
- Date:
- Thu May 09 06:22:53 2019 +0000
- Revision:
- 21:f3b0ce18b44f
- Parent:
- 20:01efa2bce75d
- Child:
- 26:716bcd47f3ca
Game_Manager: 20 lines per Function Achevied; Documentation Updated along with Inline Comments
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
rottenegg | 4:34bf3587cf42 | 1 | #include "CaMove.h" |
rottenegg | 8:e3a76a808a4c | 2 | #include "AniPaths.h" |
rottenegg | 18:14e5391beccf | 3 | |
rottenegg | 21:f3b0ce18b44f | 4 | Serial f(USBTX,USBRX); |
rottenegg | 21:f3b0ce18b44f | 5 | |
rottenegg | 5:860087ff295e | 6 | //Constructor |
rottenegg | 5:860087ff295e | 7 | CaMove::CaMove(PinName Button, |
rottenegg | 5:860087ff295e | 8 | PinName Pot_h, |
rottenegg | 5:860087ff295e | 9 | PinName Pot_v) |
rottenegg | 5:860087ff295e | 10 | : //Creating Class Objects |
rottenegg | 5:860087ff295e | 11 | _check(new InterruptIn(Button)), |
rottenegg | 5:860087ff295e | 12 | _hoz(new AnalogIn(Pot_h)), |
rottenegg | 5:860087ff295e | 13 | _ver(new AnalogIn(Pot_v)) |
rottenegg | 5:860087ff295e | 14 | { |
rottenegg | 5:860087ff295e | 15 | _check->mode(PullDown); |
rottenegg | 5:860087ff295e | 16 | _check->rise(callback(this,&CaMove::intercheck)); |
rottenegg | 4:34bf3587cf42 | 17 | }; |
rottenegg | 18:14e5391beccf | 18 | |
rottenegg | 5:860087ff295e | 19 | //Destructor |
rottenegg | 4:34bf3587cf42 | 20 | CaMove::~CaMove() { |
rottenegg | 5:860087ff295e | 21 | delete _check; |
rottenegg | 5:860087ff295e | 22 | delete _hoz; |
rottenegg | 5:860087ff295e | 23 | delete _ver; |
rottenegg | 4:34bf3587cf42 | 24 | }; |
rottenegg | 4:34bf3587cf42 | 25 | |
rottenegg | 21:f3b0ce18b44f | 26 | //Initilizing Functions |
rottenegg | 21:f3b0ce18b44f | 27 | //Player |
rottenegg | 5:860087ff295e | 28 | void CaMove::init(int x,int y,Direction D) { |
rottenegg | 5:860087ff295e | 29 | _h = x; |
rottenegg | 5:860087ff295e | 30 | _v = y; |
rottenegg | 5:860087ff295e | 31 | _itr = 0; |
rottenegg | 5:860087ff295e | 32 | _fc = D; |
rottenegg | 5:860087ff295e | 33 | _trg = false; |
rottenegg | 5:860087ff295e | 34 | _treg = -1; |
rottenegg | 5:860087ff295e | 35 | }; |
rottenegg | 5:860087ff295e | 36 | |
rottenegg | 21:f3b0ce18b44f | 37 | //AI Chasers |
rottenegg | 21:f3b0ce18b44f | 38 | void CaMove::AIinit(int chaser) { |
rottenegg | 21:f3b0ce18b44f | 39 | enabled = false; |
rottenegg | 21:f3b0ce18b44f | 40 | _ch = 0; |
rottenegg | 21:f3b0ce18b44f | 41 | _cv = 0; |
rottenegg | 21:f3b0ce18b44f | 42 | switch (chaser) { |
rottenegg | 21:f3b0ce18b44f | 43 | case 2: |
rottenegg | 21:f3b0ce18b44f | 44 | increment = 2; |
rottenegg | 21:f3b0ce18b44f | 45 | break; |
rottenegg | 21:f3b0ce18b44f | 46 | case 1: |
rottenegg | 21:f3b0ce18b44f | 47 | increment = 0; |
rottenegg | 21:f3b0ce18b44f | 48 | break; |
rottenegg | 21:f3b0ce18b44f | 49 | case 4: |
rottenegg | 21:f3b0ce18b44f | 50 | increment = 5; |
rottenegg | 21:f3b0ce18b44f | 51 | break; |
rottenegg | 21:f3b0ce18b44f | 52 | default: |
rottenegg | 21:f3b0ce18b44f | 53 | increment = 3; |
rottenegg | 21:f3b0ce18b44f | 54 | break; |
rottenegg | 21:f3b0ce18b44f | 55 | } |
rottenegg | 21:f3b0ce18b44f | 56 | }; |
rottenegg | 21:f3b0ce18b44f | 57 | |
rottenegg | 21:f3b0ce18b44f | 58 | //Player Functions |
rottenegg | 21:f3b0ce18b44f | 59 | |
rottenegg | 17:7d4d8905b608 | 60 | void CaMove::move(Bitmap &lcd) { |
rottenegg | 5:860087ff295e | 61 | //If statements to check joystick movement and has in bluilt collsion detection |
rottenegg | 5:860087ff295e | 62 | //collsion detection check 4 sides for black pixels |
rottenegg | 21:f3b0ce18b44f | 63 | bool left = (lcd.getPixel((_h-1),(_v+12)) == 0 && lcd.getPixel((_h-1),(_v+1)) == 0) ; |
rottenegg | 21:f3b0ce18b44f | 64 | bool right = (lcd.getPixel((_h+10),(_v+12)) == 0 && lcd.getPixel((_h+10),(_v+1)) == 0); |
rottenegg | 21:f3b0ce18b44f | 65 | bool down = (lcd.getPixel((_h+1),(_v-1)) == 0 && lcd.getPixel((_h+8),(_v-1)) == 0); |
rottenegg | 21:f3b0ce18b44f | 66 | bool up = (lcd.getPixel((_h+1),(_v+14)) == 0 && lcd.getPixel((_h+8),(_v+14)) == 0); |
rottenegg | 21:f3b0ce18b44f | 67 | this->check_collision(left,right,down,up); |
rottenegg | 18:14e5391beccf | 68 | if (_itr == 3) { |
rottenegg | 18:14e5391beccf | 69 | _itr = -1; |
rottenegg | 18:14e5391beccf | 70 | } |
rottenegg | 18:14e5391beccf | 71 | _itr++; |
rottenegg | 18:14e5391beccf | 72 | this->rend(lcd); |
rottenegg | 18:14e5391beccf | 73 | } |
rottenegg | 21:f3b0ce18b44f | 74 | |
rottenegg | 21:f3b0ce18b44f | 75 | bool CaMove::in_screen() { |
rottenegg | 21:f3b0ce18b44f | 76 | if (_h + 5 >= 84 || (_h + 5) <= 0 || _v + 7 >= 48 || (_v + 8) <= 0) { |
rottenegg | 21:f3b0ce18b44f | 77 | return false; |
rottenegg | 21:f3b0ce18b44f | 78 | } else { |
rottenegg | 21:f3b0ce18b44f | 79 | return true; |
rottenegg | 21:f3b0ce18b44f | 80 | } |
rottenegg | 21:f3b0ce18b44f | 81 | }; |
rottenegg | 21:f3b0ce18b44f | 82 | |
rottenegg | 21:f3b0ce18b44f | 83 | //Aiding Player Functions |
rottenegg | 21:f3b0ce18b44f | 84 | |
rottenegg | 21:f3b0ce18b44f | 85 | void CaMove::check_collision(bool left,bool right,bool down,bool up) { |
rottenegg | 21:f3b0ce18b44f | 86 | //Checks Input on Joystick and Verifies if charater can move in that direction |
rottenegg | 21:f3b0ce18b44f | 87 | if (_hoz->read() > 0.6f && left) { |
rottenegg | 4:34bf3587cf42 | 88 | _h = _h - 2; |
rottenegg | 5:860087ff295e | 89 | _fc = Lt; |
rottenegg | 4:34bf3587cf42 | 90 | } |
rottenegg | 21:f3b0ce18b44f | 91 | if (_hoz->read() < 0.4f && right) { |
rottenegg | 4:34bf3587cf42 | 92 | _h = _h + 2; |
rottenegg | 5:860087ff295e | 93 | _fc = Rt; |
rottenegg | 4:34bf3587cf42 | 94 | } |
rottenegg | 21:f3b0ce18b44f | 95 | if (_ver->read() > 0.6f && down) { |
rottenegg | 4:34bf3587cf42 | 96 | _v = _v - 2; |
rottenegg | 5:860087ff295e | 97 | _fc = Fd; |
rottenegg | 4:34bf3587cf42 | 98 | } |
rottenegg | 21:f3b0ce18b44f | 99 | if (_ver->read() < 0.4f && up) { |
rottenegg | 4:34bf3587cf42 | 100 | _v = _v + 2; |
rottenegg | 5:860087ff295e | 101 | _fc = Bd; |
rottenegg | 18:14e5391beccf | 102 | } |
rottenegg | 9:ac396c818874 | 103 | } |
rottenegg | 9:ac396c818874 | 104 | |
rottenegg | 17:7d4d8905b608 | 105 | void CaMove::rend(Bitmap &lcd) { |
rottenegg | 5:860087ff295e | 106 | //Switch case allows charater to move diagonally and retains its facing direction when stationary |
rottenegg | 5:860087ff295e | 107 | switch (_fc) { |
rottenegg | 4:34bf3587cf42 | 108 | case Lt: |
rottenegg | 21:f3b0ce18b44f | 109 | lcd.renderBMP(L[_itr],_h,_v); //render Charater on Screen |
rottenegg | 21:f3b0ce18b44f | 110 | break; |
rottenegg | 4:34bf3587cf42 | 111 | case Rt: |
rottenegg | 17:7d4d8905b608 | 112 | lcd.renderBMP(R[_itr],_h,_v); |
rottenegg | 4:34bf3587cf42 | 113 | break; |
rottenegg | 4:34bf3587cf42 | 114 | case Fd: |
rottenegg | 17:7d4d8905b608 | 115 | lcd.renderBMP(F[_itr],_h,_v); |
rottenegg | 4:34bf3587cf42 | 116 | break; |
rottenegg | 4:34bf3587cf42 | 117 | case Bd: |
rottenegg | 17:7d4d8905b608 | 118 | lcd.renderBMP(B[_itr],_h,_v); |
rottenegg | 4:34bf3587cf42 | 119 | break; |
rottenegg | 4:34bf3587cf42 | 120 | } |
rottenegg | 4:34bf3587cf42 | 121 | }; |
rottenegg | 4:34bf3587cf42 | 122 | |
rottenegg | 21:f3b0ce18b44f | 123 | //Interactive Region Function pack |
rottenegg | 21:f3b0ce18b44f | 124 | //Setting regions |
rottenegg | 21:f3b0ce18b44f | 125 | void CaMove::set_region(int xmin, int ymin, int xl, int yl) { //Sets values into vector |
rottenegg | 5:860087ff295e | 126 | _vreg.push_back((xmin + xl)); |
rottenegg | 5:860087ff295e | 127 | _vreg.push_back(xmin); |
rottenegg | 5:860087ff295e | 128 | _vreg.push_back((ymin + yl)); |
rottenegg | 5:860087ff295e | 129 | _vreg.push_back(ymin); |
rottenegg | 4:34bf3587cf42 | 130 | }; |
rottenegg | 4:34bf3587cf42 | 131 | |
rottenegg | 4:34bf3587cf42 | 132 | void CaMove::delete_regions() { |
rottenegg | 5:860087ff295e | 133 | _vreg.clear(); |
rottenegg | 4:34bf3587cf42 | 134 | }; |
rottenegg | 4:34bf3587cf42 | 135 | |
rottenegg | 21:f3b0ce18b44f | 136 | //Interupting Function |
rottenegg | 4:34bf3587cf42 | 137 | void CaMove::intercheck() { |
rottenegg | 21:f3b0ce18b44f | 138 | _trg = false; //reset everytime called |
rottenegg | 18:14e5391beccf | 139 | LowerH = false; |
rottenegg | 18:14e5391beccf | 140 | UpperH = false; |
rottenegg | 18:14e5391beccf | 141 | MidH = false; |
rottenegg | 18:14e5391beccf | 142 | LowerV = false; |
rottenegg | 18:14e5391beccf | 143 | UpperV = false; |
rottenegg | 18:14e5391beccf | 144 | MidV = false; |
rottenegg | 21:f3b0ce18b44f | 145 | if (_vreg.size() > 0) { //checks all regions for vector |
rottenegg | 5:860087ff295e | 146 | for(int Vvalue = 0; Vvalue < _vreg.size(); Vvalue = Vvalue +4) { |
rottenegg | 21:f3b0ce18b44f | 147 | this->set_statements(Vvalue); //returns checked regions if in an Region |
rottenegg | 21:f3b0ce18b44f | 148 | this->check_sides(Vvalue); //focuses on regions in facing direction |
rottenegg | 4:34bf3587cf42 | 149 | } |
rottenegg | 4:34bf3587cf42 | 150 | } |
rottenegg | 5:860087ff295e | 151 | }; |
rottenegg | 18:14e5391beccf | 152 | |
rottenegg | 21:f3b0ce18b44f | 153 | |
rottenegg | 21:f3b0ce18b44f | 154 | //Internal Functions |
rottenegg | 21:f3b0ce18b44f | 155 | void CaMove::set_statements(int Vvalue) { |
rottenegg | 21:f3b0ce18b44f | 156 | //If Statements check that sides position with all x- y region ranges to see if charater has hit that region. |
rottenegg | 21:f3b0ce18b44f | 157 | LowerH = (_h - 1) <= _vreg[Vvalue] && (_h-1) >= _vreg[Vvalue + 1]; |
rottenegg | 21:f3b0ce18b44f | 158 | UpperH = (_h + 10) <= _vreg[Vvalue] && (_h + 10) >= _vreg[Vvalue + 1]; |
rottenegg | 21:f3b0ce18b44f | 159 | MidH = (_h + 5) <= _vreg[Vvalue] && (_h + 5) >= _vreg[Vvalue + 1]; |
rottenegg | 21:f3b0ce18b44f | 160 | LowerV = (_v - 1) >= _vreg[Vvalue + 3] && (_v - 1) <= _vreg[Vvalue + 2]; |
rottenegg | 21:f3b0ce18b44f | 161 | UpperV = (_v+14) >= _vreg[Vvalue + 3] && (_v + 14) <= _vreg[Vvalue + 2]; |
rottenegg | 21:f3b0ce18b44f | 162 | MidV = (_v+7) >= _vreg[Vvalue + 3] && (_v + 7) <= _vreg[Vvalue + 2]; |
rottenegg | 21:f3b0ce18b44f | 163 | } |
rottenegg | 21:f3b0ce18b44f | 164 | |
rottenegg | 18:14e5391beccf | 165 | void CaMove::check_sides(int Vvalue) { |
rottenegg | 18:14e5391beccf | 166 | switch (_fc) { //Function only will check the facing side for interative regions |
rottenegg | 18:14e5391beccf | 167 | case Lt: //L |
rottenegg | 18:14e5391beccf | 168 | if (LowerH && MidV) { |
rottenegg | 21:f3b0ce18b44f | 169 | this->set_treg(Vvalue); //returns region number |
rottenegg | 18:14e5391beccf | 170 | }; |
rottenegg | 18:14e5391beccf | 171 | break; |
rottenegg | 18:14e5391beccf | 172 | case Rt: //R |
rottenegg | 18:14e5391beccf | 173 | if (UpperH && MidV) { |
rottenegg | 18:14e5391beccf | 174 | this->set_treg(Vvalue); |
rottenegg | 18:14e5391beccf | 175 | } |
rottenegg | 18:14e5391beccf | 176 | break; |
rottenegg | 18:14e5391beccf | 177 | case Fd: //F |
rottenegg | 18:14e5391beccf | 178 | if (MidH && LowerV) { |
rottenegg | 18:14e5391beccf | 179 | this->set_treg(Vvalue); |
rottenegg | 18:14e5391beccf | 180 | } |
rottenegg | 18:14e5391beccf | 181 | break; |
rottenegg | 18:14e5391beccf | 182 | case Bd: //B |
rottenegg | 18:14e5391beccf | 183 | if (MidH && UpperV) { |
rottenegg | 18:14e5391beccf | 184 | this->set_treg(Vvalue); |
rottenegg | 18:14e5391beccf | 185 | } |
rottenegg | 18:14e5391beccf | 186 | break; |
rottenegg | 18:14e5391beccf | 187 | } |
rottenegg | 18:14e5391beccf | 188 | } |
rottenegg | 18:14e5391beccf | 189 | |
rottenegg | 21:f3b0ce18b44f | 190 | //Aiding Functions |
rottenegg | 21:f3b0ce18b44f | 191 | |
rottenegg | 18:14e5391beccf | 192 | void CaMove::set_treg(int Vvalue) { |
rottenegg | 18:14e5391beccf | 193 | //The region number is found depending on its position in the vector |
rottenegg | 18:14e5391beccf | 194 | //e.g elements 0 to 3 are in region 0 and elements 4 to 7 are in region 1 |
rottenegg | 18:14e5391beccf | 195 | _trg = true; |
rottenegg | 18:14e5391beccf | 196 | _treg = Vvalue / 4; |
rottenegg | 18:14e5391beccf | 197 | } |
rottenegg | 18:14e5391beccf | 198 | |
rottenegg | 21:f3b0ce18b44f | 199 | //Accessors |
rottenegg | 18:14e5391beccf | 200 | |
rottenegg | 5:860087ff295e | 201 | //Functions revert to default values evrytime they are called. |
rottenegg | 21:f3b0ce18b44f | 202 | bool CaMove::is_trg() { |
rottenegg | 5:860087ff295e | 203 | bool temp = _trg; |
rottenegg | 5:860087ff295e | 204 | _trg = false; |
rottenegg | 4:34bf3587cf42 | 205 | return temp; |
rottenegg | 4:34bf3587cf42 | 206 | |
rottenegg | 4:34bf3587cf42 | 207 | }; |
rottenegg | 5:860087ff295e | 208 | |
rottenegg | 5:860087ff295e | 209 | int CaMove::get_treg() { |
rottenegg | 5:860087ff295e | 210 | int temp = _treg; |
rottenegg | 5:860087ff295e | 211 | _treg = -1; |
rottenegg | 5:860087ff295e | 212 | return temp; |
rottenegg | 5:860087ff295e | 213 | } |
rottenegg | 5:860087ff295e | 214 | |
rottenegg | 21:f3b0ce18b44f | 215 | |
rottenegg | 18:14e5391beccf | 216 | |
rottenegg | 21:f3b0ce18b44f | 217 | //Chaser Functions |
rottenegg | 21:f3b0ce18b44f | 218 | |
rottenegg | 21:f3b0ce18b44f | 219 | void CaMove::spawn(int x, int y) { //Chaser Appears |
rottenegg | 18:14e5391beccf | 220 | enabled = true; |
rottenegg | 18:14e5391beccf | 221 | _ch = x; |
rottenegg | 18:14e5391beccf | 222 | _cv = y; |
rottenegg | 18:14e5391beccf | 223 | } |
rottenegg | 18:14e5391beccf | 224 | |
rottenegg | 21:f3b0ce18b44f | 225 | |
rottenegg | 21:f3b0ce18b44f | 226 | bool CaMove::is_caught() { |
rottenegg | 21:f3b0ce18b44f | 227 | if (abs(_ch - _h) < 10 && abs(_cv - _v) < 14 && enabled) { |
rottenegg | 21:f3b0ce18b44f | 228 | return true; |
rottenegg | 21:f3b0ce18b44f | 229 | } else { |
rottenegg | 21:f3b0ce18b44f | 230 | return false; |
rottenegg | 21:f3b0ce18b44f | 231 | } |
rottenegg | 21:f3b0ce18b44f | 232 | } |
rottenegg | 21:f3b0ce18b44f | 233 | |
rottenegg | 20:01efa2bce75d | 234 | void CaMove::chase(Bitmap &lcd, int girl) { |
rottenegg | 9:ac396c818874 | 235 | if (enabled) { |
rottenegg | 9:ac396c818874 | 236 | if (_cv < _v) { |
rottenegg | 10:4fda7b01484a | 237 | _cv = _cv + increment; |
rottenegg | 9:ac396c818874 | 238 | } else if (_cv > _v) { |
rottenegg | 10:4fda7b01484a | 239 | _cv = _cv - increment; |
rottenegg | 13:95323e0f2fcb | 240 | } |
rottenegg | 13:95323e0f2fcb | 241 | if (_ch < _h) { |
rottenegg | 13:95323e0f2fcb | 242 | _ch = _ch + increment; |
rottenegg | 15:3d29fb195958 | 243 | } else if (_ch > _h) { |
rottenegg | 13:95323e0f2fcb | 244 | _ch = _ch - increment; |
rottenegg | 9:ac396c818874 | 245 | } |
rottenegg | 20:01efa2bce75d | 246 | this->render_chaser(lcd,girl); |
rottenegg | 18:14e5391beccf | 247 | } |
rottenegg | 18:14e5391beccf | 248 | } |
rottenegg | 18:14e5391beccf | 249 | |
rottenegg | 21:f3b0ce18b44f | 250 | //Internal Functions |
rottenegg | 21:f3b0ce18b44f | 251 | |
rottenegg | 18:14e5391beccf | 252 | void CaMove::render_chaser(Bitmap &lcd,int chaser) { |
rottenegg | 18:14e5391beccf | 253 | switch (chaser) { |
rottenegg | 18:14e5391beccf | 254 | case 2: |
rottenegg | 18:14e5391beccf | 255 | lcd.renderBMP(AIC[_itr],_ch,_cv); |
rottenegg | 18:14e5391beccf | 256 | break; |
rottenegg | 18:14e5391beccf | 257 | case 4: |
rottenegg | 18:14e5391beccf | 258 | lcd.renderBMP(AIC[_itr],_ch,_cv); // change later |
rottenegg | 18:14e5391beccf | 259 | break; |
rottenegg | 18:14e5391beccf | 260 | default: |
rottenegg | 18:14e5391beccf | 261 | lcd.renderBMP(AIM[_itr],_ch,_cv); |
rottenegg | 18:14e5391beccf | 262 | break; |
rottenegg | 9:ac396c818874 | 263 | } |
rottenegg | 21:f3b0ce18b44f | 264 | } |