ECE2035 Project 2

Dependencies:   mbed mbed-rtos SDFileSystem

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?

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