ECE2035 Project 2
Dependencies: mbed mbed-rtos SDFileSystem
player.cpp@10:1994adcfc86f, 2021-04-20 (annotated)
- Committer:
- kwengryn3
- Date:
- Tue Apr 20 18:15:22 2021 +0000
- Revision:
- 10:1994adcfc86f
- Parent:
- 9:f1d34ef049c5
adv features
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
kwengryn3 | 0:bff8b9020128 | 1 | //================================================================= |
kwengryn3 | 0:bff8b9020128 | 2 | // Implementation for the player module |
kwengryn3 | 0:bff8b9020128 | 3 | // |
kwengryn3 | 0:bff8b9020128 | 4 | // Copyright 2020 Georgia Tech. All rights reserved. |
kwengryn3 | 0:bff8b9020128 | 5 | // The materials provided by the instructor in this course are for |
kwengryn3 | 0:bff8b9020128 | 6 | // the use of the students currently enrolled in the course. |
kwengryn3 | 0:bff8b9020128 | 7 | // Copyrighted course materials may not be further disseminated. |
kwengryn3 | 0:bff8b9020128 | 8 | // This file must not be made publicly available anywhere. |
kwengryn3 | 0:bff8b9020128 | 9 | //================================================================== |
kwengryn3 | 0:bff8b9020128 | 10 | #include "player_private.h" |
kwengryn3 | 0:bff8b9020128 | 11 | #include "globals.h" |
kwengryn3 | 7:95db0d89fbac | 12 | #include "compost_pile_public.h"; |
kwengryn3 | 0:bff8b9020128 | 13 | #define X 0xFFFFFF //WHITE |
kwengryn3 | 0:bff8b9020128 | 14 | #define PLAYER_WIDTH 15 |
kwengryn3 | 0:bff8b9020128 | 15 | #define KNIFE_HEIGHT 2 |
kwengryn3 | 0:bff8b9020128 | 16 | #define KNIFE_WIDTH 12 |
kwengryn3 | 0:bff8b9020128 | 17 | #define _ 0x000000 //BLACK |
kwengryn3 | 0:bff8b9020128 | 18 | |
kwengryn3 | 0:bff8b9020128 | 19 | PLAYER player; // structure of player |
kwengryn3 | 0:bff8b9020128 | 20 | |
kwengryn3 | 0:bff8b9020128 | 21 | |
kwengryn3 | 0:bff8b9020128 | 22 | int player_sprite[PLAYER_HEIGHT * PLAYER_WIDTH] = { |
kwengryn3 | 0:bff8b9020128 | 23 | X,X,X,X,X,X,_,_,_,_,_,_,_,_,_, |
kwengryn3 | 0:bff8b9020128 | 24 | X,_,_,_,X,X,X,_,_,_,_,_,_,_,_, |
kwengryn3 | 0:bff8b9020128 | 25 | X,_,_,_,_,X,X,X,_,_,_,_,_,_,_, |
kwengryn3 | 0:bff8b9020128 | 26 | X,_,_,_,_,_,X,X,X,_,_,_,_,_,_, |
kwengryn3 | 0:bff8b9020128 | 27 | X,_,_,_,_,_,_,X,X,_,_,_,_,_,_, |
kwengryn3 | 0:bff8b9020128 | 28 | X,_,_,_,_,_,_,X,X,X,_,_,_,_,_, |
kwengryn3 | 0:bff8b9020128 | 29 | X,_,_,_,_,_,_,_,X,X,_,_,_,_,_, |
kwengryn3 | 0:bff8b9020128 | 30 | X,_,_,_,_,_,_,_,X,X,_,_,_,_,_, |
kwengryn3 | 0:bff8b9020128 | 31 | X,_,_,_,_,_,_,X,X,X,_,_,_,_,_, |
kwengryn3 | 0:bff8b9020128 | 32 | X,_,_,_,_,_,_,X,X,_,_,_,_,_,_, |
kwengryn3 | 0:bff8b9020128 | 33 | X,_,_,_,_,_,X,X,X,_,_,_,_,_,_, |
kwengryn3 | 0:bff8b9020128 | 34 | X,_,_,_,_,X,X,X,_,_,_,_,_,_,_, |
kwengryn3 | 0:bff8b9020128 | 35 | X,_,_,_,X,X,X,_,_,_,_,_,_,_,_, |
kwengryn3 | 0:bff8b9020128 | 36 | X,X,X,X,X,X,_,_,_,_,_,_,_,_,_, |
kwengryn3 | 0:bff8b9020128 | 37 | }; |
kwengryn3 | 0:bff8b9020128 | 38 | |
kwengryn3 | 0:bff8b9020128 | 39 | int player_mask[PLAYER_HEIGHT * PLAYER_WIDTH] = { |
kwengryn3 | 0:bff8b9020128 | 40 | _,_,_,_,_,_,_,_,_,_,_,_,_,_,_, |
kwengryn3 | 0:bff8b9020128 | 41 | _,_,_,_,_,_,_,_,_,_,_,_,_,_,_, |
kwengryn3 | 0:bff8b9020128 | 42 | _,_,_,_,_,_,_,_,_,_,_,_,_,_,_, |
kwengryn3 | 0:bff8b9020128 | 43 | _,_,_,_,_,_,_,_,_,_,_,_,_,_,_, |
kwengryn3 | 0:bff8b9020128 | 44 | _,_,_,_,_,_,_,_,_,_,_,_,_,_,_, |
kwengryn3 | 0:bff8b9020128 | 45 | _,_,_,_,_,_,_,_,_,_,_,_,_,_,_, |
kwengryn3 | 0:bff8b9020128 | 46 | _,_,_,_,_,_,_,_,_,_,_,_,_,_,_, |
kwengryn3 | 0:bff8b9020128 | 47 | _,_,_,_,_,_,_,_,_,_,_,_,_,_,_, |
kwengryn3 | 0:bff8b9020128 | 48 | _,_,_,_,_,_,_,_,_,_,_,_,_,_,_, |
kwengryn3 | 0:bff8b9020128 | 49 | _,_,_,_,_,_,_,_,_,_,_,_,_,_,_, |
kwengryn3 | 0:bff8b9020128 | 50 | _,_,_,_,_,_,_,_,_,_,_,_,_,_,_, |
kwengryn3 | 0:bff8b9020128 | 51 | _,_,_,_,_,_,_,_,_,_,_,_,_,_,_, |
kwengryn3 | 0:bff8b9020128 | 52 | _,_,_,_,_,_,_,_,_,_,_,_,_,_,_, |
kwengryn3 | 0:bff8b9020128 | 53 | _,_,_,_,_,_,_,_,_,_,_,_,_,_,_, |
kwengryn3 | 0:bff8b9020128 | 54 | |
kwengryn3 | 0:bff8b9020128 | 55 | }; |
kwengryn3 | 0:bff8b9020128 | 56 | |
kwengryn3 | 0:bff8b9020128 | 57 | int knife_sprite[KNIFE_HEIGHT * KNIFE_WIDTH] = { |
kwengryn3 | 0:bff8b9020128 | 58 | X,X,X,X,X,X,X,X,X,X,X,X, |
kwengryn3 | 0:bff8b9020128 | 59 | X,X,X,X,X,X,X,X,X,X,X,X, |
kwengryn3 | 0:bff8b9020128 | 60 | |
kwengryn3 | 0:bff8b9020128 | 61 | }; |
kwengryn3 | 0:bff8b9020128 | 62 | |
kwengryn3 | 0:bff8b9020128 | 63 | int knife_mask[KNIFE_HEIGHT * KNIFE_WIDTH] = { |
kwengryn3 | 0:bff8b9020128 | 64 | _,_,_,_,_,_,_,_,_,_,_,_, |
kwengryn3 | 0:bff8b9020128 | 65 | _,_,_,_,_,_,_,_,_,_,_,_, |
kwengryn3 | 0:bff8b9020128 | 66 | |
kwengryn3 | 0:bff8b9020128 | 67 | }; |
kwengryn3 | 0:bff8b9020128 | 68 | |
kwengryn3 | 0:bff8b9020128 | 69 | |
kwengryn3 | 0:bff8b9020128 | 70 | |
kwengryn3 | 0:bff8b9020128 | 71 | |
kwengryn3 | 0:bff8b9020128 | 72 | PLAYER player_get_info(void){ |
kwengryn3 | 0:bff8b9020128 | 73 | return player; |
kwengryn3 | 0:bff8b9020128 | 74 | } |
kwengryn3 | 0:bff8b9020128 | 75 | |
kwengryn3 | 0:bff8b9020128 | 76 | void player_init(void) { |
kwengryn3 | 0:bff8b9020128 | 77 | |
kwengryn3 | 0:bff8b9020128 | 78 | player.score = 0; |
kwengryn3 | 0:bff8b9020128 | 79 | player.height = PLAYER_HEIGHT; |
kwengryn3 | 0:bff8b9020128 | 80 | player.y = 0; |
kwengryn3 | 0:bff8b9020128 | 81 | player.player_has_knife = true; |
kwengryn3 | 0:bff8b9020128 | 82 | player.knife_length = KNIFE_WIDTH; |
kwengryn3 | 9:f1d34ef049c5 | 83 | player.strikes = 7; |
kwengryn3 | 0:bff8b9020128 | 84 | |
kwengryn3 | 0:bff8b9020128 | 85 | point topLeftP; |
kwengryn3 | 0:bff8b9020128 | 86 | point bottomRightP; |
kwengryn3 | 0:bff8b9020128 | 87 | topLeftP.x = 0; |
kwengryn3 | 0:bff8b9020128 | 88 | topLeftP.y = player.y + 6; |
kwengryn3 | 0:bff8b9020128 | 89 | bottomRightP.x = 12; |
kwengryn3 | 0:bff8b9020128 | 90 | bottomRightP.y = player.y + 7; |
kwengryn3 | 0:bff8b9020128 | 91 | |
kwengryn3 | 0:bff8b9020128 | 92 | boundingBox knifeBox; |
kwengryn3 | 0:bff8b9020128 | 93 | knifeBox.topLeft = topLeftP; |
kwengryn3 | 0:bff8b9020128 | 94 | knifeBox.bottomRight = bottomRightP; |
kwengryn3 | 0:bff8b9020128 | 95 | player.knife_boundingBox = knifeBox; |
kwengryn3 | 0:bff8b9020128 | 96 | |
kwengryn3 | 0:bff8b9020128 | 97 | player_draw(0xFFFFFF); |
kwengryn3 | 0:bff8b9020128 | 98 | player_knife_draw(); |
kwengryn3 | 0:bff8b9020128 | 99 | |
kwengryn3 | 0:bff8b9020128 | 100 | } |
kwengryn3 | 0:bff8b9020128 | 101 | |
kwengryn3 | 0:bff8b9020128 | 102 | void player_move(double x_acc) { |
kwengryn3 | 0:bff8b9020128 | 103 | int y_pos; |
kwengryn3 | 0:bff8b9020128 | 104 | y_pos = player.y + (-1 * x_acc * 20); |
kwengryn3 | 0:bff8b9020128 | 105 | if (y_pos < 10) { |
kwengryn3 | 0:bff8b9020128 | 106 | y_pos = 10; |
kwengryn3 | 0:bff8b9020128 | 107 | } |
kwengryn3 | 7:95db0d89fbac | 108 | if (y_pos > 112 - (get_compost_tallest_height() * 11)) { |
kwengryn3 | 7:95db0d89fbac | 109 | y_pos = 112 - (get_compost_tallest_height() * 11); |
kwengryn3 | 0:bff8b9020128 | 110 | } |
kwengryn3 | 0:bff8b9020128 | 111 | int y_prev = player.y; |
kwengryn3 | 0:bff8b9020128 | 112 | player.y = y_pos; |
kwengryn3 | 0:bff8b9020128 | 113 | uLCD.BLIT(0,y_prev, PLAYER_WIDTH, PLAYER_HEIGHT, player_mask); |
kwengryn3 | 0:bff8b9020128 | 114 | uLCD.BLIT(0,y_pos, PLAYER_WIDTH, PLAYER_HEIGHT, player_sprite); |
kwengryn3 | 0:bff8b9020128 | 115 | |
kwengryn3 | 0:bff8b9020128 | 116 | if (player.player_has_knife) { |
kwengryn3 | 0:bff8b9020128 | 117 | uLCD.BLIT(0, y_prev + 6, KNIFE_WIDTH, KNIFE_HEIGHT, knife_mask); |
kwengryn3 | 0:bff8b9020128 | 118 | uLCD.BLIT(0, y_pos + 6, KNIFE_WIDTH, KNIFE_HEIGHT, knife_sprite); |
kwengryn3 | 0:bff8b9020128 | 119 | |
kwengryn3 | 0:bff8b9020128 | 120 | player.knife_boundingBox.topLeft.y = y_pos + 6; |
kwengryn3 | 0:bff8b9020128 | 121 | player.knife_boundingBox.bottomRight.y = y_pos + 7; |
kwengryn3 | 5:b9b7993823e1 | 122 | player.knife_boundingBox.topLeft.x = 0; |
kwengryn3 | 5:b9b7993823e1 | 123 | player.knife_boundingBox.bottomRight.x = 11; |
kwengryn3 | 0:bff8b9020128 | 124 | |
kwengryn3 | 0:bff8b9020128 | 125 | |
kwengryn3 | 0:bff8b9020128 | 126 | } else { |
kwengryn3 | 0:bff8b9020128 | 127 | point currTopLeft = player.knife_boundingBox.topLeft; |
kwengryn3 | 0:bff8b9020128 | 128 | |
kwengryn3 | 5:b9b7993823e1 | 129 | player.knife_boundingBox.topLeft.x += 4; |
kwengryn3 | 5:b9b7993823e1 | 130 | player.knife_boundingBox.bottomRight.x += 4; |
kwengryn3 | 0:bff8b9020128 | 131 | |
kwengryn3 | 0:bff8b9020128 | 132 | if (player.knife_boundingBox.bottomRight.x >= 125) { |
kwengryn3 | 0:bff8b9020128 | 133 | player.player_has_knife = true; |
kwengryn3 | 0:bff8b9020128 | 134 | uLCD.BLIT(currTopLeft.x, currTopLeft.y, KNIFE_WIDTH, KNIFE_HEIGHT, knife_mask); |
kwengryn3 | 0:bff8b9020128 | 135 | uLCD.BLIT(0, y_pos + 6, KNIFE_WIDTH, KNIFE_HEIGHT, knife_sprite); |
kwengryn3 | 0:bff8b9020128 | 136 | player.knife_boundingBox.topLeft.y = y_pos + 6; |
kwengryn3 | 0:bff8b9020128 | 137 | player.knife_boundingBox.bottomRight.y = y_pos + 7; |
kwengryn3 | 0:bff8b9020128 | 138 | player.knife_boundingBox.topLeft.x = 0; |
kwengryn3 | 0:bff8b9020128 | 139 | player.knife_boundingBox.bottomRight.x = 12; |
kwengryn3 | 9:f1d34ef049c5 | 140 | player.strikes--; |
kwengryn3 | 0:bff8b9020128 | 141 | |
kwengryn3 | 0:bff8b9020128 | 142 | } else { |
kwengryn3 | 0:bff8b9020128 | 143 | uLCD.BLIT(currTopLeft.x, currTopLeft.y, KNIFE_WIDTH, KNIFE_HEIGHT, knife_mask); |
kwengryn3 | 0:bff8b9020128 | 144 | uLCD.BLIT(player.knife_boundingBox.topLeft.x, currTopLeft.y, KNIFE_WIDTH, KNIFE_HEIGHT, knife_sprite); |
kwengryn3 | 0:bff8b9020128 | 145 | } |
kwengryn3 | 0:bff8b9020128 | 146 | |
kwengryn3 | 0:bff8b9020128 | 147 | |
kwengryn3 | 0:bff8b9020128 | 148 | } |
kwengryn3 | 0:bff8b9020128 | 149 | |
kwengryn3 | 0:bff8b9020128 | 150 | |
kwengryn3 | 0:bff8b9020128 | 151 | |
kwengryn3 | 0:bff8b9020128 | 152 | |
kwengryn3 | 0:bff8b9020128 | 153 | } |
kwengryn3 | 0:bff8b9020128 | 154 | |
kwengryn3 | 0:bff8b9020128 | 155 | void player_moveDown(void) { |
kwengryn3 | 0:bff8b9020128 | 156 | |
kwengryn3 | 0:bff8b9020128 | 157 | } |
kwengryn3 | 0:bff8b9020128 | 158 | |
kwengryn3 | 0:bff8b9020128 | 159 | void player_throw(void) { |
kwengryn3 | 0:bff8b9020128 | 160 | if (player.player_has_knife) { |
kwengryn3 | 0:bff8b9020128 | 161 | player.player_has_knife = false; |
kwengryn3 | 0:bff8b9020128 | 162 | } |
kwengryn3 | 0:bff8b9020128 | 163 | } |
kwengryn3 | 0:bff8b9020128 | 164 | |
kwengryn3 | 0:bff8b9020128 | 165 | void player_knife_draw(void) { |
kwengryn3 | 0:bff8b9020128 | 166 | uLCD.BLIT(0, player.y + 6, KNIFE_WIDTH, KNIFE_HEIGHT, knife_sprite); |
kwengryn3 | 0:bff8b9020128 | 167 | |
kwengryn3 | 0:bff8b9020128 | 168 | } |
kwengryn3 | 0:bff8b9020128 | 169 | |
kwengryn3 | 0:bff8b9020128 | 170 | void player_knife_return(void) { |
kwengryn3 | 5:b9b7993823e1 | 171 | player.player_has_knife = true; |
kwengryn3 | 5:b9b7993823e1 | 172 | uLCD.BLIT(player.knife_boundingBox.topLeft.x, player.knife_boundingBox.topLeft.y, KNIFE_WIDTH, KNIFE_HEIGHT, knife_mask); |
kwengryn3 | 5:b9b7993823e1 | 173 | player.knife_boundingBox.topLeft.x = 0; |
kwengryn3 | 5:b9b7993823e1 | 174 | player.knife_boundingBox.topLeft.y = player.y + 6; |
kwengryn3 | 0:bff8b9020128 | 175 | |
kwengryn3 | 0:bff8b9020128 | 176 | } |
kwengryn3 | 0:bff8b9020128 | 177 | |
kwengryn3 | 0:bff8b9020128 | 178 | // ==== player_private.h implementation ==== |
kwengryn3 | 0:bff8b9020128 | 179 | void player_draw(int color) { |
kwengryn3 | 0:bff8b9020128 | 180 | uLCD.BLIT(0, player.y, PLAYER_WIDTH, PLAYER_HEIGHT, player_sprite); |
kwengryn3 | 0:bff8b9020128 | 181 | } |
kwengryn3 | 0:bff8b9020128 | 182 | |
kwengryn3 | 0:bff8b9020128 | 183 | void player_score_inc(void) { |
kwengryn3 | 0:bff8b9020128 | 184 | |
kwengryn3 | 0:bff8b9020128 | 185 | } |
kwengryn3 | 9:f1d34ef049c5 | 186 | |
kwengryn3 | 9:f1d34ef049c5 | 187 | int get_player_strikes() { |
kwengryn3 | 9:f1d34ef049c5 | 188 | return player.strikes; |
kwengryn3 | 9:f1d34ef049c5 | 189 | } |