hgftf

Dependencies:   mbed wave_player 4DGL-uLCD-SE MMA8452

Committer:
ajorgih3
Date:
Fri Nov 20 01:55:19 2020 +0000
Revision:
7:7ab2f4b09196
Parent:
6:fbaee888e5ea
Child:
8:34fd253d0fa5
yes

Who changed what in which revision?

UserRevisionLine numberNew contents of line
DCchico 2:4947d6a82971 1 //=================================================================
DCchico 2:4947d6a82971 2 // The main program file.
DCchico 2:4947d6a82971 3 //
DCchico 2:4947d6a82971 4 // Copyright 2020 Georgia Tech. All rights reserved.
DCchico 2:4947d6a82971 5 // The materials provided by the instructor in this course are for
DCchico 2:4947d6a82971 6 // the use of the students currently enrolled in the course.
DCchico 2:4947d6a82971 7 // Copyrighted course materials may not be further disseminated.
DCchico 2:4947d6a82971 8 // This file must not be made publicly available anywhere.
DCchico 2:4947d6a82971 9 //==================================================================
DCchico 2:4947d6a82971 10
DCchico 2:4947d6a82971 11 // Project includes
DCchico 1:10330bce85cb 12 #include "globals.h"
DCchico 1:10330bce85cb 13 #include "hardware.h"
DCchico 1:10330bce85cb 14 #include "map.h"
DCchico 1:10330bce85cb 15 #include "graphics.h"
DCchico 1:10330bce85cb 16 #include "snake.h"
DCchico 1:10330bce85cb 17
DCchico 1:10330bce85cb 18 #include <math.h>
DCchico 1:10330bce85cb 19 #include<stdio.h>
ajorgih3 5:5953ca12205d 20 #include <time.h>
ajorgih3 5:5953ca12205d 21 #include <stdlib.h>
ajorgih3 5:5953ca12205d 22 #include <ctime>
ajorgih3 5:5953ca12205d 23 #include <cstdlib>
ajorgih3 5:5953ca12205d 24 #include <iostream>
DCchico 1:10330bce85cb 25
DCchico 1:10330bce85cb 26 #define CITY_HIT_MARGIN 1
DCchico 1:10330bce85cb 27 #define CITY_UPPER_BOUND (SIZE_Y-(LANDSCAPE_HEIGHT+MAX_BUILDING_HEIGHT))
DCchico 2:4947d6a82971 28
DCchico 1:10330bce85cb 29 // Helper function declarations
DCchico 1:10330bce85cb 30 void playSound(char* wav);
DCchico 1:10330bce85cb 31
DCchico 1:10330bce85cb 32 /**
DCchico 1:10330bce85cb 33 * The main game state. Must include snake locations and previous locations for
DCchico 1:10330bce85cb 34 * drawing to work properly. Other items can be added as needed.
DCchico 1:10330bce85cb 35 */
DCchico 1:10330bce85cb 36
DCchico 1:10330bce85cb 37 /**
DCchico 1:10330bce85cb 38 * Given the game inputs, determine what kind of update needs to happen.
DCchico 1:10330bce85cb 39 * Possbile return values are defined below.
DCchico 1:10330bce85cb 40 */
DCchico 1:10330bce85cb 41 Snake snake;
ajorgih3 3:bb6f73642f01 42 int score;
ajorgih3 3:bb6f73642f01 43 GameInputs input;
ajorgih3 3:bb6f73642f01 44 int main();
ajorgih3 3:bb6f73642f01 45 int previousState;
ajorgih3 3:bb6f73642f01 46 int thisState;
ajorgih3 3:bb6f73642f01 47 int lives = 0;
ajorgih3 3:bb6f73642f01 48 int main2();
ajorgih3 4:697e1120f821 49 int y;
ajorgih3 3:bb6f73642f01 50 MapItem *nextHead;
ajorgih3 4:697e1120f821 51 int updateY();
ajorgih3 4:697e1120f821 52 void go_right2();
ajorgih3 4:697e1120f821 53 void go_up2();
ajorgih3 5:5953ca12205d 54 void go_down2();
ajorgih3 5:5953ca12205d 55 void go_left2();
ajorgih3 5:5953ca12205d 56 int bodyLength = 1;
ajorgih3 5:5953ca12205d 57 int bodyX[50];
ajorgih3 5:5953ca12205d 58 int bodyY[50];
ajorgih3 6:fbaee888e5ea 59 int reverseCounter;
ajorgih3 6:fbaee888e5ea 60 int speedCounter;
ajorgih3 6:fbaee888e5ea 61 bool invincibility = false;
ajorgih3 6:fbaee888e5ea 62 int shieldCounter = 0;
ajorgih3 7:7ab2f4b09196 63 int slowflakeCounter = 0;
ajorgih3 7:7ab2f4b09196 64 void additional_info();
ajorgih3 7:7ab2f4b09196 65 int redCounter = 0;
ajorgih3 7:7ab2f4b09196 66 int blueCounter = 0;
DCchico 1:10330bce85cb 67
DCchico 1:10330bce85cb 68 // Function prototypes
DCchico 2:4947d6a82971 69
DCchico 2:4947d6a82971 70 /**
DCchico 2:4947d6a82971 71 * Given the game inputs, determine what kind of update needs to happen.
DCchico 2:4947d6a82971 72 * Possible return values are defined below.
DCchico 2:4947d6a82971 73 */
DCchico 2:4947d6a82971 74 #define NO_RESULT 0
DCchico 2:4947d6a82971 75 #define NO_ACTION 0
DCchico 2:4947d6a82971 76 #define ACTION_BUTTON 1
DCchico 2:4947d6a82971 77 #define MENU_BUTTON 2
DCchico 2:4947d6a82971 78 #define GO_LEFT 3
DCchico 2:4947d6a82971 79 #define GO_RIGHT 4
DCchico 2:4947d6a82971 80 #define GO_UP 5
DCchico 2:4947d6a82971 81 #define GO_DOWN 6
DCchico 2:4947d6a82971 82 #define GAME_OVER 7
DCchico 2:4947d6a82971 83 #define FULL_DRAW 8
ajorgih3 4:697e1120f821 84 #define HAX 9
ajorgih3 3:bb6f73642f01 85 #define NOT_UP 10
ajorgih3 3:bb6f73642f01 86 #define IN_GAME_MENU 11
ajorgih3 3:bb6f73642f01 87 #define NOT_RIGHT 12
ajorgih3 5:5953ca12205d 88 #define SNAKE_MAX_LENGTH 50
ajorgih3 7:7ab2f4b09196 89 #define WIN_GAME 13
ajorgih3 3:bb6f73642f01 90
ajorgih3 3:bb6f73642f01 91
DCchico 1:10330bce85cb 92 // Get Actions from User (push buttons & accelerometer)
DCchico 2:4947d6a82971 93 // Based on push button and accelerometer inputs, determine which action
DCchico 2:4947d6a82971 94 // needs to be performed (may be no action).
DCchico 1:10330bce85cb 95 int get_action(GameInputs inputs)
DCchico 1:10330bce85cb 96 {
ajorgih3 3:bb6f73642f01 97 // threshold for moving right
ajorgih3 6:fbaee888e5ea 98 if (inputs.ax >= 0.30 && inputs.ax <= 0.60) {
ajorgih3 6:fbaee888e5ea 99 return GO_RIGHT;
ajorgih3 6:fbaee888e5ea 100 }
ajorgih3 3:bb6f73642f01 101 // threshold for moving left
ajorgih3 6:fbaee888e5ea 102 if (inputs.ax <= -0.30 && inputs.ax >= -0.60) {
ajorgih3 6:fbaee888e5ea 103 return GO_LEFT;
ajorgih3 6:fbaee888e5ea 104 }
ajorgih3 3:bb6f73642f01 105 // threshold for moving up
ajorgih3 6:fbaee888e5ea 106 if (inputs.ay >= 0.30 && inputs.ay <= 0.60) {
ajorgih3 6:fbaee888e5ea 107 return GO_UP;
ajorgih3 6:fbaee888e5ea 108 }
ajorgih3 3:bb6f73642f01 109 // threshold for moving down
ajorgih3 6:fbaee888e5ea 110 if (inputs.ay <= -0.30 && inputs.ay >= -0.60) {
ajorgih3 6:fbaee888e5ea 111 return GO_DOWN;
ajorgih3 6:fbaee888e5ea 112 }
ajorgih3 3:bb6f73642f01 113
ajorgih3 6:fbaee888e5ea 114 if (!inputs.b1) {
ajorgih3 6:fbaee888e5ea 115 return HAX;
ajorgih3 6:fbaee888e5ea 116 }
ajorgih3 3:bb6f73642f01 117
ajorgih3 3:bb6f73642f01 118 // if we do not satisfy these conditions then
ajorgih3 3:bb6f73642f01 119 // no action is done
ajorgih3 6:fbaee888e5ea 120 return NO_ACTION;
DCchico 1:10330bce85cb 121 }
DCchico 1:10330bce85cb 122 /**
DCchico 1:10330bce85cb 123 * Update the game state based on the user action. For example, if the user
DCchico 1:10330bce85cb 124 * requests GO_UP, then this function should determine if that is possible by
DCchico 1:10330bce85cb 125 * consulting the map, and update the snake position accordingly.
DCchico 1:10330bce85cb 126 *
DCchico 1:10330bce85cb 127 * Return values are defined below. FULL_DRAW indicates that for this frame,
DCchico 1:10330bce85cb 128 * draw_game should not optimize drawing and should draw every tile, even if
DCchico 1:10330bce85cb 129 * the snake has not moved.
DCchico 1:10330bce85cb 130 */
ajorgih3 3:bb6f73642f01 131
DCchico 1:10330bce85cb 132
DCchico 1:10330bce85cb 133 /**
DCchico 1:10330bce85cb 134 * Draw the upper status bar.
DCchico 1:10330bce85cb 135 */
ajorgih3 3:bb6f73642f01 136 void draw_upper_status(int x, int y, int z)
DCchico 1:10330bce85cb 137 {
ajorgih3 6:fbaee888e5ea 138 uLCD.line(0, 9, 127, 9, GREEN);
ajorgih3 6:fbaee888e5ea 139 uLCD.text_width(1);
ajorgih3 6:fbaee888e5ea 140 uLCD.text_height(1);
ajorgih3 6:fbaee888e5ea 141 uLCD.color(0xFFFF00);
ajorgih3 6:fbaee888e5ea 142 uLCD.locate(0,0);
ajorgih3 6:fbaee888e5ea 143 uLCD.printf("POS:%d,%d ", x, y);
ajorgih3 6:fbaee888e5ea 144 uLCD.locate(10,0);
ajorgih3 6:fbaee888e5ea 145 uLCD.printf("SCORE:%d", score);
DCchico 1:10330bce85cb 146 }
DCchico 1:10330bce85cb 147
DCchico 1:10330bce85cb 148 /**
DCchico 1:10330bce85cb 149 * Draw the lower status bar.
DCchico 1:10330bce85cb 150 */
ajorgih3 3:bb6f73642f01 151 void draw_lower_status(int lives)
DCchico 1:10330bce85cb 152 {
ajorgih3 6:fbaee888e5ea 153 uLCD.line(0, 118, 127, 118, 0xFFFF00);
ajorgih3 6:fbaee888e5ea 154 uLCD.text_width(1);
ajorgih3 6:fbaee888e5ea 155 uLCD.text_height(1);
ajorgih3 6:fbaee888e5ea 156 uLCD.color(0xFFFF00);
ajorgih3 6:fbaee888e5ea 157 uLCD.locate(0,15);
ajorgih3 6:fbaee888e5ea 158 uLCD.printf("LIVES:%d", lives);
ajorgih3 6:fbaee888e5ea 159
DCchico 1:10330bce85cb 160 }
DCchico 1:10330bce85cb 161
DCchico 1:10330bce85cb 162 /**
DCchico 1:10330bce85cb 163 * Draw the border for the map.
DCchico 1:10330bce85cb 164 */
DCchico 1:10330bce85cb 165 void draw_border()
DCchico 1:10330bce85cb 166 {
ajorgih3 6:fbaee888e5ea 167 uLCD.filled_rectangle(0, 9, 127, 14, WHITE); // Top
ajorgih3 6:fbaee888e5ea 168 uLCD.filled_rectangle(0, 13, 2, 114, WHITE); // Left
ajorgih3 6:fbaee888e5ea 169 uLCD.filled_rectangle(0, 114, 127, 117, WHITE); // Bottom
ajorgih3 6:fbaee888e5ea 170 uLCD.filled_rectangle(124, 14, 127, 117, WHITE); // Right
DCchico 1:10330bce85cb 171 }
DCchico 1:10330bce85cb 172
ajorgih3 3:bb6f73642f01 173
DCchico 1:10330bce85cb 174 /**
DCchico 1:10330bce85cb 175 * Entry point for frame drawing. This should be called once per iteration of
DCchico 1:10330bce85cb 176 * the game loop. This draws all tiles on the screen, followed by the status
DCchico 1:10330bce85cb 177 * bars. Unless init is nonzero, this function will optimize drawing by only
DCchico 1:10330bce85cb 178 * drawing tiles that have changed from the previous frame.
DCchico 1:10330bce85cb 179 */
DCchico 1:10330bce85cb 180 void draw_game(int draw_option)
ajorgih3 3:bb6f73642f01 181 {
ajorgih3 7:7ab2f4b09196 182 if (draw_option == WIN_GAME) {
ajorgih3 7:7ab2f4b09196 183 int u = 58;
ajorgih3 7:7ab2f4b09196 184 int v = 56;
ajorgih3 7:7ab2f4b09196 185 uLCD.filled_rectangle(0, 0, 255, 255, BLACK);
ajorgih3 7:7ab2f4b09196 186 uLCD.text_width(1);
ajorgih3 7:7ab2f4b09196 187 uLCD.text_height(1);
ajorgih3 7:7ab2f4b09196 188 uLCD.locate(5,7);
ajorgih3 7:7ab2f4b09196 189 uLCD.color(RED);
ajorgih3 7:7ab2f4b09196 190 uLCD.printf("YOU WIN\n");
ajorgih3 7:7ab2f4b09196 191 draw_snake_head(u+11, v+11);
ajorgih3 7:7ab2f4b09196 192 draw_snake_body(u, v+11);
ajorgih3 7:7ab2f4b09196 193 draw_snake_tail(u-11, v+11);
ajorgih3 7:7ab2f4b09196 194
ajorgih3 7:7ab2f4b09196 195 uLCD.textbackground_color(BLACK);
ajorgih3 7:7ab2f4b09196 196 uLCD.color(0xFFFFFF);
ajorgih3 7:7ab2f4b09196 197 uLCD.text_width(1);
ajorgih3 7:7ab2f4b09196 198 uLCD.text_height(1);
ajorgih3 7:7ab2f4b09196 199 uLCD.locate(4, 10);
ajorgih3 7:7ab2f4b09196 200 uLCD.printf("Press 'B2'\n");
ajorgih3 7:7ab2f4b09196 201 uLCD.locate(2, 11);
ajorgih3 7:7ab2f4b09196 202 uLCD.printf("to play again!\n");
ajorgih3 7:7ab2f4b09196 203
ajorgih3 7:7ab2f4b09196 204 do {
ajorgih3 7:7ab2f4b09196 205 input = read_inputs();
ajorgih3 7:7ab2f4b09196 206 } while(input.b2);
ajorgih3 7:7ab2f4b09196 207
ajorgih3 7:7ab2f4b09196 208 uLCD.filled_rectangle(0, 0, 255, 255, BLACK);
ajorgih3 7:7ab2f4b09196 209 main2();
ajorgih3 7:7ab2f4b09196 210
ajorgih3 7:7ab2f4b09196 211 }
ajorgih3 7:7ab2f4b09196 212
ajorgih3 7:7ab2f4b09196 213
ajorgih3 3:bb6f73642f01 214 // prints game over if the player loses.
ajorgih3 6:fbaee888e5ea 215 if (draw_option == GAME_OVER) {
ajorgih3 6:fbaee888e5ea 216 int u = 58;
ajorgih3 6:fbaee888e5ea 217 int v = 56;
ajorgih3 6:fbaee888e5ea 218 uLCD.filled_rectangle(0, 0, 255, 255, BLACK);
ajorgih3 6:fbaee888e5ea 219 uLCD.text_width(1);
ajorgih3 6:fbaee888e5ea 220 uLCD.text_height(1);
ajorgih3 6:fbaee888e5ea 221 uLCD.locate(5,7);
ajorgih3 6:fbaee888e5ea 222 uLCD.color(RED);
ajorgih3 6:fbaee888e5ea 223 uLCD.printf("GAME OVER\n");
ajorgih3 6:fbaee888e5ea 224 draw_snake_head(u+22, v+11);
ajorgih3 6:fbaee888e5ea 225 draw_snake_tail(u-22, v+11);
ajorgih3 3:bb6f73642f01 226
ajorgih3 6:fbaee888e5ea 227 uLCD.textbackground_color(BLACK);
ajorgih3 6:fbaee888e5ea 228 uLCD.color(0xFFFFFF);
ajorgih3 6:fbaee888e5ea 229 uLCD.text_width(1);
ajorgih3 6:fbaee888e5ea 230 uLCD.text_height(1);
ajorgih3 6:fbaee888e5ea 231 uLCD.locate(4, 10);
ajorgih3 6:fbaee888e5ea 232 uLCD.printf("Press 'B2'\n");
ajorgih3 6:fbaee888e5ea 233 uLCD.locate(5, 11);
ajorgih3 6:fbaee888e5ea 234 uLCD.printf("to retry!\n");
ajorgih3 3:bb6f73642f01 235
ajorgih3 6:fbaee888e5ea 236 do {
ajorgih3 6:fbaee888e5ea 237 input = read_inputs();
ajorgih3 6:fbaee888e5ea 238 } while(input.b2);
ajorgih3 3:bb6f73642f01 239
ajorgih3 6:fbaee888e5ea 240 uLCD.filled_rectangle(0, 0, 255, 255, BLACK);
ajorgih3 6:fbaee888e5ea 241 main();
ajorgih3 3:bb6f73642f01 242
ajorgih3 6:fbaee888e5ea 243 }
ajorgih3 3:bb6f73642f01 244
DCchico 1:10330bce85cb 245 // Draw game border first
ajorgih3 6:fbaee888e5ea 246 if(draw_option == FULL_DRAW)
ajorgih3 6:fbaee888e5ea 247 {
ajorgih3 6:fbaee888e5ea 248 draw_border();
ajorgih3 6:fbaee888e5ea 249 int u = 58;
ajorgih3 6:fbaee888e5ea 250 int v = 59;
ajorgih3 3:bb6f73642f01 251
ajorgih3 6:fbaee888e5ea 252 snake.locations[0].x = snake.body_x;
ajorgih3 6:fbaee888e5ea 253 snake.locations[0].y = snake.body_y;
ajorgih3 3:bb6f73642f01 254
ajorgih3 6:fbaee888e5ea 255 draw_snake_head(u, v);
ajorgih3 6:fbaee888e5ea 256 draw_snake_body(u-11, v);
ajorgih3 6:fbaee888e5ea 257 draw_snake_tail(u-22, v);
ajorgih3 3:bb6f73642f01 258
ajorgih3 6:fbaee888e5ea 259 return;
ajorgih3 6:fbaee888e5ea 260 }
DCchico 1:10330bce85cb 261 // Iterate over all visible map tiles
ajorgih3 6:fbaee888e5ea 262 for (int i = -5; i <= 5; i++) { // Iterate over columns of tiles
ajorgih3 6:fbaee888e5ea 263 for (int j = -4; j <= 4; j++) { // Iterate over one column of tiles
DCchico 1:10330bce85cb 264 // Here, we have a given (i,j)
ajorgih3 6:fbaee888e5ea 265
DCchico 1:10330bce85cb 266 // Compute the current map (x,y) of this tile
ajorgih3 6:fbaee888e5ea 267 int x = i + snake.head_x;
ajorgih3 6:fbaee888e5ea 268 int y = j + snake.head_y;
ajorgih3 6:fbaee888e5ea 269
DCchico 1:10330bce85cb 270 // Compute the previous map (px, py) of this tile
ajorgih3 6:fbaee888e5ea 271 int px = i + snake.head_px;
ajorgih3 6:fbaee888e5ea 272 int py = j + snake.head_py;
ajorgih3 6:fbaee888e5ea 273
DCchico 1:10330bce85cb 274 // Compute u,v coordinates for drawing
ajorgih3 6:fbaee888e5ea 275 int u = (i+5)*11 + 3;
ajorgih3 6:fbaee888e5ea 276 int v = (j+4)*11 + 15;
ajorgih3 6:fbaee888e5ea 277
DCchico 1:10330bce85cb 278 // Figure out what to draw
ajorgih3 6:fbaee888e5ea 279 DrawFunc draw = NULL;
ajorgih3 6:fbaee888e5ea 280 if (x >= 0 && y >= 0 && x < map_width() && y < map_height()) { // Current (i,j) in the map
ajorgih3 6:fbaee888e5ea 281 MapItem* curr_item = get_here(x, y);
ajorgih3 6:fbaee888e5ea 282 MapItem* prev_item = get_here(px, py);
ajorgih3 6:fbaee888e5ea 283 if (draw_option || curr_item != prev_item) { // Only draw if they're different
ajorgih3 6:fbaee888e5ea 284 if (curr_item) { // There's something here! Draw it
ajorgih3 6:fbaee888e5ea 285 draw = curr_item->draw;
ajorgih3 6:fbaee888e5ea 286 }
ajorgih3 6:fbaee888e5ea 287 else { // There used to be something, but now there isn't
ajorgih3 6:fbaee888e5ea 288 draw = draw_nothing;
ajorgih3 6:fbaee888e5ea 289 }
ajorgih3 6:fbaee888e5ea 290 }
ajorgih3 6:fbaee888e5ea 291 else if (curr_item && curr_item->type == CLEAR) {
DCchico 1:10330bce85cb 292 // This is a special case for erasing things like doors.
ajorgih3 6:fbaee888e5ea 293 draw = curr_item->draw; // i.e. draw_nothing
DCchico 1:10330bce85cb 294 }
ajorgih3 6:fbaee888e5ea 295 }
ajorgih3 6:fbaee888e5ea 296 else if (draw_option) { // If doing a full draw, but we're out of bounds, draw the walls.
ajorgih3 6:fbaee888e5ea 297 draw = draw_wall;
ajorgih3 6:fbaee888e5ea 298 }
ajorgih3 6:fbaee888e5ea 299
DCchico 1:10330bce85cb 300 // Actually draw the tile
ajorgih3 6:fbaee888e5ea 301 if (draw) draw(u, v);
ajorgih3 6:fbaee888e5ea 302 }
ajorgih3 6:fbaee888e5ea 303 }
DCchico 1:10330bce85cb 304
DCchico 1:10330bce85cb 305 // Draw status bars
ajorgih3 6:fbaee888e5ea 306 draw_upper_status(snake.head_x, updateY(), score);
ajorgih3 6:fbaee888e5ea 307 draw_lower_status(lives);
ajorgih3 3:bb6f73642f01 308 }
ajorgih3 3:bb6f73642f01 309
ajorgih3 4:697e1120f821 310 int updateY() {
ajorgih3 6:fbaee888e5ea 311 y = snake.head_y;
ajorgih3 6:fbaee888e5ea 312 return y;
ajorgih3 4:697e1120f821 313 }
ajorgih3 4:697e1120f821 314
ajorgih3 3:bb6f73642f01 315 void start_game() {
ajorgih3 6:fbaee888e5ea 316 int u = 58;
ajorgih3 6:fbaee888e5ea 317 int v = 56;
ajorgih3 3:bb6f73642f01 318
ajorgih3 6:fbaee888e5ea 319 uLCD.textbackground_color(GREEN);
ajorgih3 6:fbaee888e5ea 320 uLCD.filled_rectangle(0, 9, 127, 14, WHITE); // Top
ajorgih3 6:fbaee888e5ea 321 uLCD.filled_rectangle(0, 13, 2, 114, WHITE); // Left
ajorgih3 6:fbaee888e5ea 322 uLCD.filled_rectangle(0, 114, 127, 117, WHITE); // Bottom
ajorgih3 6:fbaee888e5ea 323 uLCD.filled_rectangle(124, 14, 127, 117, WHITE); // Right
ajorgih3 6:fbaee888e5ea 324 uLCD.text_width(1);
ajorgih3 6:fbaee888e5ea 325 uLCD.text_height(1);
ajorgih3 6:fbaee888e5ea 326 uLCD.locate(2, 3);
ajorgih3 6:fbaee888e5ea 327 uLCD.color(RED);
ajorgih3 6:fbaee888e5ea 328 uLCD.printf("-Sneaky Snakey-");
ajorgih3 6:fbaee888e5ea 329 uLCD.textbackground_color(BLUE);
ajorgih3 6:fbaee888e5ea 330 uLCD.text_width(1);
ajorgih3 6:fbaee888e5ea 331 uLCD.text_height(1);
ajorgih3 6:fbaee888e5ea 332 uLCD.locate(5, 4);
ajorgih3 6:fbaee888e5ea 333 uLCD.color(0xFFFF00);
ajorgih3 6:fbaee888e5ea 334 uLCD.printf("ECE 2035");
ajorgih3 6:fbaee888e5ea 335 uLCD.locate(7,5);
ajorgih3 3:bb6f73642f01 336
ajorgih3 6:fbaee888e5ea 337 draw_snake_head(u, v);
ajorgih3 6:fbaee888e5ea 338 draw_snake_body(u-11, v);
ajorgih3 6:fbaee888e5ea 339 draw_snake_tail(u-22, v);
ajorgih3 3:bb6f73642f01 340
ajorgih3 6:fbaee888e5ea 341 draw_goodie(u+22, v);
ajorgih3 3:bb6f73642f01 342
ajorgih3 6:fbaee888e5ea 343 uLCD.textbackground_color(BLACK);
ajorgih3 6:fbaee888e5ea 344 uLCD.color(0xFFFFFF);
ajorgih3 6:fbaee888e5ea 345 uLCD.text_width(1);
ajorgih3 6:fbaee888e5ea 346 uLCD.text_height(1);
ajorgih3 6:fbaee888e5ea 347 uLCD.locate(4, 10);
ajorgih3 6:fbaee888e5ea 348 uLCD.printf("Press 'B2'\n");
ajorgih3 6:fbaee888e5ea 349 uLCD.locate(5, 11);
ajorgih3 6:fbaee888e5ea 350 uLCD.printf("to start!\n");
ajorgih3 3:bb6f73642f01 351
ajorgih3 6:fbaee888e5ea 352 do {
ajorgih3 6:fbaee888e5ea 353 input = read_inputs();
ajorgih3 6:fbaee888e5ea 354 } while(input.b2);
ajorgih3 6:fbaee888e5ea 355 uLCD.filled_rectangle(0, 0, 255, 255, BLACK);
ajorgih3 3:bb6f73642f01 356 }
ajorgih3 3:bb6f73642f01 357
ajorgih3 3:bb6f73642f01 358 void title_page() {
ajorgih3 3:bb6f73642f01 359
ajorgih3 6:fbaee888e5ea 360 int u = 58;
ajorgih3 6:fbaee888e5ea 361 int v = 56;
ajorgih3 3:bb6f73642f01 362
ajorgih3 6:fbaee888e5ea 363 uLCD.filled_rectangle(0, 9, 127, 14, 0xFFFF00); // Top
ajorgih3 6:fbaee888e5ea 364 uLCD.filled_rectangle(0, 13, 2, 114, 0xFFFF00); // Left
ajorgih3 6:fbaee888e5ea 365 uLCD.filled_rectangle(0, 114, 127, 117, 0xFFFF00); // Bottom
ajorgih3 6:fbaee888e5ea 366 uLCD.filled_rectangle(124, 14, 127, 117, 0xFFFF00); // Right
ajorgih3 6:fbaee888e5ea 367 uLCD.text_width(1);
ajorgih3 6:fbaee888e5ea 368 uLCD.text_height(1);
ajorgih3 6:fbaee888e5ea 369 uLCD.locate(5, 3);
ajorgih3 6:fbaee888e5ea 370 uLCD.color(RED);
ajorgih3 6:fbaee888e5ea 371 uLCD.printf("OBJECTIVE");
ajorgih3 6:fbaee888e5ea 372 uLCD.text_width(1);
ajorgih3 6:fbaee888e5ea 373 uLCD.text_height(1);
ajorgih3 6:fbaee888e5ea 374 uLCD.locate(2, 4);
ajorgih3 6:fbaee888e5ea 375 uLCD.color(0xFFFFFF);
ajorgih3 6:fbaee888e5ea 376 uLCD.printf("Eat 20 goodies!");
ajorgih3 3:bb6f73642f01 377
ajorgih3 6:fbaee888e5ea 378 uLCD.locate(7,5);
ajorgih3 6:fbaee888e5ea 379 draw_goodie(u, v);
ajorgih3 6:fbaee888e5ea 380 draw_goodie(u-22, v);
ajorgih3 6:fbaee888e5ea 381 draw_goodie(u+22, v);
ajorgih3 3:bb6f73642f01 382
ajorgih3 6:fbaee888e5ea 383 uLCD.textbackground_color(BLACK);
ajorgih3 6:fbaee888e5ea 384 uLCD.color(0xFFFFFF);
ajorgih3 6:fbaee888e5ea 385 uLCD.text_width(1);
ajorgih3 6:fbaee888e5ea 386 uLCD.text_height(1);
ajorgih3 6:fbaee888e5ea 387 uLCD.locate(3, 10);
ajorgih3 6:fbaee888e5ea 388 uLCD.printf("Press 'B2'\n");
ajorgih3 6:fbaee888e5ea 389 uLCD.locate(3, 11);
ajorgih3 6:fbaee888e5ea 390 uLCD.printf("to continue!\n");
ajorgih3 3:bb6f73642f01 391
ajorgih3 6:fbaee888e5ea 392 do {
ajorgih3 6:fbaee888e5ea 393 input = read_inputs();
ajorgih3 6:fbaee888e5ea 394 } while(input.b2);
ajorgih3 6:fbaee888e5ea 395 uLCD.filled_rectangle(0, 0, 255, 255, BLACK);
ajorgih3 3:bb6f73642f01 396
ajorgih3 3:bb6f73642f01 397 }
ajorgih3 3:bb6f73642f01 398
ajorgih3 3:bb6f73642f01 399 void helpful_items() {
ajorgih3 3:bb6f73642f01 400 int u = 58;
ajorgih3 3:bb6f73642f01 401 int v = 56;
ajorgih3 3:bb6f73642f01 402
ajorgih3 7:7ab2f4b09196 403 uLCD.filled_rectangle(0, 9, 127, 14, 0xADD8E6); // Top
ajorgih3 7:7ab2f4b09196 404 uLCD.filled_rectangle(0, 13, 2, 114, 0xADD8E6); // Left
ajorgih3 7:7ab2f4b09196 405 uLCD.filled_rectangle(0, 114, 127, 117, 0xADD8E6); // Bottom
ajorgih3 7:7ab2f4b09196 406 uLCD.filled_rectangle(124, 14, 127, 117, 0xADD8E6); // Right
ajorgih3 3:bb6f73642f01 407
ajorgih3 6:fbaee888e5ea 408 uLCD.text_width(1);
ajorgih3 6:fbaee888e5ea 409 uLCD.text_height(1);
ajorgih3 6:fbaee888e5ea 410 uLCD.locate(6, 3);
ajorgih3 6:fbaee888e5ea 411 uLCD.color(0xFFFF00);
ajorgih3 6:fbaee888e5ea 412 uLCD.printf("BUFFS");
ajorgih3 3:bb6f73642f01 413
ajorgih3 6:fbaee888e5ea 414 uLCD.text_width(1);
ajorgih3 6:fbaee888e5ea 415 uLCD.text_height(1);
ajorgih3 7:7ab2f4b09196 416 uLCD.locate(1, 4);
ajorgih3 6:fbaee888e5ea 417 uLCD.color(0xFFFFFF);
ajorgih3 7:7ab2f4b09196 418 uLCD.printf("Score w/o length");
ajorgih3 3:bb6f73642f01 419
ajorgih3 6:fbaee888e5ea 420 uLCD.text_width(1);
ajorgih3 6:fbaee888e5ea 421 uLCD.text_height(1);
ajorgih3 6:fbaee888e5ea 422 uLCD.locate(2, 5);
ajorgih3 6:fbaee888e5ea 423 uLCD.color(0xFFFFFF);
ajorgih3 6:fbaee888e5ea 424 uLCD.printf("Invincibility");
ajorgih3 3:bb6f73642f01 425
ajorgih3 7:7ab2f4b09196 426 draw_shield(u-22, v);
ajorgih3 7:7ab2f4b09196 427 draw_blue_potion(u+22, v);
ajorgih3 3:bb6f73642f01 428
ajorgih3 6:fbaee888e5ea 429 uLCD.textbackground_color(BLACK);
ajorgih3 6:fbaee888e5ea 430 uLCD.color(0xFFFFFF);
ajorgih3 6:fbaee888e5ea 431 uLCD.text_width(1);
ajorgih3 6:fbaee888e5ea 432 uLCD.text_height(1);
ajorgih3 6:fbaee888e5ea 433 uLCD.locate(3, 10);
ajorgih3 6:fbaee888e5ea 434 uLCD.printf("Press 'B2'\n");
ajorgih3 6:fbaee888e5ea 435 uLCD.locate(3, 11);
ajorgih3 6:fbaee888e5ea 436 uLCD.printf("to continue!\n");
ajorgih3 3:bb6f73642f01 437
ajorgih3 6:fbaee888e5ea 438 do {
ajorgih3 6:fbaee888e5ea 439 input = read_inputs();
ajorgih3 6:fbaee888e5ea 440 } while(input.b2);
ajorgih3 6:fbaee888e5ea 441 uLCD.filled_rectangle(0, 0, 255, 255, BLACK);
ajorgih3 3:bb6f73642f01 442
ajorgih3 3:bb6f73642f01 443 }
ajorgih3 3:bb6f73642f01 444
ajorgih3 3:bb6f73642f01 445 void harmful_items() {
ajorgih3 6:fbaee888e5ea 446 int u = 58;
ajorgih3 3:bb6f73642f01 447 int v = 56;
ajorgih3 3:bb6f73642f01 448
ajorgih3 6:fbaee888e5ea 449 uLCD.filled_rectangle(0, 9, 127, 14, RED); // Top
ajorgih3 6:fbaee888e5ea 450 uLCD.filled_rectangle(0, 13, 2, 114, RED); // Left
ajorgih3 6:fbaee888e5ea 451 uLCD.filled_rectangle(0, 114, 127, 117, RED); // Bottom
ajorgih3 6:fbaee888e5ea 452 uLCD.filled_rectangle(124, 14, 127, 117, RED); // Right
ajorgih3 3:bb6f73642f01 453
ajorgih3 6:fbaee888e5ea 454 uLCD.text_width(1);
ajorgih3 6:fbaee888e5ea 455 uLCD.text_height(1);
ajorgih3 6:fbaee888e5ea 456 uLCD.locate(5, 3);
ajorgih3 6:fbaee888e5ea 457 uLCD.color(0xFFA500);
ajorgih3 6:fbaee888e5ea 458 uLCD.printf("DEBUFFS");
ajorgih3 3:bb6f73642f01 459
ajorgih3 6:fbaee888e5ea 460 uLCD.text_width(1);
ajorgih3 6:fbaee888e5ea 461 uLCD.text_height(1);
ajorgih3 7:7ab2f4b09196 462 uLCD.locate(5, 4);
ajorgih3 6:fbaee888e5ea 463 uLCD.color(0xFFFFFF);
ajorgih3 7:7ab2f4b09196 464 uLCD.printf("Reverse");
ajorgih3 3:bb6f73642f01 465
ajorgih3 6:fbaee888e5ea 466 uLCD.text_width(1);
ajorgih3 6:fbaee888e5ea 467 uLCD.text_height(1);
ajorgih3 7:7ab2f4b09196 468 uLCD.locate(1, 5);
ajorgih3 6:fbaee888e5ea 469 uLCD.color(0xFFFFFF);
ajorgih3 7:7ab2f4b09196 470 uLCD.printf("Length w/o score");
ajorgih3 3:bb6f73642f01 471
ajorgih3 7:7ab2f4b09196 472 draw_red_potion(u-22, v);
ajorgih3 7:7ab2f4b09196 473 draw_reverse(u+22, v);
ajorgih3 3:bb6f73642f01 474
ajorgih3 6:fbaee888e5ea 475 uLCD.textbackground_color(BLACK);
ajorgih3 6:fbaee888e5ea 476 uLCD.color(0xFFFFFF);
ajorgih3 6:fbaee888e5ea 477 uLCD.text_width(1);
ajorgih3 6:fbaee888e5ea 478 uLCD.text_height(1);
ajorgih3 6:fbaee888e5ea 479 uLCD.locate(3, 10);
ajorgih3 6:fbaee888e5ea 480 uLCD.printf("Press 'B2'\n");
ajorgih3 6:fbaee888e5ea 481 uLCD.locate(3, 11);
ajorgih3 6:fbaee888e5ea 482 uLCD.printf("to continue!\n");
ajorgih3 3:bb6f73642f01 483
ajorgih3 6:fbaee888e5ea 484 do {
ajorgih3 6:fbaee888e5ea 485 input = read_inputs();
ajorgih3 6:fbaee888e5ea 486 } while(input.b2);
ajorgih3 6:fbaee888e5ea 487 uLCD.filled_rectangle(0, 0, 255, 255, BLACK);
ajorgih3 7:7ab2f4b09196 488
DCchico 1:10330bce85cb 489 }
DCchico 1:10330bce85cb 490
ajorgih3 5:5953ca12205d 491 void harmful_items2() {
ajorgih3 6:fbaee888e5ea 492 int u = 58;
ajorgih3 5:5953ca12205d 493 int v = 56;
ajorgih3 5:5953ca12205d 494
ajorgih3 6:fbaee888e5ea 495 uLCD.filled_rectangle(0, 9, 127, 14, 0xD2691E); // Top
ajorgih3 6:fbaee888e5ea 496 uLCD.filled_rectangle(0, 13, 2, 114, 0xD2691E); // Left
ajorgih3 6:fbaee888e5ea 497 uLCD.filled_rectangle(0, 114, 127, 117, 0xD2691E); // Bottom
ajorgih3 6:fbaee888e5ea 498 uLCD.filled_rectangle(124, 14, 127, 117, 0xD2691E); // Right
ajorgih3 5:5953ca12205d 499
ajorgih3 6:fbaee888e5ea 500 uLCD.text_width(1);
ajorgih3 6:fbaee888e5ea 501 uLCD.text_height(1);
ajorgih3 6:fbaee888e5ea 502 uLCD.locate(2, 3);
ajorgih3 6:fbaee888e5ea 503 uLCD.color(0xFFA500);
ajorgih3 6:fbaee888e5ea 504 uLCD.printf("HARMFUL ITEMS++");
ajorgih3 5:5953ca12205d 505
ajorgih3 6:fbaee888e5ea 506 uLCD.text_width(1);
ajorgih3 6:fbaee888e5ea 507 uLCD.text_height(1);
ajorgih3 6:fbaee888e5ea 508 uLCD.locate(4, 4);
ajorgih3 6:fbaee888e5ea 509 uLCD.color(0xFFFFFF);
ajorgih3 6:fbaee888e5ea 510 uLCD.printf("SLOWFLAKES");
ajorgih3 5:5953ca12205d 511
ajorgih3 6:fbaee888e5ea 512 uLCD.text_width(1);
ajorgih3 6:fbaee888e5ea 513 uLCD.text_height(1);
ajorgih3 6:fbaee888e5ea 514 uLCD.locate(4, 5);
ajorgih3 6:fbaee888e5ea 515 uLCD.color(0xFFFFFF);
ajorgih3 6:fbaee888e5ea 516 uLCD.printf("LIFETAKER");
ajorgih3 5:5953ca12205d 517
ajorgih3 6:fbaee888e5ea 518 uLCD.text_width(1);
ajorgih3 6:fbaee888e5ea 519 uLCD.text_height(1);
ajorgih3 6:fbaee888e5ea 520 uLCD.locate(4, 6);
ajorgih3 6:fbaee888e5ea 521 uLCD.color(0xFFFFFF);
ajorgih3 6:fbaee888e5ea 522 uLCD.printf("LIGHTSPEED");
ajorgih3 5:5953ca12205d 523
ajorgih3 6:fbaee888e5ea 524 draw_snowflake(u-22, v+11);
ajorgih3 6:fbaee888e5ea 525 draw_sword(u, v+11);
ajorgih3 6:fbaee888e5ea 526 draw_lightspeed(u+22, v+11);
ajorgih3 5:5953ca12205d 527
ajorgih3 6:fbaee888e5ea 528 uLCD.textbackground_color(BLACK);
ajorgih3 6:fbaee888e5ea 529 uLCD.color(0xFFFFFF);
ajorgih3 6:fbaee888e5ea 530 uLCD.text_width(1);
ajorgih3 6:fbaee888e5ea 531 uLCD.text_height(1);
ajorgih3 6:fbaee888e5ea 532 uLCD.locate(3, 11);
ajorgih3 6:fbaee888e5ea 533 uLCD.printf("Press 'B2'\n");
ajorgih3 6:fbaee888e5ea 534 uLCD.locate(3, 12);
ajorgih3 6:fbaee888e5ea 535 uLCD.printf("to continue!\n");
ajorgih3 5:5953ca12205d 536
ajorgih3 6:fbaee888e5ea 537 do {
ajorgih3 6:fbaee888e5ea 538 input = read_inputs();
ajorgih3 6:fbaee888e5ea 539 } while(input.b2);
ajorgih3 6:fbaee888e5ea 540 uLCD.filled_rectangle(0, 0, 255, 255, BLACK);
ajorgih3 5:5953ca12205d 541 }
ajorgih3 5:5953ca12205d 542
ajorgih3 7:7ab2f4b09196 543 void additional_info() {
ajorgih3 7:7ab2f4b09196 544
ajorgih3 7:7ab2f4b09196 545 input = read_inputs();
ajorgih3 7:7ab2f4b09196 546
ajorgih3 7:7ab2f4b09196 547 uLCD.text_width(1);
ajorgih3 7:7ab2f4b09196 548 uLCD.text_height(1);
ajorgih3 7:7ab2f4b09196 549 uLCD.locate(1, 3);
ajorgih3 7:7ab2f4b09196 550 uLCD.color(0xFFFFFF);
ajorgih3 7:7ab2f4b09196 551 uLCD.printf("B1: OTHER ITEMS!");
ajorgih3 7:7ab2f4b09196 552
ajorgih3 7:7ab2f4b09196 553 uLCD.text_width(1);
ajorgih3 7:7ab2f4b09196 554 uLCD.text_height(1);
ajorgih3 7:7ab2f4b09196 555 uLCD.locate(2, 6);
ajorgih3 7:7ab2f4b09196 556 uLCD.color(0xFFFFFF);
ajorgih3 7:7ab2f4b09196 557 uLCD.printf("B2: DIFFICULTY MODES!");
ajorgih3 7:7ab2f4b09196 558
ajorgih3 7:7ab2f4b09196 559 if (!input.b1) {
ajorgih3 7:7ab2f4b09196 560 harmful_items2();
ajorgih3 7:7ab2f4b09196 561 }
ajorgih3 7:7ab2f4b09196 562
ajorgih3 7:7ab2f4b09196 563 do {
ajorgih3 7:7ab2f4b09196 564 input = read_inputs();
ajorgih3 7:7ab2f4b09196 565 } while(input.b3);
ajorgih3 7:7ab2f4b09196 566
ajorgih3 7:7ab2f4b09196 567 uLCD.filled_rectangle(0, 0, 255, 255, BLACK);
ajorgih3 7:7ab2f4b09196 568 }
ajorgih3 7:7ab2f4b09196 569
ajorgih3 5:5953ca12205d 570
DCchico 1:10330bce85cb 571 /**
DCchico 1:10330bce85cb 572 * Initialize the main world map. Add walls around the edges, interior chambers,
DCchico 1:10330bce85cb 573 * and plants in the background so you can see motion.
DCchico 1:10330bce85cb 574 */
DCchico 1:10330bce85cb 575 void init_main_map()
ajorgih3 3:bb6f73642f01 576 {
DCchico 1:10330bce85cb 577 // "Random" plants
ajorgih3 6:fbaee888e5ea 578 Map* map = set_active_map(0);
ajorgih3 6:fbaee888e5ea 579 pc.printf("plants\r\n");
DCchico 1:10330bce85cb 580
ajorgih3 6:fbaee888e5ea 581 add_sword(10, 10);
ajorgih3 6:fbaee888e5ea 582 add_goodie(8, 4);
ajorgih3 6:fbaee888e5ea 583 add_goodie(11, 3);
ajorgih3 6:fbaee888e5ea 584 add_goodie(5, 3);
ajorgih3 6:fbaee888e5ea 585 add_shield(8, 7);
ajorgih3 6:fbaee888e5ea 586 add_life(14,15);
ajorgih3 6:fbaee888e5ea 587 add_snowflake(20, 20);
ajorgih3 6:fbaee888e5ea 588 add_plant(7, 19);
ajorgih3 6:fbaee888e5ea 589 add_snake_head(5, 4);
ajorgih3 6:fbaee888e5ea 590 add_goodie(16, 5);
ajorgih3 6:fbaee888e5ea 591 add_lightspeed(15, 6);
ajorgih3 6:fbaee888e5ea 592 add_goodie(7, 5);
ajorgih3 7:7ab2f4b09196 593 //add_reverse(18, 5);
ajorgih3 7:7ab2f4b09196 594 //add_blue_potion(20,5);
ajorgih3 7:7ab2f4b09196 595 add_red_potion(22, 5);
ajorgih3 7:7ab2f4b09196 596 add_goodie(27, 5);
ajorgih3 7:7ab2f4b09196 597 add_goodie(27, 4);
ajorgih3 7:7ab2f4b09196 598 add_goodie(27, 3);
ajorgih3 7:7ab2f4b09196 599 add_goodie(26, 3);
ajorgih3 7:7ab2f4b09196 600 add_goodie(25, 3);
ajorgih3 7:7ab2f4b09196 601 add_goodie(24, 3);
ajorgih3 7:7ab2f4b09196 602 add_blue_potion(8, 5);
ajorgih3 7:7ab2f4b09196 603 for (int i = 0; i < 40; i++) {
ajorgih3 7:7ab2f4b09196 604 add_goodie(i, 6);
ajorgih3 7:7ab2f4b09196 605 }
ajorgih3 7:7ab2f4b09196 606
ajorgih3 7:7ab2f4b09196 607
ajorgih3 7:7ab2f4b09196 608
ajorgih3 7:7ab2f4b09196 609
ajorgih3 6:fbaee888e5ea 610 pc.printf("Adding walls!\r\n");
ajorgih3 6:fbaee888e5ea 611 add_wall(0, 0, HORIZONTAL, map_width());
ajorgih3 6:fbaee888e5ea 612 add_wall(0, map_height()-1, HORIZONTAL, map_width());
ajorgih3 6:fbaee888e5ea 613 add_wall(0, 0, VERTICAL, map_height());
ajorgih3 6:fbaee888e5ea 614 add_wall(map_width()-1, 0, VERTICAL, map_height());
ajorgih3 6:fbaee888e5ea 615 pc.printf("Walls done!\r\n");
DCchico 1:10330bce85cb 616
ajorgih3 6:fbaee888e5ea 617 add_snake_head(snake.locations[0].x, snake.locations[0].y);
ajorgih3 6:fbaee888e5ea 618 add_snake_body(snake.locations[1].x, snake.locations[1].y);
ajorgih3 6:fbaee888e5ea 619 add_snake_tail(snake.locations[2].x, snake.locations[2].y);
DCchico 1:10330bce85cb 620
ajorgih3 6:fbaee888e5ea 621 pc.printf("Add extra chamber\r\n");
ajorgih3 6:fbaee888e5ea 622 add_wall(30, 0, VERTICAL, 10);
ajorgih3 6:fbaee888e5ea 623 add_wall(30, 10, HORIZONTAL, 10);
ajorgih3 6:fbaee888e5ea 624 add_wall(39, 0, VERTICAL, 10);
ajorgih3 6:fbaee888e5ea 625 pc.printf("Added!\r\n");
ajorgih3 3:bb6f73642f01 626
ajorgih3 3:bb6f73642f01 627
DCchico 1:10330bce85cb 628
DCchico 1:10330bce85cb 629
DCchico 1:10330bce85cb 630 // Add stairs to chamber (map 1)
DCchico 1:10330bce85cb 631 //add_stairs(15, 5, 1, 5, 5);
DCchico 1:10330bce85cb 632
DCchico 1:10330bce85cb 633 // profile_hashtable();
ajorgih3 6:fbaee888e5ea 634 print_map();
DCchico 1:10330bce85cb 635 }
DCchico 1:10330bce85cb 636
ajorgih3 5:5953ca12205d 637 void init_map_2() {
ajorgih3 5:5953ca12205d 638
ajorgih3 6:fbaee888e5ea 639 Map* map = set_active_map(0);
ajorgih3 5:5953ca12205d 640
ajorgih3 6:fbaee888e5ea 641 pc.printf("Adding walls!\r\n");
ajorgih3 6:fbaee888e5ea 642 add_blue_wall(0, 0, HORIZONTAL, map_width());
ajorgih3 6:fbaee888e5ea 643 add_blue_wall(0, map_height()-1, HORIZONTAL, map_width());
ajorgih3 6:fbaee888e5ea 644 add_blue_wall(0, 0, VERTICAL, map_height());
ajorgih3 6:fbaee888e5ea 645 add_blue_wall(map_width()-1, 0, VERTICAL, map_height());
ajorgih3 6:fbaee888e5ea 646 pc.printf("Walls done!\r\n");
ajorgih3 5:5953ca12205d 647
ajorgih3 3:bb6f73642f01 648 }
ajorgih3 3:bb6f73642f01 649
ajorgih3 5:5953ca12205d 650 void go_right2() {
ajorgih3 6:fbaee888e5ea 651 add_nothing(snake.tail_x, snake.tail_y);
ajorgih3 5:5953ca12205d 652 // previous coordinate of the snake head which will be used by the body
ajorgih3 6:fbaee888e5ea 653 int previousX = snake.head_x;
ajorgih3 6:fbaee888e5ea 654 int previousY = snake.head_y;
ajorgih3 5:5953ca12205d 655 //int tempPreviousX = previousX;
ajorgih3 5:5953ca12205d 656 //int tempPreviousY = previousY;
ajorgih3 6:fbaee888e5ea 657 pc.printf("previousX: %d, previousY: %d\n", previousX, previousY);
ajorgih3 3:bb6f73642f01 658
ajorgih3 5:5953ca12205d 659 // try this
ajorgih3 6:fbaee888e5ea 660 for (int i = 0; i < bodyLength; i++) {
ajorgih3 6:fbaee888e5ea 661 pc.printf("Loop Number: %d\n", i);
ajorgih3 3:bb6f73642f01 662
ajorgih3 6:fbaee888e5ea 663 add_snake_body(previousX, previousY); // adds snake body to the head //7, 5
ajorgih3 6:fbaee888e5ea 664 pc.printf("previousX: %d, previousY: %d\n", previousX, previousY);
ajorgih3 3:bb6f73642f01 665
ajorgih3 6:fbaee888e5ea 666 snake.body_x = previousX; // updates the coordinates of the snake body with the previous head
ajorgih3 6:fbaee888e5ea 667 snake.body_y = previousY; // snake body is now 7, 5
ajorgih3 4:697e1120f821 668
ajorgih3 6:fbaee888e5ea 669 pc.printf("snake_body_x: %d, snake_body_y: %d\n", snake.body_x, snake.body_y);
ajorgih3 6:fbaee888e5ea 670 pc.printf("snake.locations[%d].x: %d, snake.locations[%d].x: %d\n", i, snake.locations[i].x, i, snake.locations[i].y);
ajorgih3 4:697e1120f821 671
ajorgih3 6:fbaee888e5ea 672 previousX = snake.locations[i].x; // previous location of the body to previousX
ajorgih3 6:fbaee888e5ea 673 previousY = snake.locations[i].y; // and previousY //6,5
ajorgih3 5:5953ca12205d 674
ajorgih3 6:fbaee888e5ea 675 pc.printf("previousX: %d, previousY: %d\n", previousX, previousY);
ajorgih3 5:5953ca12205d 676
ajorgih3 6:fbaee888e5ea 677 snake.locations[i].x = snake.body_x; // updates the snake locations with the new values
ajorgih3 6:fbaee888e5ea 678 snake.locations[i].y = snake.body_y;
ajorgih3 4:697e1120f821 679
ajorgih3 6:fbaee888e5ea 680 pc.printf("snake.locations[%d].x: %d, snake.locations[%d].x: %d\n", i, snake.locations[i].x, i, snake.locations[i].y);
ajorgih3 6:fbaee888e5ea 681 }
ajorgih3 5:5953ca12205d 682
ajorgih3 6:fbaee888e5ea 683 snake.tail_x = previousX;
ajorgih3 6:fbaee888e5ea 684 snake.tail_y = previousY;
ajorgih3 6:fbaee888e5ea 685 add_snake_tail(snake.tail_x, snake.tail_y);
ajorgih3 4:697e1120f821 686
ajorgih3 5:5953ca12205d 687 // update the head
ajorgih3 6:fbaee888e5ea 688 snake.head_x = snake.head_x + 1;
ajorgih3 6:fbaee888e5ea 689 snake.head_y = snake.head_y + 0;
ajorgih3 6:fbaee888e5ea 690 add_snake_head(snake.head_x, snake.head_y); // correct
ajorgih3 6:fbaee888e5ea 691
ajorgih3 6:fbaee888e5ea 692 if (speedCounter <= 50 && speedCounter != 0) {
ajorgih3 6:fbaee888e5ea 693 speedCounter--;
ajorgih3 6:fbaee888e5ea 694 return;
ajorgih3 6:fbaee888e5ea 695 }
ajorgih3 7:7ab2f4b09196 696 if (slowflakeCounter <= 20 && slowflakeCounter != 0) {
ajorgih3 7:7ab2f4b09196 697 slowflakeCounter--;
ajorgih3 7:7ab2f4b09196 698 wait(1);
ajorgih3 7:7ab2f4b09196 699 return;
ajorgih3 7:7ab2f4b09196 700 }
ajorgih3 3:bb6f73642f01 701
ajorgih3 6:fbaee888e5ea 702 wait(0.2);
ajorgih3 3:bb6f73642f01 703 }
ajorgih3 3:bb6f73642f01 704
ajorgih3 5:5953ca12205d 705 void go_up2() {
ajorgih3 6:fbaee888e5ea 706 add_nothing(snake.tail_x, snake.tail_y);
ajorgih3 5:5953ca12205d 707 // previous coordinate of the snake head which will be used by the body
ajorgih3 6:fbaee888e5ea 708 int previousX = snake.head_x;
ajorgih3 6:fbaee888e5ea 709 int previousY = snake.head_y;
ajorgih3 5:5953ca12205d 710 //int tempPreviousX = previousX;
ajorgih3 5:5953ca12205d 711 //int tempPreviousY = previousY;
ajorgih3 6:fbaee888e5ea 712 pc.printf("previousX: %d, previousY: %d\n", previousX, previousY);
ajorgih3 4:697e1120f821 713
ajorgih3 5:5953ca12205d 714 // try this
ajorgih3 6:fbaee888e5ea 715 for (int i = 0; i < bodyLength; i++) {
ajorgih3 6:fbaee888e5ea 716 pc.printf("Loop Number: %d\n", i);
ajorgih3 5:5953ca12205d 717
ajorgih3 6:fbaee888e5ea 718 add_snake_body(previousX, previousY); // adds snake body to the head //7, 5
ajorgih3 6:fbaee888e5ea 719 pc.printf("previousX: %d, previousY: %d\n", previousX, previousY);
ajorgih3 5:5953ca12205d 720
ajorgih3 6:fbaee888e5ea 721 snake.body_x = previousX; // updates the coordinates of the snake body with the previous head
ajorgih3 6:fbaee888e5ea 722 snake.body_y = previousY; // snake body is now 7, 5
ajorgih3 5:5953ca12205d 723
ajorgih3 6:fbaee888e5ea 724 pc.printf("snake_body_x: %d, snake_body_y: %d\n", snake.body_x, snake.body_y);
ajorgih3 6:fbaee888e5ea 725 pc.printf("snake.locations[%d].x: %d, snake.locations[%d].x: %d\n", i, snake.locations[i].x, i, snake.locations[i].y);
ajorgih3 5:5953ca12205d 726
ajorgih3 6:fbaee888e5ea 727 previousX = snake.locations[i].x; // previous location of the body to previousX
ajorgih3 6:fbaee888e5ea 728 previousY = snake.locations[i].y; // and previousY //6,5
ajorgih3 5:5953ca12205d 729
ajorgih3 6:fbaee888e5ea 730 pc.printf("previousX: %d, previousY: %d\n", previousX, previousY);
ajorgih3 5:5953ca12205d 731
ajorgih3 6:fbaee888e5ea 732 snake.locations[i].x = snake.body_x; // updates the snake locations with the new values
ajorgih3 6:fbaee888e5ea 733 snake.locations[i].y = snake.body_y;
ajorgih3 5:5953ca12205d 734
ajorgih3 6:fbaee888e5ea 735 pc.printf("snake.locations[%d].x: %d, snake.locations[%d].x: %d\n", i, snake.locations[i].x, i, snake.locations[i].y);
ajorgih3 6:fbaee888e5ea 736 }
ajorgih3 5:5953ca12205d 737
ajorgih3 6:fbaee888e5ea 738 snake.tail_x = previousX;
ajorgih3 6:fbaee888e5ea 739 snake.tail_y = previousY;
ajorgih3 6:fbaee888e5ea 740 add_snake_tail(snake.tail_x, snake.tail_y);
ajorgih3 4:697e1120f821 741
ajorgih3 5:5953ca12205d 742 // update the head
ajorgih3 6:fbaee888e5ea 743 snake.head_x = snake.head_x + 0;
ajorgih3 6:fbaee888e5ea 744 snake.head_y = snake.head_y - 1;
ajorgih3 6:fbaee888e5ea 745 add_snake_head(snake.head_x, snake.head_y); // correct
ajorgih3 6:fbaee888e5ea 746
ajorgih3 6:fbaee888e5ea 747 if (speedCounter <= 50 && speedCounter != 0) {
ajorgih3 6:fbaee888e5ea 748 speedCounter--;
ajorgih3 6:fbaee888e5ea 749 return;
ajorgih3 6:fbaee888e5ea 750 }
ajorgih3 7:7ab2f4b09196 751 if (slowflakeCounter <= 20 && slowflakeCounter != 0) {
ajorgih3 7:7ab2f4b09196 752 slowflakeCounter--;
ajorgih3 7:7ab2f4b09196 753 wait(1);
ajorgih3 7:7ab2f4b09196 754 return;
ajorgih3 7:7ab2f4b09196 755 }
ajorgih3 5:5953ca12205d 756
ajorgih3 6:fbaee888e5ea 757 wait(0.2);
ajorgih3 4:697e1120f821 758 }
ajorgih3 4:697e1120f821 759
ajorgih3 5:5953ca12205d 760 void go_down2() {
ajorgih3 6:fbaee888e5ea 761 add_nothing(snake.tail_x, snake.tail_y);
ajorgih3 5:5953ca12205d 762 // previous coordinate of the snake head which will be used by the body
ajorgih3 6:fbaee888e5ea 763 int previousX = snake.head_x;
ajorgih3 6:fbaee888e5ea 764 int previousY = snake.head_y;
ajorgih3 5:5953ca12205d 765 //int tempPreviousX = previousX;
ajorgih3 5:5953ca12205d 766 //int tempPreviousY = previousY;
ajorgih3 6:fbaee888e5ea 767 pc.printf("previousX: %d, previousY: %d\n", previousX, previousY);
ajorgih3 4:697e1120f821 768
ajorgih3 5:5953ca12205d 769 // try this
ajorgih3 6:fbaee888e5ea 770 for (int i = 0; i < bodyLength; i++) {
ajorgih3 6:fbaee888e5ea 771 pc.printf("Loop Number: %d\n", i);
ajorgih3 5:5953ca12205d 772
ajorgih3 6:fbaee888e5ea 773 add_snake_body(previousX, previousY); // adds snake body to the head //7, 5
ajorgih3 6:fbaee888e5ea 774 pc.printf("previousX: %d, previousY: %d\n", previousX, previousY);
ajorgih3 5:5953ca12205d 775
ajorgih3 6:fbaee888e5ea 776 snake.body_x = previousX; // updates the coordinates of the snake body with the previous head
ajorgih3 6:fbaee888e5ea 777 snake.body_y = previousY; // snake body is now 7, 5
ajorgih3 5:5953ca12205d 778
ajorgih3 6:fbaee888e5ea 779 pc.printf("snake_body_x: %d, snake_body_y: %d\n", snake.body_x, snake.body_y);
ajorgih3 6:fbaee888e5ea 780 pc.printf("snake.locations[%d].x: %d, snake.locations[%d].x: %d\n", i, snake.locations[i].x, i, snake.locations[i].y);
ajorgih3 5:5953ca12205d 781
ajorgih3 6:fbaee888e5ea 782 previousX = snake.locations[i].x; // previous location of the body to previousX
ajorgih3 6:fbaee888e5ea 783 previousY = snake.locations[i].y; // and previousY //6,5
ajorgih3 4:697e1120f821 784
ajorgih3 6:fbaee888e5ea 785 pc.printf("previousX: %d, previousY: %d\n", previousX, previousY);
ajorgih3 5:5953ca12205d 786
ajorgih3 6:fbaee888e5ea 787 snake.locations[i].x = snake.body_x; // updates the snake locations with the new values
ajorgih3 6:fbaee888e5ea 788 snake.locations[i].y = snake.body_y;
ajorgih3 5:5953ca12205d 789
ajorgih3 6:fbaee888e5ea 790 pc.printf("snake.locations[%d].x: %d, snake.locations[%d].x: %d\n", i, snake.locations[i].x, i, snake.locations[i].y);
ajorgih3 6:fbaee888e5ea 791 }
ajorgih3 5:5953ca12205d 792
ajorgih3 6:fbaee888e5ea 793 snake.tail_x = previousX;
ajorgih3 6:fbaee888e5ea 794 snake.tail_y = previousY;
ajorgih3 6:fbaee888e5ea 795 add_snake_tail(snake.tail_x, snake.tail_y);
ajorgih3 5:5953ca12205d 796
ajorgih3 5:5953ca12205d 797 // update the head
ajorgih3 6:fbaee888e5ea 798 snake.head_x = snake.head_x + 0;
ajorgih3 6:fbaee888e5ea 799 snake.head_y = snake.head_y + 1;
ajorgih3 6:fbaee888e5ea 800 add_snake_head(snake.head_x, snake.head_y); // correct
ajorgih3 6:fbaee888e5ea 801
ajorgih3 6:fbaee888e5ea 802 if (speedCounter <= 50 && speedCounter != 0) {
ajorgih3 6:fbaee888e5ea 803 speedCounter--;
ajorgih3 6:fbaee888e5ea 804 return;
ajorgih3 6:fbaee888e5ea 805 }
ajorgih3 7:7ab2f4b09196 806
ajorgih3 7:7ab2f4b09196 807 if (slowflakeCounter <= 20 && slowflakeCounter != 0) {
ajorgih3 7:7ab2f4b09196 808 slowflakeCounter--;
ajorgih3 7:7ab2f4b09196 809 wait(1);
ajorgih3 7:7ab2f4b09196 810 return;
ajorgih3 7:7ab2f4b09196 811 }
ajorgih3 5:5953ca12205d 812
ajorgih3 6:fbaee888e5ea 813 wait(0.2);
ajorgih3 4:697e1120f821 814 }
ajorgih3 4:697e1120f821 815
ajorgih3 5:5953ca12205d 816 void go_left2() {
ajorgih3 7:7ab2f4b09196 817
ajorgih3 7:7ab2f4b09196 818 if (get_here(snake.head_x - 1, snake.head_y)->walkable) {
ajorgih3 7:7ab2f4b09196 819 return;
ajorgih3 7:7ab2f4b09196 820 }
ajorgih3 7:7ab2f4b09196 821
ajorgih3 6:fbaee888e5ea 822 add_nothing(snake.tail_x, snake.tail_y);
ajorgih3 5:5953ca12205d 823 // previous coordinate of the snake head which will be used by the body
ajorgih3 6:fbaee888e5ea 824 int previousX = snake.head_x;
ajorgih3 6:fbaee888e5ea 825 int previousY = snake.head_y;
ajorgih3 5:5953ca12205d 826 //int tempPreviousX = previousX;
ajorgih3 5:5953ca12205d 827 //int tempPreviousY = previousY;
ajorgih3 6:fbaee888e5ea 828 pc.printf("previousX: %d, previousY: %d\n", previousX, previousY);
ajorgih3 4:697e1120f821 829
ajorgih3 5:5953ca12205d 830 // try this
ajorgih3 6:fbaee888e5ea 831 for (int i = 0; i < bodyLength; i++) {
ajorgih3 6:fbaee888e5ea 832 pc.printf("Loop Number: %d\n", i);
ajorgih3 5:5953ca12205d 833
ajorgih3 6:fbaee888e5ea 834 add_snake_body(previousX, previousY); // adds snake body to the head //7, 5
ajorgih3 6:fbaee888e5ea 835 pc.printf("previousX: %d, previousY: %d\n", previousX, previousY);
ajorgih3 5:5953ca12205d 836
ajorgih3 6:fbaee888e5ea 837 snake.body_x = previousX; // updates the coordinates of the snake body with the previous head
ajorgih3 6:fbaee888e5ea 838 snake.body_y = previousY; // snake body is now 7, 5
ajorgih3 5:5953ca12205d 839
ajorgih3 6:fbaee888e5ea 840 pc.printf("snake_body_x: %d, snake_body_y: %d\n", snake.body_x, snake.body_y);
ajorgih3 6:fbaee888e5ea 841 pc.printf("snake.locations[%d].x: %d, snake.locations[%d].x: %d\n", i, snake.locations[i].x, i, snake.locations[i].y);
ajorgih3 5:5953ca12205d 842
ajorgih3 6:fbaee888e5ea 843 previousX = snake.locations[i].x; // previous location of the body to previousX
ajorgih3 6:fbaee888e5ea 844 previousY = snake.locations[i].y; // and previousY //6,5
ajorgih3 5:5953ca12205d 845
ajorgih3 6:fbaee888e5ea 846 pc.printf("previousX: %d, previousY: %d\n", previousX, previousY);
ajorgih3 5:5953ca12205d 847
ajorgih3 6:fbaee888e5ea 848 snake.locations[i].x = snake.body_x; // updates the snake locations with the new values
ajorgih3 6:fbaee888e5ea 849 snake.locations[i].y = snake.body_y;
ajorgih3 5:5953ca12205d 850
ajorgih3 6:fbaee888e5ea 851 pc.printf("snake.locations[%d].x: %d, snake.locations[%d].x: %d\n", i, snake.locations[i].x, i, snake.locations[i].y);
ajorgih3 6:fbaee888e5ea 852 }
ajorgih3 5:5953ca12205d 853
ajorgih3 6:fbaee888e5ea 854 snake.tail_x = previousX;
ajorgih3 6:fbaee888e5ea 855 snake.tail_y = previousY;
ajorgih3 6:fbaee888e5ea 856 add_snake_tail(snake.tail_x, snake.tail_y);
ajorgih3 4:697e1120f821 857
ajorgih3 5:5953ca12205d 858 // update the head
ajorgih3 6:fbaee888e5ea 859 snake.head_x = snake.head_x - 1;
ajorgih3 6:fbaee888e5ea 860 snake.head_y = snake.head_y + 0;
ajorgih3 6:fbaee888e5ea 861 add_snake_head(snake.head_x, snake.head_y); // correct
ajorgih3 6:fbaee888e5ea 862
ajorgih3 6:fbaee888e5ea 863 if (speedCounter <= 50 && speedCounter != 0) {
ajorgih3 6:fbaee888e5ea 864 speedCounter--;
ajorgih3 6:fbaee888e5ea 865 return;
ajorgih3 6:fbaee888e5ea 866 }
ajorgih3 7:7ab2f4b09196 867
ajorgih3 7:7ab2f4b09196 868 if (slowflakeCounter <= 20 && slowflakeCounter != 0) {
ajorgih3 7:7ab2f4b09196 869 slowflakeCounter--;
ajorgih3 7:7ab2f4b09196 870 wait(1);
ajorgih3 7:7ab2f4b09196 871 return;
ajorgih3 7:7ab2f4b09196 872 }
ajorgih3 4:697e1120f821 873
ajorgih3 6:fbaee888e5ea 874 wait(0.2);
ajorgih3 4:697e1120f821 875
ajorgih3 3:bb6f73642f01 876 }
ajorgih3 3:bb6f73642f01 877
ajorgih3 3:bb6f73642f01 878
ajorgih3 3:bb6f73642f01 879 int update_game(int action)
ajorgih3 3:bb6f73642f01 880 {
ajorgih3 6:fbaee888e5ea 881 snake.head_px = snake.head_x;
ajorgih3 6:fbaee888e5ea 882 snake.body_px = snake.body_x;
ajorgih3 6:fbaee888e5ea 883 snake.tail_px = snake.tail_x;
ajorgih3 6:fbaee888e5ea 884 snake.head_py = snake.head_y;
ajorgih3 6:fbaee888e5ea 885 snake.body_py = snake.body_y;
ajorgih3 6:fbaee888e5ea 886 snake.tail_py = snake.tail_y;
ajorgih3 5:5953ca12205d 887
ajorgih3 5:5953ca12205d 888 //snake.locations[0].x = snake.body_x;
ajorgih3 5:5953ca12205d 889 //snake.locations[0].y = snake.body_y;
ajorgih3 3:bb6f73642f01 890
ajorgih3 7:7ab2f4b09196 891 if (score == 20) {
ajorgih3 7:7ab2f4b09196 892 draw_game(WIN_GAME);
ajorgih3 7:7ab2f4b09196 893 }
ajorgih3 7:7ab2f4b09196 894
ajorgih3 7:7ab2f4b09196 895
ajorgih3 7:7ab2f4b09196 896 //pc.printf("Shield Counter: %d\n", shieldCounter);
ajorgih3 6:fbaee888e5ea 897 switch(action) {
ajorgih3 3:bb6f73642f01 898
ajorgih3 6:fbaee888e5ea 899 case GO_RIGHT:
ajorgih3 6:fbaee888e5ea 900 nextHead = get_east(snake.head_x, snake.head_y);
ajorgih3 6:fbaee888e5ea 901 pc.printf("GO RIGHT\n");
ajorgih3 7:7ab2f4b09196 902 if (nextHead->walkable && nextHead->type != LIFE && nextHead->type != GOODIE && nextHead->type != SWORD && nextHead->type != REVERSE && nextHead->type != LIGHTSPEED && nextHead->type != SHIELD && nextHead->type != SNOWFLAKE && nextHead->type != BLUEPOTION && nextHead->type !=REDPOTION && nextHead->type != BLUEPOTION) {
ajorgih3 6:fbaee888e5ea 903 pc.printf("Before:\n");
ajorgih3 6:fbaee888e5ea 904 pc.printf("head_x: %d, head_y: %d\n", snake.head_x, snake.head_y);
ajorgih3 6:fbaee888e5ea 905 pc.printf("body_x: %d, body_y: %d\n", snake.body_x, snake.body_y);
ajorgih3 6:fbaee888e5ea 906 pc.printf("tail_x: %d, tail_y: %d\n", snake.tail_x, snake.tail_y);
ajorgih3 6:fbaee888e5ea 907 pc.printf("reverseCounter: %d\n\n", reverseCounter);
ajorgih3 7:7ab2f4b09196 908 pc.printf("speedCounter: %d\n\n", speedCounter);
ajorgih3 7:7ab2f4b09196 909 pc.printf("shieldCounter: %d\n\n", shieldCounter);
ajorgih3 7:7ab2f4b09196 910 pc.printf("slowflakeCounter: %d", slowflakeCounter);
ajorgih3 7:7ab2f4b09196 911 pc.printf("blueCounter: %d\n", blueCounter);
ajorgih3 7:7ab2f4b09196 912 pc.printf("redCounter: %d", redCounter);
ajorgih3 6:fbaee888e5ea 913 if (reverseCounter == 0) {
ajorgih3 6:fbaee888e5ea 914 go_right2();
ajorgih3 6:fbaee888e5ea 915 }
ajorgih3 6:fbaee888e5ea 916 if (reverseCounter <= 20 && reverseCounter != 0) {
ajorgih3 6:fbaee888e5ea 917 go_left2();
ajorgih3 7:7ab2f4b09196 918 pc.printf("reverseCounter: %d", reverseCounter);
ajorgih3 6:fbaee888e5ea 919 reverseCounter--;
ajorgih3 6:fbaee888e5ea 920 }
ajorgih3 5:5953ca12205d 921 //draw_snake_head(snake.head_pi, snake.head_pj);
ajorgih3 5:5953ca12205d 922 //draw_snake_body(snake.body_pi, snake.body_pj);
ajorgih3 5:5953ca12205d 923 //draw_snake_tail(snake.tail_pi, snake.tail_pj);
ajorgih3 6:fbaee888e5ea 924 updateY();
ajorgih3 6:fbaee888e5ea 925 pc.printf("After:\n");
ajorgih3 6:fbaee888e5ea 926 pc.printf("head_x: %d, head_y: %d\n", snake.head_x, snake.head_y);
ajorgih3 6:fbaee888e5ea 927 pc.printf("body_x: %d, body_y: %d\n", snake.body_x, snake.body_y);
ajorgih3 6:fbaee888e5ea 928 pc.printf("tail_x: %d, tail_y: %d\n", snake.tail_x, snake.tail_y);
ajorgih3 6:fbaee888e5ea 929 if (shieldCounter <= 15 && shieldCounter != 0) {
ajorgih3 6:fbaee888e5ea 930 shieldCounter--;
ajorgih3 6:fbaee888e5ea 931 }
ajorgih3 7:7ab2f4b09196 932 if (blueCounter <= 20 && blueCounter != 0) {
ajorgih3 7:7ab2f4b09196 933 blueCounter--;
ajorgih3 7:7ab2f4b09196 934 }
ajorgih3 7:7ab2f4b09196 935 if (redCounter <= 20 && redCounter != 0) {
ajorgih3 7:7ab2f4b09196 936 redCounter--;
ajorgih3 7:7ab2f4b09196 937 }
ajorgih3 6:fbaee888e5ea 938 }
ajorgih3 4:697e1120f821 939
ajorgih3 6:fbaee888e5ea 940 if (!nextHead->walkable && invincibility == false) {
ajorgih3 6:fbaee888e5ea 941 if (shieldCounter == 0) {
ajorgih3 4:697e1120f821 942 if (lives == 0) {
ajorgih3 6:fbaee888e5ea 943 draw_game(GAME_OVER);
ajorgih3 4:697e1120f821 944 }
ajorgih3 4:697e1120f821 945 else {
ajorgih3 6:fbaee888e5ea 946 lives--;
ajorgih3 6:fbaee888e5ea 947 }
ajorgih3 4:697e1120f821 948 }
ajorgih3 6:fbaee888e5ea 949 }
ajorgih3 6:fbaee888e5ea 950
ajorgih3 6:fbaee888e5ea 951 if (nextHead->type == LIFE) {
ajorgih3 5:5953ca12205d 952 lives += 1;
ajorgih3 5:5953ca12205d 953 add_nothing(snake.head_x + 1, snake.head_y);
ajorgih3 6:fbaee888e5ea 954 }
ajorgih3 4:697e1120f821 955
ajorgih3 6:fbaee888e5ea 956 if (nextHead->type == GOODIE) {
ajorgih3 7:7ab2f4b09196 957 if (redCounter == 0) {
ajorgih3 4:697e1120f821 958 score++;
ajorgih3 7:7ab2f4b09196 959 }
ajorgih3 7:7ab2f4b09196 960
ajorgih3 4:697e1120f821 961 map_erase(snake.head_x, snake.head_y);
ajorgih3 5:5953ca12205d 962 add_nothing(snake.head_x + 1, snake.head_y);
ajorgih3 5:5953ca12205d 963
ajorgih3 7:7ab2f4b09196 964 if (blueCounter == 0) {
ajorgih3 5:5953ca12205d 965 // if the snake is straight right
ajorgih3 5:5953ca12205d 966 if ((snake.body_x - 1) == (snake.tail_x)) {
ajorgih3 6:fbaee888e5ea 967 add_snake_body(snake.body_x - 1, snake.body_y);
ajorgih3 6:fbaee888e5ea 968 add_snake_tail(snake.tail_x - 1, snake.tail_y);
ajorgih3 5:5953ca12205d 969 }
ajorgih3 5:5953ca12205d 970
ajorgih3 5:5953ca12205d 971 // if the snake's tail is on top of the body
ajorgih3 5:5953ca12205d 972 if ((snake.body_y - 1) == snake.tail_y) {
ajorgih3 6:fbaee888e5ea 973 add_snake_body(snake.body_x, snake.body_y - 1);
ajorgih3 6:fbaee888e5ea 974 add_snake_tail(snake.tail_x, snake.tail_y - 1);
ajorgih3 5:5953ca12205d 975 }
ajorgih3 5:5953ca12205d 976
ajorgih3 5:5953ca12205d 977 // if the snake's tail is below the body
ajorgih3 5:5953ca12205d 978 if ((snake.body_y + 1) == snake.tail_y) {
ajorgih3 6:fbaee888e5ea 979 add_snake_body(snake.body_x, snake.body_y + 1);
ajorgih3 6:fbaee888e5ea 980 add_snake_tail(snake.tail_x, snake.tail_y + 1);
ajorgih3 5:5953ca12205d 981 }
ajorgih3 5:5953ca12205d 982
ajorgih3 5:5953ca12205d 983 // this places a new body coordinate before the main body, this is go right function
ajorgih3 5:5953ca12205d 984 for (int i = 0; i < SNAKE_MAX_LENGTH; i++) {
ajorgih3 6:fbaee888e5ea 985 if (snake.locations[i].x == 0 && snake.locations[i].y == 0) {
ajorgih3 5:5953ca12205d 986
ajorgih3 5:5953ca12205d 987 // assuming that the snake is all the way to the right
ajorgih3 6:fbaee888e5ea 988 if ((snake.body_x - 1) == snake.tail_x) {
ajorgih3 6:fbaee888e5ea 989 snake.locations[i].x = snake.body_x - 1;
ajorgih3 6:fbaee888e5ea 990 snake.locations[i].y = snake.body_y;
ajorgih3 6:fbaee888e5ea 991 pc.printf("snake.locations[%d].x: %d, snake.locations[%d].y: %d\n", i, snake.locations[i].x, i, snake.locations[i].y);
ajorgih3 6:fbaee888e5ea 992 bodyLength++;
ajorgih3 6:fbaee888e5ea 993 pc.printf("body length: %d\n", bodyLength);
ajorgih3 6:fbaee888e5ea 994 pc.printf("tail_x: %d, tail_y: %d\n", snake.tail_x, snake.tail_y);
ajorgih3 6:fbaee888e5ea 995 snake.tail_x = snake.tail_x - 1;
ajorgih3 6:fbaee888e5ea 996 snake.tail_y = snake.tail_y;
ajorgih3 6:fbaee888e5ea 997 pc.printf("tail_x: %d, tail_y: %d\n", snake.tail_x, snake.tail_y);
ajorgih3 6:fbaee888e5ea 998 }
ajorgih3 5:5953ca12205d 999
ajorgih3 5:5953ca12205d 1000 // tail is over the body
ajorgih3 6:fbaee888e5ea 1001 if ((snake.body_y - 1) == snake.tail_y) {
ajorgih3 6:fbaee888e5ea 1002 snake.locations[i].x = snake.body_x;
ajorgih3 6:fbaee888e5ea 1003 snake.locations[i].y = snake.body_y - 1;
ajorgih3 6:fbaee888e5ea 1004 pc.printf("snake.locations[%d].x: %d, snake.locations[%d].y: %d\n", i, snake.locations[i].x, i, snake.locations[i].y);
ajorgih3 6:fbaee888e5ea 1005 bodyLength++;
ajorgih3 6:fbaee888e5ea 1006 pc.printf("body length: %d\n", bodyLength);
ajorgih3 6:fbaee888e5ea 1007 pc.printf("tail_x: %d, tail_y: %d\n", snake.tail_x, snake.tail_y);
ajorgih3 6:fbaee888e5ea 1008 snake.tail_x = snake.tail_x;
ajorgih3 6:fbaee888e5ea 1009 snake.tail_y = snake.tail_y - 1;
ajorgih3 6:fbaee888e5ea 1010 pc.printf("tail_x: %d, tail_y: %d\n", snake.tail_x, snake.tail_y);
ajorgih3 6:fbaee888e5ea 1011 }
ajorgih3 5:5953ca12205d 1012
ajorgih3 5:5953ca12205d 1013 //assuming that the body is on top of the tail
ajorgih3 6:fbaee888e5ea 1014 if ((snake.body_y + 1) == snake.tail_y) {
ajorgih3 6:fbaee888e5ea 1015 snake.locations[i].x = snake.body_x;
ajorgih3 6:fbaee888e5ea 1016 snake.locations[i].y = snake.body_y + 1;
ajorgih3 6:fbaee888e5ea 1017 pc.printf("snake.locations[%d].x: %d, snake.locations[%d].y: %d\n", i, snake.locations[i].x, i, snake.locations[i].y);
ajorgih3 6:fbaee888e5ea 1018 bodyLength++;
ajorgih3 6:fbaee888e5ea 1019 pc.printf("body length: %d\n", bodyLength);
ajorgih3 6:fbaee888e5ea 1020 pc.printf("tail_x: %d, tail_y: %d\n", snake.tail_x, snake.tail_y);
ajorgih3 6:fbaee888e5ea 1021 snake.tail_x = snake.tail_x;
ajorgih3 6:fbaee888e5ea 1022 snake.tail_y = snake.tail_y + 1;
ajorgih3 6:fbaee888e5ea 1023 pc.printf("tail_x: %d, tail_y: %d\n", snake.tail_x, snake.tail_y);
ajorgih3 6:fbaee888e5ea 1024 }
ajorgih3 5:5953ca12205d 1025
ajorgih3 6:fbaee888e5ea 1026 break;
ajorgih3 6:fbaee888e5ea 1027 }
ajorgih3 6:fbaee888e5ea 1028 pc.printf("i: %d\n", i);
ajorgih3 5:5953ca12205d 1029 }
ajorgih3 6:fbaee888e5ea 1030 }
ajorgih3 7:7ab2f4b09196 1031 }
ajorgih3 4:697e1120f821 1032
ajorgih3 6:fbaee888e5ea 1033 if (nextHead->type == SNOWFLAKE) {
ajorgih3 7:7ab2f4b09196 1034 slowflakeCounter = 20;
ajorgih3 4:697e1120f821 1035 map_erase(snake.head_x, snake.head_y);
ajorgih3 7:7ab2f4b09196 1036 add_nothing(snake.head_x + 1, snake.head_y);
ajorgih3 6:fbaee888e5ea 1037 }
ajorgih3 4:697e1120f821 1038
ajorgih3 6:fbaee888e5ea 1039 if (nextHead->type == SWORD) {
ajorgih3 7:7ab2f4b09196 1040 if (lives == 0 && shieldCounter == 0) {
ajorgih3 6:fbaee888e5ea 1041 draw_game(GAME_OVER);
ajorgih3 4:697e1120f821 1042 }
ajorgih3 4:697e1120f821 1043 else {
ajorgih3 7:7ab2f4b09196 1044 if (shieldCounter == 0) {
ajorgih3 7:7ab2f4b09196 1045 lives--;
ajorgih3 7:7ab2f4b09196 1046 }
ajorgih3 4:697e1120f821 1047 }
ajorgih3 4:697e1120f821 1048 map_erase(snake.head_x, snake.head_y);
ajorgih3 6:fbaee888e5ea 1049 add_nothing(snake.head_x + 1, snake.head_y);
ajorgih3 6:fbaee888e5ea 1050 }
ajorgih3 6:fbaee888e5ea 1051
ajorgih3 6:fbaee888e5ea 1052 if (nextHead->type == REVERSE) {
ajorgih3 6:fbaee888e5ea 1053 reverseCounter = 20;
ajorgih3 4:697e1120f821 1054 map_erase(snake.head_x, snake.head_y);
ajorgih3 6:fbaee888e5ea 1055 add_nothing(snake.head_x + 1, snake.head_y);
ajorgih3 6:fbaee888e5ea 1056 }
ajorgih3 6:fbaee888e5ea 1057
ajorgih3 6:fbaee888e5ea 1058 if (nextHead->type == LIGHTSPEED) {
ajorgih3 6:fbaee888e5ea 1059 speedCounter = 50;
ajorgih3 4:697e1120f821 1060 map_erase(snake.head_x, snake.head_y);
ajorgih3 6:fbaee888e5ea 1061 add_nothing(snake.head_x + 1, snake.head_y);
ajorgih3 6:fbaee888e5ea 1062 }
ajorgih3 6:fbaee888e5ea 1063
ajorgih3 6:fbaee888e5ea 1064 if (nextHead->type == SHIELD) {
ajorgih3 6:fbaee888e5ea 1065 shieldCounter = 15;
ajorgih3 6:fbaee888e5ea 1066 map_erase(snake.head_x, snake.head_y);
ajorgih3 6:fbaee888e5ea 1067 add_nothing(snake.head_x + 1, snake.head_y);
ajorgih3 6:fbaee888e5ea 1068 }
ajorgih3 7:7ab2f4b09196 1069
ajorgih3 7:7ab2f4b09196 1070 if (nextHead->type == REDPOTION) {
ajorgih3 7:7ab2f4b09196 1071 redCounter = 20;
ajorgih3 7:7ab2f4b09196 1072 map_erase(snake.head_x, snake.head_y);
ajorgih3 7:7ab2f4b09196 1073 add_nothing(snake.head_x + 1, snake.head_y);
ajorgih3 7:7ab2f4b09196 1074 }
ajorgih3 7:7ab2f4b09196 1075
ajorgih3 7:7ab2f4b09196 1076 if (nextHead->type == BLUEPOTION) {
ajorgih3 7:7ab2f4b09196 1077 blueCounter = 20;
ajorgih3 7:7ab2f4b09196 1078 map_erase(snake.head_x, snake.head_y);
ajorgih3 7:7ab2f4b09196 1079 add_nothing(snake.head_x + 1, snake.head_y);
ajorgih3 7:7ab2f4b09196 1080 }
ajorgih3 7:7ab2f4b09196 1081
ajorgih3 6:fbaee888e5ea 1082 break;
ajorgih3 4:697e1120f821 1083
ajorgih3 6:fbaee888e5ea 1084 case GO_LEFT:
ajorgih3 6:fbaee888e5ea 1085 nextHead = get_west(snake.head_x, snake.head_y);
ajorgih3 6:fbaee888e5ea 1086 pc.printf("GO LEFT\n");
ajorgih3 7:7ab2f4b09196 1087 if (nextHead->walkable && nextHead->type != LIFE && nextHead->type != GOODIE && nextHead->type != SWORD && nextHead->type != REVERSE && nextHead->type != LIGHTSPEED && nextHead->type != SHIELD && nextHead->type != SNOWFLAKE && nextHead->type != BLUEPOTION && nextHead->type != REDPOTION) {
ajorgih3 6:fbaee888e5ea 1088 pc.printf("Before:\n");
ajorgih3 6:fbaee888e5ea 1089 pc.printf("head_x: %d, head_y: %d\n", snake.head_x, snake.head_y);
ajorgih3 6:fbaee888e5ea 1090 pc.printf("body_x: %d, body_y: %d\n", snake.body_x, snake.body_y);
ajorgih3 6:fbaee888e5ea 1091 pc.printf("tail_x: %d, tail_y: %d\n", snake.tail_x, snake.tail_y);
ajorgih3 7:7ab2f4b09196 1092 pc.printf("reverseCounter: %d\n\n", reverseCounter);
ajorgih3 7:7ab2f4b09196 1093 pc.printf("speedCounter: %d\n\n", speedCounter);
ajorgih3 7:7ab2f4b09196 1094 pc.printf("shieldCounter: %d\n\n", shieldCounter);
ajorgih3 7:7ab2f4b09196 1095 pc.printf("slowflakeCounter: %d", slowflakeCounter);
ajorgih3 7:7ab2f4b09196 1096 pc.printf("blueCounter: %d", blueCounter);
ajorgih3 7:7ab2f4b09196 1097 pc.printf("redCounter: %d", redCounter);
ajorgih3 6:fbaee888e5ea 1098 if (reverseCounter == 0) {
ajorgih3 6:fbaee888e5ea 1099 go_left2();
ajorgih3 6:fbaee888e5ea 1100 }
ajorgih3 6:fbaee888e5ea 1101 if (reverseCounter <= 20 && reverseCounter != 0) {
ajorgih3 7:7ab2f4b09196 1102 go_right2();
ajorgih3 7:7ab2f4b09196 1103 pc.printf("reverseCounter: %d", reverseCounter);
ajorgih3 7:7ab2f4b09196 1104 reverseCounter--;
ajorgih3 6:fbaee888e5ea 1105 }
ajorgih3 5:5953ca12205d 1106 //draw_snake_head(snake.head_pi, snake.head_pj);
ajorgih3 5:5953ca12205d 1107 //draw_snake_body(snake.body_pi, snake.body_pj);
ajorgih3 5:5953ca12205d 1108 //draw_snake_tail(snake.tail_pi, snake.tail_pj);
ajorgih3 6:fbaee888e5ea 1109 updateY();
ajorgih3 6:fbaee888e5ea 1110 pc.printf("After:\n");
ajorgih3 6:fbaee888e5ea 1111 pc.printf("head_x: %d, head_y: %d\n", snake.head_x, snake.head_y);
ajorgih3 6:fbaee888e5ea 1112 pc.printf("body_x: %d, body_y: %d\n", snake.body_x, snake.body_y);
ajorgih3 6:fbaee888e5ea 1113 pc.printf("tail_x: %d, tail_y: %d\n", snake.tail_x, snake.tail_y);
ajorgih3 6:fbaee888e5ea 1114 if (shieldCounter <= 15 && shieldCounter != 0) {
ajorgih3 6:fbaee888e5ea 1115 shieldCounter--;
ajorgih3 6:fbaee888e5ea 1116 }
ajorgih3 7:7ab2f4b09196 1117 if (blueCounter <= 20 && blueCounter != 0) {
ajorgih3 7:7ab2f4b09196 1118 blueCounter--;
ajorgih3 7:7ab2f4b09196 1119 }
ajorgih3 7:7ab2f4b09196 1120 if (redCounter <= 20 && redCounter != 0) {
ajorgih3 7:7ab2f4b09196 1121 redCounter--;
ajorgih3 7:7ab2f4b09196 1122 }
ajorgih3 6:fbaee888e5ea 1123 }
ajorgih3 4:697e1120f821 1124
ajorgih3 6:fbaee888e5ea 1125 if (!nextHead->walkable && invincibility == false) {
ajorgih3 6:fbaee888e5ea 1126 if (shieldCounter == 0) {
ajorgih3 4:697e1120f821 1127 if (lives == 0) {
ajorgih3 6:fbaee888e5ea 1128 draw_game(GAME_OVER);
ajorgih3 4:697e1120f821 1129 }
ajorgih3 4:697e1120f821 1130 else {
ajorgih3 6:fbaee888e5ea 1131 lives--;
ajorgih3 6:fbaee888e5ea 1132 }
ajorgih3 4:697e1120f821 1133 }
ajorgih3 6:fbaee888e5ea 1134 }
ajorgih3 6:fbaee888e5ea 1135
ajorgih3 6:fbaee888e5ea 1136 if (nextHead->type == LIFE) {
ajorgih3 4:697e1120f821 1137 lives++;
ajorgih3 4:697e1120f821 1138 map_erase(snake.head_x, snake.head_y);
ajorgih3 6:fbaee888e5ea 1139 add_nothing(snake.head_x-1, snake.head_y);
ajorgih3 6:fbaee888e5ea 1140 }
ajorgih3 4:697e1120f821 1141
ajorgih3 6:fbaee888e5ea 1142 if (nextHead->type == GOODIE) {
ajorgih3 7:7ab2f4b09196 1143 if (redCounter == 0) {
ajorgih3 4:697e1120f821 1144 score++;
ajorgih3 7:7ab2f4b09196 1145 }
ajorgih3 7:7ab2f4b09196 1146
ajorgih3 4:697e1120f821 1147 map_erase(snake.head_x, snake.head_y);
ajorgih3 7:7ab2f4b09196 1148 add_nothing(snake.head_x - 1, snake.head_y); // eat the goodie
ajorgih3 5:5953ca12205d 1149
ajorgih3 7:7ab2f4b09196 1150 if (blueCounter == 0) {
ajorgih3 5:5953ca12205d 1151 if ((snake.body_x + 1) == (snake.tail_x)) {
ajorgih3 6:fbaee888e5ea 1152 add_nothing(snake.head_x - 1, snake.head_y); // eat the goodie
ajorgih3 6:fbaee888e5ea 1153 add_snake_body(snake.body_x + 1, snake.body_y);
ajorgih3 6:fbaee888e5ea 1154 add_snake_tail(snake.tail_x + 1, snake.tail_y);
ajorgih3 5:5953ca12205d 1155 }
ajorgih3 5:5953ca12205d 1156
ajorgih3 5:5953ca12205d 1157 if ((snake.body_y - 1) == snake.tail_y) {
ajorgih3 6:fbaee888e5ea 1158 add_nothing(snake.head_x - 1, snake.head_y); // eat the goodie
ajorgih3 6:fbaee888e5ea 1159 add_snake_body(snake.body_x, snake.body_y - 1);
ajorgih3 6:fbaee888e5ea 1160 add_snake_tail(snake.tail_x, snake.tail_y - 1);
ajorgih3 5:5953ca12205d 1161 }
ajorgih3 5:5953ca12205d 1162
ajorgih3 5:5953ca12205d 1163 if ((snake.body_y + 1) == snake.tail_y) {
ajorgih3 6:fbaee888e5ea 1164 add_nothing(snake.head_x - 1, snake.head_y); // eat the goodie
ajorgih3 6:fbaee888e5ea 1165 add_snake_body(snake.body_x, snake.body_y + 1);
ajorgih3 6:fbaee888e5ea 1166 add_snake_tail(snake.tail_x, snake.tail_y + 1);
ajorgih3 5:5953ca12205d 1167 }
ajorgih3 5:5953ca12205d 1168
ajorgih3 5:5953ca12205d 1169 // this places a new body coordinate before the main body, this is go right function
ajorgih3 5:5953ca12205d 1170 for (int i = 0; i < SNAKE_MAX_LENGTH; i++) {
ajorgih3 6:fbaee888e5ea 1171 if (snake.locations[i].x == 0 && snake.locations[i].y == 0) {
ajorgih3 5:5953ca12205d 1172
ajorgih3 6:fbaee888e5ea 1173 if ((snake.body_x + 1) == snake.tail_x) {
ajorgih3 6:fbaee888e5ea 1174 snake.locations[i].x = snake.body_x + 1;
ajorgih3 6:fbaee888e5ea 1175 snake.locations[i].y = snake.body_y;
ajorgih3 6:fbaee888e5ea 1176 pc.printf("snake.locations[%d].x: %d, snake.locations[%d].y: %d\n", i, snake.locations[i].x, i, snake.locations[i].y);
ajorgih3 6:fbaee888e5ea 1177 bodyLength++;
ajorgih3 6:fbaee888e5ea 1178 pc.printf("body length: %d\n", bodyLength);
ajorgih3 6:fbaee888e5ea 1179 pc.printf("tail_x: %d, tail_y: %d\n", snake.tail_x, snake.tail_y);
ajorgih3 6:fbaee888e5ea 1180 snake.tail_x = snake.tail_x + 1;
ajorgih3 6:fbaee888e5ea 1181 snake.tail_y = snake.tail_y;
ajorgih3 6:fbaee888e5ea 1182 pc.printf("tail_x: %d, tail_y: %d\n", snake.tail_x, snake.tail_y);
ajorgih3 6:fbaee888e5ea 1183 }
ajorgih3 5:5953ca12205d 1184
ajorgih3 6:fbaee888e5ea 1185 if ((snake.body_y - 1) == snake.tail_y) {
ajorgih3 6:fbaee888e5ea 1186 snake.locations[i].x = snake.body_x;
ajorgih3 6:fbaee888e5ea 1187 snake.locations[i].y = snake.body_y - 1;
ajorgih3 6:fbaee888e5ea 1188 pc.printf("snake.locations[%d].x: %d, snake.locations[%d].y: %d\n", i, snake.locations[i].x, i, snake.locations[i].y);
ajorgih3 6:fbaee888e5ea 1189 bodyLength++;
ajorgih3 6:fbaee888e5ea 1190 pc.printf("body length: %d\n", bodyLength);
ajorgih3 6:fbaee888e5ea 1191 pc.printf("tail_x: %d, tail_y: %d\n", snake.tail_x, snake.tail_y);
ajorgih3 6:fbaee888e5ea 1192 snake.tail_x = snake.tail_x;
ajorgih3 6:fbaee888e5ea 1193 snake.tail_y = snake.tail_y - 1;
ajorgih3 6:fbaee888e5ea 1194 pc.printf("tail_x: %d, tail_y: %d\n", snake.tail_x, snake.tail_y);
ajorgih3 6:fbaee888e5ea 1195 }
ajorgih3 5:5953ca12205d 1196
ajorgih3 6:fbaee888e5ea 1197 if ((snake.body_y + 1) == snake.tail_y) {
ajorgih3 6:fbaee888e5ea 1198 snake.locations[i].x = snake.body_x;
ajorgih3 6:fbaee888e5ea 1199 snake.locations[i].y = snake.body_y + 1;
ajorgih3 6:fbaee888e5ea 1200 pc.printf("snake.locations[%d].x: %d, snake.locations[%d].y: %d\n", i, snake.locations[i].x, i, snake.locations[i].y);
ajorgih3 6:fbaee888e5ea 1201 bodyLength++;
ajorgih3 6:fbaee888e5ea 1202 pc.printf("body length: %d\n", bodyLength);
ajorgih3 6:fbaee888e5ea 1203 pc.printf("tail_x: %d, tail_y: %d\n", snake.tail_x, snake.tail_y);
ajorgih3 6:fbaee888e5ea 1204 snake.tail_x = snake.tail_x;
ajorgih3 6:fbaee888e5ea 1205 snake.tail_y = snake.tail_y + 1;
ajorgih3 6:fbaee888e5ea 1206 pc.printf("tail_x: %d, tail_y: %d\n", snake.tail_x, snake.tail_y);
ajorgih3 6:fbaee888e5ea 1207 }
ajorgih3 5:5953ca12205d 1208
ajorgih3 6:fbaee888e5ea 1209 break;
ajorgih3 6:fbaee888e5ea 1210 }
ajorgih3 6:fbaee888e5ea 1211 pc.printf("i: %d\n", i);
ajorgih3 5:5953ca12205d 1212 }
ajorgih3 6:fbaee888e5ea 1213 }
ajorgih3 7:7ab2f4b09196 1214 }
ajorgih3 7:7ab2f4b09196 1215
ajorgih3 4:697e1120f821 1216
ajorgih3 6:fbaee888e5ea 1217 if (nextHead->type == SNOWFLAKE) {
ajorgih3 7:7ab2f4b09196 1218 slowflakeCounter = 20;
ajorgih3 4:697e1120f821 1219 map_erase(snake.head_x, snake.head_y);
ajorgih3 7:7ab2f4b09196 1220 add_nothing(snake.head_x - 1, snake.head_y);
ajorgih3 6:fbaee888e5ea 1221 }
ajorgih3 4:697e1120f821 1222
ajorgih3 7:7ab2f4b09196 1223 if (nextHead->type == SWORD && shieldCounter == 0) {
ajorgih3 4:697e1120f821 1224 if (lives == 0) {
ajorgih3 6:fbaee888e5ea 1225 draw_game(GAME_OVER);
ajorgih3 4:697e1120f821 1226 }
ajorgih3 4:697e1120f821 1227 else {
ajorgih3 7:7ab2f4b09196 1228 if (shieldCounter == 0) {
ajorgih3 7:7ab2f4b09196 1229 lives--;
ajorgih3 7:7ab2f4b09196 1230 }
ajorgih3 4:697e1120f821 1231 }
ajorgih3 4:697e1120f821 1232 map_erase(snake.head_x, snake.head_y);
ajorgih3 6:fbaee888e5ea 1233 add_nothing(snake.head_x-1, snake.head_y);
ajorgih3 6:fbaee888e5ea 1234 }
ajorgih3 6:fbaee888e5ea 1235
ajorgih3 6:fbaee888e5ea 1236 if (nextHead->type == REVERSE) {
ajorgih3 6:fbaee888e5ea 1237 reverseCounter = 20;
ajorgih3 4:697e1120f821 1238 map_erase(snake.head_x, snake.head_y);
ajorgih3 6:fbaee888e5ea 1239 add_nothing(snake.head_x - 1, snake.head_y);
ajorgih3 6:fbaee888e5ea 1240 }
ajorgih3 6:fbaee888e5ea 1241
ajorgih3 6:fbaee888e5ea 1242 if (nextHead->type == LIGHTSPEED) {
ajorgih3 6:fbaee888e5ea 1243 speedCounter = 50;
ajorgih3 4:697e1120f821 1244 map_erase(snake.head_x, snake.head_y);
ajorgih3 6:fbaee888e5ea 1245 add_nothing(snake.head_x - 1, snake.head_y);
ajorgih3 6:fbaee888e5ea 1246 }
ajorgih3 6:fbaee888e5ea 1247
ajorgih3 6:fbaee888e5ea 1248 if (nextHead->type == SHIELD) {
ajorgih3 6:fbaee888e5ea 1249 shieldCounter = 15;
ajorgih3 6:fbaee888e5ea 1250 map_erase(snake.head_x, snake.head_y);
ajorgih3 6:fbaee888e5ea 1251 add_nothing(snake.head_x - 1, snake.head_y);
ajorgih3 6:fbaee888e5ea 1252 }
ajorgih3 6:fbaee888e5ea 1253
ajorgih3 7:7ab2f4b09196 1254 if (nextHead->type == REDPOTION) {
ajorgih3 7:7ab2f4b09196 1255 redCounter = 20;
ajorgih3 7:7ab2f4b09196 1256 map_erase(snake.head_x, snake.head_y);
ajorgih3 7:7ab2f4b09196 1257 add_nothing(snake.head_x - 1, snake.head_y);
ajorgih3 7:7ab2f4b09196 1258 }
ajorgih3 7:7ab2f4b09196 1259
ajorgih3 7:7ab2f4b09196 1260 if (nextHead->type == BLUEPOTION) {
ajorgih3 7:7ab2f4b09196 1261 blueCounter = 20;
ajorgih3 7:7ab2f4b09196 1262 map_erase(snake.head_x, snake.head_y);
ajorgih3 7:7ab2f4b09196 1263 add_nothing(snake.head_x - 1, snake.head_y);
ajorgih3 7:7ab2f4b09196 1264 }
ajorgih3 6:fbaee888e5ea 1265 break;
ajorgih3 3:bb6f73642f01 1266
ajorgih3 3:bb6f73642f01 1267
ajorgih3 6:fbaee888e5ea 1268 case GO_UP:
ajorgih3 6:fbaee888e5ea 1269 nextHead = get_north(snake.head_x, snake.head_y);
ajorgih3 6:fbaee888e5ea 1270 pc.printf("GO UP\n");
ajorgih3 7:7ab2f4b09196 1271 if (nextHead->walkable && nextHead->type != LIFE && nextHead->type != GOODIE && nextHead->type != SWORD && nextHead->type != REVERSE && nextHead->type != LIGHTSPEED && nextHead->type != SHIELD && nextHead->type != SNOWFLAKE && nextHead->type != BLUEPOTION && nextHead->type != REDPOTION) {
ajorgih3 6:fbaee888e5ea 1272 pc.printf("Before:\n");
ajorgih3 6:fbaee888e5ea 1273 pc.printf("head_x: %d, head_y: %d\n", snake.head_x, snake.head_y);
ajorgih3 6:fbaee888e5ea 1274 pc.printf("body_x: %d, body_y: %d\n", snake.body_x, snake.body_y);
ajorgih3 6:fbaee888e5ea 1275 pc.printf("tail_x: %d, tail_y: %d\n", snake.tail_x, snake.tail_y);
ajorgih3 7:7ab2f4b09196 1276 pc.printf("reverseCounter: %d\n\n", reverseCounter);
ajorgih3 7:7ab2f4b09196 1277 pc.printf("speedCounter: %d\n\n", speedCounter);
ajorgih3 7:7ab2f4b09196 1278 pc.printf("shieldCounter: %d\n\n", shieldCounter);
ajorgih3 7:7ab2f4b09196 1279 pc.printf("slowflakeCounter: %d", slowflakeCounter);
ajorgih3 7:7ab2f4b09196 1280 pc.printf("blueCounter: %d", blueCounter);
ajorgih3 7:7ab2f4b09196 1281 pc.printf("redCounter: %d", redCounter);
ajorgih3 6:fbaee888e5ea 1282 // reverse direction
ajorgih3 6:fbaee888e5ea 1283 if (reverseCounter == 0) {
ajorgih3 6:fbaee888e5ea 1284 go_up2();
ajorgih3 6:fbaee888e5ea 1285 }
ajorgih3 6:fbaee888e5ea 1286 if (reverseCounter <= 20 && reverseCounter != 0) {
ajorgih3 6:fbaee888e5ea 1287 go_down2();
ajorgih3 7:7ab2f4b09196 1288 pc.printf("reverseCounter: %d", reverseCounter);
ajorgih3 7:7ab2f4b09196 1289 reverseCounter--;
ajorgih3 6:fbaee888e5ea 1290 }
ajorgih3 5:5953ca12205d 1291 //draw_snake_head(snake.head_pi, snake.head_pj);
ajorgih3 5:5953ca12205d 1292 //draw_snake_body(snake.body_pi, snake.body_pj);
ajorgih3 5:5953ca12205d 1293 //draw_snake_tail(snake.tail_pi, snake.tail_pj);
ajorgih3 6:fbaee888e5ea 1294 updateY();
ajorgih3 6:fbaee888e5ea 1295 pc.printf("After:\n");
ajorgih3 6:fbaee888e5ea 1296 pc.printf("head_x: %d, head_y: %d\n", snake.head_x, snake.head_y);
ajorgih3 6:fbaee888e5ea 1297 pc.printf("body_x: %d, body_y: %d\n", snake.body_x, snake.body_y);
ajorgih3 6:fbaee888e5ea 1298 pc.printf("tail_x: %d, tail_y: %d\n", snake.tail_x, snake.tail_y);
ajorgih3 6:fbaee888e5ea 1299 if (shieldCounter <= 15 && shieldCounter != 0) {
ajorgih3 6:fbaee888e5ea 1300 shieldCounter--;
ajorgih3 6:fbaee888e5ea 1301 }
ajorgih3 7:7ab2f4b09196 1302 if (blueCounter <= 20 && blueCounter != 0) {
ajorgih3 7:7ab2f4b09196 1303 blueCounter--;
ajorgih3 7:7ab2f4b09196 1304 }
ajorgih3 7:7ab2f4b09196 1305 if (redCounter <= 20 && redCounter != 0) {
ajorgih3 7:7ab2f4b09196 1306 redCounter--;
ajorgih3 7:7ab2f4b09196 1307 }
ajorgih3 6:fbaee888e5ea 1308 }
ajorgih3 3:bb6f73642f01 1309
ajorgih3 6:fbaee888e5ea 1310 if (!nextHead->walkable && invincibility == false) {
ajorgih3 6:fbaee888e5ea 1311 if (shieldCounter == 0) {
ajorgih3 4:697e1120f821 1312 if (lives == 0) {
ajorgih3 6:fbaee888e5ea 1313 draw_game(GAME_OVER);
ajorgih3 4:697e1120f821 1314 }
ajorgih3 4:697e1120f821 1315 else {
ajorgih3 6:fbaee888e5ea 1316 lives--;
ajorgih3 6:fbaee888e5ea 1317 }
ajorgih3 4:697e1120f821 1318 }
ajorgih3 6:fbaee888e5ea 1319 }
ajorgih3 6:fbaee888e5ea 1320
ajorgih3 6:fbaee888e5ea 1321 if (nextHead->type == LIFE) {
ajorgih3 4:697e1120f821 1322 lives++;
ajorgih3 4:697e1120f821 1323 map_erase(snake.head_x, snake.head_y);
ajorgih3 6:fbaee888e5ea 1324 add_nothing(snake.head_x, snake.head_y - 1);
ajorgih3 6:fbaee888e5ea 1325 }
ajorgih3 4:697e1120f821 1326
ajorgih3 6:fbaee888e5ea 1327 if (nextHead->type == GOODIE) {
ajorgih3 7:7ab2f4b09196 1328
ajorgih3 7:7ab2f4b09196 1329 if (redCounter == 0) {
ajorgih3 4:697e1120f821 1330 score++;
ajorgih3 7:7ab2f4b09196 1331 }
ajorgih3 7:7ab2f4b09196 1332
ajorgih3 4:697e1120f821 1333 map_erase(snake.head_x, snake.head_y);
ajorgih3 5:5953ca12205d 1334 add_nothing(snake.head_x, snake.head_y - 1); // eat the goodie
ajorgih3 5:5953ca12205d 1335
ajorgih3 7:7ab2f4b09196 1336 if (blueCounter == 0) {
ajorgih3 5:5953ca12205d 1337 if ((snake.body_x - 1) == snake.tail_x) {
ajorgih3 6:fbaee888e5ea 1338 add_snake_body(snake.body_x - 1, snake.body_y);
ajorgih3 6:fbaee888e5ea 1339 add_snake_tail(snake.tail_x - 1, snake.tail_y);
ajorgih3 5:5953ca12205d 1340 }
ajorgih3 5:5953ca12205d 1341
ajorgih3 5:5953ca12205d 1342 if ((snake.body_x + 1) == snake.tail_x) {
ajorgih3 6:fbaee888e5ea 1343 add_snake_body(snake.body_x + 1, snake.body_y);
ajorgih3 6:fbaee888e5ea 1344 add_snake_tail(snake.tail_x + 1, snake.tail_y);
ajorgih3 5:5953ca12205d 1345 }
ajorgih3 5:5953ca12205d 1346
ajorgih3 5:5953ca12205d 1347 if ((snake.body_y + 1) == snake.tail_y) {
ajorgih3 6:fbaee888e5ea 1348 add_snake_body(snake.body_x, snake.body_y + 1);
ajorgih3 6:fbaee888e5ea 1349 add_snake_tail(snake.tail_x, snake.tail_y + 1);
ajorgih3 5:5953ca12205d 1350 }
ajorgih3 5:5953ca12205d 1351
ajorgih3 7:7ab2f4b09196 1352
ajorgih3 5:5953ca12205d 1353 // this places a new body coordinate before the main body, this is go right function
ajorgih3 5:5953ca12205d 1354 for (int i = 0; i < SNAKE_MAX_LENGTH; i++) {
ajorgih3 6:fbaee888e5ea 1355 if (snake.locations[i].x == 0 && snake.locations[i].y == 0) {
ajorgih3 5:5953ca12205d 1356
ajorgih3 5:5953ca12205d 1357 // if snake is upright
ajorgih3 6:fbaee888e5ea 1358 if ((snake.body_y + 1) == snake.tail_y) {
ajorgih3 6:fbaee888e5ea 1359 snake.locations[i].x = snake.body_x;
ajorgih3 6:fbaee888e5ea 1360 snake.locations[i].y = snake.body_y + 1; // this stores the snake new body location into a non-filled array
ajorgih3 5:5953ca12205d 1361
ajorgih3 6:fbaee888e5ea 1362 pc.printf("snake.locations[%d].x: %d, snake.locations[%d].y: %d\n", i, snake.locations[i].x, i, snake.locations[i].y);
ajorgih3 6:fbaee888e5ea 1363 pc.printf("tail_x: %d, tail_y: %d\n", snake.tail_x, snake.tail_y);
ajorgih3 5:5953ca12205d 1364
ajorgih3 6:fbaee888e5ea 1365 snake.tail_x = snake.tail_x;
ajorgih3 6:fbaee888e5ea 1366 snake.tail_y = snake.tail_y + 1; // this updates the new tail location
ajorgih3 6:fbaee888e5ea 1367 }
ajorgih3 5:5953ca12205d 1368
ajorgih3 6:fbaee888e5ea 1369 if ((snake.body_x + 1) == snake.tail_x) {
ajorgih3 6:fbaee888e5ea 1370 snake.locations[i].x = snake.body_x + 1;
ajorgih3 6:fbaee888e5ea 1371 snake.locations[i].y = snake.body_y; // this stores the snake new body location into a non-filled array
ajorgih3 5:5953ca12205d 1372
ajorgih3 6:fbaee888e5ea 1373 pc.printf("snake.locations[%d].x: %d, snake.locations[%d].y: %d\n", i, snake.locations[i].x, i, snake.locations[i].y);
ajorgih3 6:fbaee888e5ea 1374 pc.printf("tail_x: %d, tail_y: %d\n", snake.tail_x, snake.tail_y);
ajorgih3 5:5953ca12205d 1375
ajorgih3 6:fbaee888e5ea 1376 snake.tail_x = snake.tail_x + 1;
ajorgih3 6:fbaee888e5ea 1377 snake.tail_y = snake.tail_y; // this updates the new tail location
ajorgih3 6:fbaee888e5ea 1378 }
ajorgih3 5:5953ca12205d 1379
ajorgih3 6:fbaee888e5ea 1380 if ((snake.body_x - 1) == snake.tail_x) {
ajorgih3 6:fbaee888e5ea 1381 snake.locations[i].x = snake.body_x - 1;
ajorgih3 6:fbaee888e5ea 1382 snake.locations[i].y = snake.body_y; // this stores the snake new body location into a non-filled array
ajorgih3 5:5953ca12205d 1383
ajorgih3 6:fbaee888e5ea 1384 pc.printf("snake.locations[%d].x: %d, snake.locations[%d].y: %d\n", i, snake.locations[i].x, i, snake.locations[i].y);
ajorgih3 6:fbaee888e5ea 1385 pc.printf("tail_x: %d, tail_y: %d\n", snake.tail_x, snake.tail_y);
ajorgih3 5:5953ca12205d 1386
ajorgih3 6:fbaee888e5ea 1387 snake.tail_x = snake.tail_x - 1;
ajorgih3 6:fbaee888e5ea 1388 snake.tail_y = snake.tail_y; // this updates the new tail location
ajorgih3 6:fbaee888e5ea 1389 }
ajorgih3 5:5953ca12205d 1390
ajorgih3 5:5953ca12205d 1391
ajorgih3 6:fbaee888e5ea 1392 pc.printf("tail_x: %d, tail_y: %d\n", snake.tail_x, snake.tail_y);
ajorgih3 5:5953ca12205d 1393
ajorgih3 6:fbaee888e5ea 1394 bodyLength++;
ajorgih3 5:5953ca12205d 1395
ajorgih3 6:fbaee888e5ea 1396 pc.printf("body length: %d\n", bodyLength);
ajorgih3 6:fbaee888e5ea 1397 break;
ajorgih3 6:fbaee888e5ea 1398 }
ajorgih3 6:fbaee888e5ea 1399 pc.printf("i: %d\n", i);
ajorgih3 5:5953ca12205d 1400 }
ajorgih3 6:fbaee888e5ea 1401 }
ajorgih3 7:7ab2f4b09196 1402 }
ajorgih3 4:697e1120f821 1403
ajorgih3 6:fbaee888e5ea 1404 if (nextHead->type == SNOWFLAKE) {
ajorgih3 7:7ab2f4b09196 1405 slowflakeCounter = 20;
ajorgih3 4:697e1120f821 1406 map_erase(snake.head_x, snake.head_y);
ajorgih3 7:7ab2f4b09196 1407 add_nothing(snake.head_x - 1, snake.head_y);
ajorgih3 6:fbaee888e5ea 1408 }
ajorgih3 4:697e1120f821 1409
ajorgih3 7:7ab2f4b09196 1410 if (nextHead->type == SWORD && shieldCounter == 0) {
ajorgih3 4:697e1120f821 1411 if (lives == 0) {
ajorgih3 6:fbaee888e5ea 1412 draw_game(GAME_OVER);
ajorgih3 4:697e1120f821 1413 }
ajorgih3 4:697e1120f821 1414 else {
ajorgih3 7:7ab2f4b09196 1415 if (shieldCounter == 0) {
ajorgih3 7:7ab2f4b09196 1416 lives--;
ajorgih3 7:7ab2f4b09196 1417 }
ajorgih3 4:697e1120f821 1418 }
ajorgih3 4:697e1120f821 1419 map_erase(snake.head_x, snake.head_y);
ajorgih3 4:697e1120f821 1420 add_nothing(snake.head_x, snake.head_y);
ajorgih3 6:fbaee888e5ea 1421 }
ajorgih3 4:697e1120f821 1422
ajorgih3 6:fbaee888e5ea 1423 if (nextHead->type == REVERSE) {
ajorgih3 6:fbaee888e5ea 1424 reverseCounter = 20;
ajorgih3 6:fbaee888e5ea 1425 map_erase(snake.head_x, snake.head_y);
ajorgih3 6:fbaee888e5ea 1426 add_nothing(snake.head_x, snake.head_y - 1);
ajorgih3 6:fbaee888e5ea 1427 }
ajorgih3 6:fbaee888e5ea 1428
ajorgih3 6:fbaee888e5ea 1429 if (nextHead->type == LIGHTSPEED) {
ajorgih3 6:fbaee888e5ea 1430 speedCounter = 50;
ajorgih3 4:697e1120f821 1431 map_erase(snake.head_x, snake.head_y);
ajorgih3 6:fbaee888e5ea 1432 add_nothing(snake.head_x, snake.head_y - 1);
ajorgih3 6:fbaee888e5ea 1433 }
ajorgih3 6:fbaee888e5ea 1434
ajorgih3 7:7ab2f4b09196 1435 if (nextHead->type == SHIELD) {
ajorgih3 6:fbaee888e5ea 1436 shieldCounter = 15;
ajorgih3 4:697e1120f821 1437 map_erase(snake.head_x, snake.head_y);
ajorgih3 6:fbaee888e5ea 1438 add_nothing(snake.head_x, snake.head_y - 1);
ajorgih3 6:fbaee888e5ea 1439 }
ajorgih3 7:7ab2f4b09196 1440
ajorgih3 7:7ab2f4b09196 1441 if (nextHead->type == BLUEPOTION) {
ajorgih3 7:7ab2f4b09196 1442 blueCounter = 20;
ajorgih3 7:7ab2f4b09196 1443 map_erase(snake.head_x, snake.head_y);
ajorgih3 7:7ab2f4b09196 1444 add_nothing(snake.head_x, snake.head_y - 1);
ajorgih3 7:7ab2f4b09196 1445 }
ajorgih3 7:7ab2f4b09196 1446 if (nextHead->type == REDPOTION) {
ajorgih3 7:7ab2f4b09196 1447 redCounter = 20;
ajorgih3 7:7ab2f4b09196 1448 map_erase(snake.head_x, snake.head_y);
ajorgih3 7:7ab2f4b09196 1449 add_nothing(snake.head_x, snake.head_y - 1);
ajorgih3 7:7ab2f4b09196 1450 }
ajorgih3 6:fbaee888e5ea 1451 break;
ajorgih3 3:bb6f73642f01 1452
ajorgih3 3:bb6f73642f01 1453
ajorgih3 6:fbaee888e5ea 1454 case GO_DOWN:
ajorgih3 6:fbaee888e5ea 1455 nextHead = get_south(snake.head_x, snake.head_y);
ajorgih3 6:fbaee888e5ea 1456 pc.printf("GO DOWN\n");
ajorgih3 7:7ab2f4b09196 1457 if (nextHead->walkable && nextHead->type != LIFE && nextHead->type != GOODIE && nextHead->type != SWORD && nextHead->type != REVERSE && nextHead->type != LIGHTSPEED && nextHead->type != SHIELD && nextHead->type != SNOWFLAKE && nextHead->type != BLUEPOTION && nextHead->type != REDPOTION) {
ajorgih3 5:5953ca12205d 1458 pc.printf("Before:\n");
ajorgih3 6:fbaee888e5ea 1459 pc.printf("head_x: %d, head_y: %d\n", snake.head_x, snake.head_y);
ajorgih3 6:fbaee888e5ea 1460 pc.printf("body_x: %d, body_y: %d\n", snake.body_x, snake.body_y);
ajorgih3 6:fbaee888e5ea 1461 pc.printf("tail_x: %d, tail_y: %d\n", snake.tail_x, snake.tail_y);
ajorgih3 7:7ab2f4b09196 1462 pc.printf("reverseCounter: %d\n\n", reverseCounter);
ajorgih3 7:7ab2f4b09196 1463 pc.printf("speedCounter: %d\n\n", speedCounter);
ajorgih3 7:7ab2f4b09196 1464 pc.printf("shieldCounter: %d\n\n", shieldCounter);
ajorgih3 7:7ab2f4b09196 1465 pc.printf("slowflakeCounter: %d", slowflakeCounter);
ajorgih3 7:7ab2f4b09196 1466 pc.printf("blueCounter: %d", blueCounter);
ajorgih3 7:7ab2f4b09196 1467 pc.printf("redCounter: %d", redCounter);
ajorgih3 6:fbaee888e5ea 1468 if (reverseCounter == 0) {
ajorgih3 5:5953ca12205d 1469 go_down2();
ajorgih3 6:fbaee888e5ea 1470 }
ajorgih3 6:fbaee888e5ea 1471 if (reverseCounter <= 20 && reverseCounter !=0) {
ajorgih3 6:fbaee888e5ea 1472 go_up2();
ajorgih3 7:7ab2f4b09196 1473 pc.printf("reverseCounter: %d", reverseCounter);
ajorgih3 7:7ab2f4b09196 1474 reverseCounter--;
ajorgih3 6:fbaee888e5ea 1475 }
ajorgih3 5:5953ca12205d 1476 //draw_snake_head(snake.head_pi, snake.head_pj);
ajorgih3 5:5953ca12205d 1477 //draw_snake_body(snake.body_pi, snake.body_pj);
ajorgih3 5:5953ca12205d 1478 //draw_snake_tail(snake.tail_pi, snake.tail_pj);
ajorgih3 6:fbaee888e5ea 1479 updateY();
ajorgih3 5:5953ca12205d 1480 pc.printf("After:\n");
ajorgih3 6:fbaee888e5ea 1481 pc.printf("head_x: %d, head_y: %d\n", snake.head_x, snake.head_y);
ajorgih3 6:fbaee888e5ea 1482 pc.printf("body_x: %d, body_y: %d\n", snake.body_x, snake.body_y);
ajorgih3 6:fbaee888e5ea 1483 pc.printf("tail_x: %d, tail_y: %d\n", snake.tail_x, snake.tail_y);
ajorgih3 6:fbaee888e5ea 1484 if (shieldCounter <= 15 && shieldCounter != 0) {
ajorgih3 6:fbaee888e5ea 1485 shieldCounter--;
ajorgih3 6:fbaee888e5ea 1486 }
ajorgih3 7:7ab2f4b09196 1487 if (blueCounter <= 20 && blueCounter != 0) {
ajorgih3 7:7ab2f4b09196 1488 blueCounter--;
ajorgih3 7:7ab2f4b09196 1489 }
ajorgih3 7:7ab2f4b09196 1490 if (redCounter <= 20 && redCounter != 0) {
ajorgih3 7:7ab2f4b09196 1491 redCounter--;
ajorgih3 7:7ab2f4b09196 1492 }
ajorgih3 6:fbaee888e5ea 1493 }
ajorgih3 6:fbaee888e5ea 1494
ajorgih3 6:fbaee888e5ea 1495 if (!nextHead->walkable && invincibility == false) {
ajorgih3 6:fbaee888e5ea 1496 if (shieldCounter == 0) {
ajorgih3 4:697e1120f821 1497 if (lives == 0) {
ajorgih3 6:fbaee888e5ea 1498 draw_game(GAME_OVER);
ajorgih3 4:697e1120f821 1499 }
ajorgih3 4:697e1120f821 1500 else {
ajorgih3 6:fbaee888e5ea 1501 lives--;
ajorgih3 6:fbaee888e5ea 1502 }
ajorgih3 4:697e1120f821 1503 }
ajorgih3 6:fbaee888e5ea 1504 }
ajorgih3 6:fbaee888e5ea 1505
ajorgih3 6:fbaee888e5ea 1506 if (nextHead->type == LIFE) {
ajorgih3 4:697e1120f821 1507 lives++;
ajorgih3 4:697e1120f821 1508 map_erase(snake.head_x, snake.head_y);
ajorgih3 6:fbaee888e5ea 1509 add_nothing(snake.head_x, snake.head_y+1);
ajorgih3 6:fbaee888e5ea 1510 }
ajorgih3 4:697e1120f821 1511
ajorgih3 6:fbaee888e5ea 1512 if (nextHead->type == GOODIE) {
ajorgih3 7:7ab2f4b09196 1513
ajorgih3 7:7ab2f4b09196 1514 if (redCounter == 0) {
ajorgih3 4:697e1120f821 1515 score++;
ajorgih3 7:7ab2f4b09196 1516 }
ajorgih3 7:7ab2f4b09196 1517
ajorgih3 4:697e1120f821 1518 map_erase(snake.head_x, snake.head_y);
ajorgih3 5:5953ca12205d 1519 add_nothing(snake.head_x, snake.head_y + 1); // eat the goodie
ajorgih3 5:5953ca12205d 1520
ajorgih3 7:7ab2f4b09196 1521 if (blueCounter == 0) {
ajorgih3 5:5953ca12205d 1522 // if the tail is to the left of the body
ajorgih3 5:5953ca12205d 1523 if ((snake.body_x - 1) == snake.tail_x) {
ajorgih3 6:fbaee888e5ea 1524 add_snake_body(snake.body_x - 1, snake.body_y);
ajorgih3 6:fbaee888e5ea 1525 add_snake_tail(snake.tail_x - 1, snake.tail_y);
ajorgih3 5:5953ca12205d 1526 }
ajorgih3 5:5953ca12205d 1527
ajorgih3 5:5953ca12205d 1528 // if the tail is to the right of the body
ajorgih3 5:5953ca12205d 1529 if ((snake.body_x + 1) == snake.tail_x) {
ajorgih3 6:fbaee888e5ea 1530 add_snake_body(snake.body_x + 1, snake.body_y);
ajorgih3 6:fbaee888e5ea 1531 add_snake_tail(snake.tail_x + 1, snake.tail_y);
ajorgih3 5:5953ca12205d 1532 }
ajorgih3 5:5953ca12205d 1533
ajorgih3 5:5953ca12205d 1534 // if the snake is upright
ajorgih3 5:5953ca12205d 1535 if ((snake.body_y - 1) == snake.tail_y) {
ajorgih3 6:fbaee888e5ea 1536 add_snake_body(snake.body_x, snake.body_y + 1);
ajorgih3 6:fbaee888e5ea 1537 add_snake_tail(snake.tail_x, snake.tail_y + 1);
ajorgih3 5:5953ca12205d 1538 }
ajorgih3 5:5953ca12205d 1539
ajorgih3 5:5953ca12205d 1540 // this places a new body coordinate before the main body, this is go right function
ajorgih3 5:5953ca12205d 1541 for (int i = 0; i < SNAKE_MAX_LENGTH; i++) {
ajorgih3 6:fbaee888e5ea 1542 if (snake.locations[i].x == 0 && snake.locations[i].y == 0) {
ajorgih3 5:5953ca12205d 1543
ajorgih3 5:5953ca12205d 1544 // if snake is upright
ajorgih3 6:fbaee888e5ea 1545 if ((snake.body_y - 1) == snake.tail_y) {
ajorgih3 6:fbaee888e5ea 1546 snake.locations[i].x = snake.body_x;
ajorgih3 6:fbaee888e5ea 1547 snake.locations[i].y = snake.body_y - 1; // this stores the snake new body location into a non-filled array
ajorgih3 5:5953ca12205d 1548
ajorgih3 6:fbaee888e5ea 1549 pc.printf("snake.locations[%d].x: %d, snake.locations[%d].y: %d\n", i, snake.locations[i].x, i, snake.locations[i].y);
ajorgih3 6:fbaee888e5ea 1550 pc.printf("tail_x: %d, tail_y: %d\n", snake.tail_x, snake.tail_y);
ajorgih3 5:5953ca12205d 1551
ajorgih3 6:fbaee888e5ea 1552 snake.tail_x = snake.tail_x;
ajorgih3 6:fbaee888e5ea 1553 snake.tail_y = snake.tail_y - 1; // this updates the new tail location
ajorgih3 6:fbaee888e5ea 1554 }
ajorgih3 5:5953ca12205d 1555
ajorgih3 6:fbaee888e5ea 1556 if ((snake.body_x + 1) == snake.tail_x) {
ajorgih3 6:fbaee888e5ea 1557 snake.locations[i].x = snake.body_x + 1;
ajorgih3 6:fbaee888e5ea 1558 snake.locations[i].y = snake.body_y; // this stores the snake new body location into a non-filled array
ajorgih3 5:5953ca12205d 1559
ajorgih3 6:fbaee888e5ea 1560 pc.printf("snake.locations[%d].x: %d, snake.locations[%d].y: %d\n", i, snake.locations[i].x, i, snake.locations[i].y);
ajorgih3 6:fbaee888e5ea 1561 pc.printf("tail_x: %d, tail_y: %d\n", snake.tail_x, snake.tail_y);
ajorgih3 5:5953ca12205d 1562
ajorgih3 6:fbaee888e5ea 1563 snake.tail_x = snake.tail_x + 1;
ajorgih3 6:fbaee888e5ea 1564 snake.tail_y = snake.tail_y; // this updates the new tail location
ajorgih3 6:fbaee888e5ea 1565 }
ajorgih3 5:5953ca12205d 1566
ajorgih3 6:fbaee888e5ea 1567 if ((snake.body_x - 1) == snake.tail_x) {
ajorgih3 6:fbaee888e5ea 1568 snake.locations[i].x = snake.body_x - 1;
ajorgih3 6:fbaee888e5ea 1569 snake.locations[i].y = snake.body_y; // this stores the snake new body location into a non-filled array
ajorgih3 5:5953ca12205d 1570
ajorgih3 6:fbaee888e5ea 1571 pc.printf("snake.locations[%d].x: %d, snake.locations[%d].y: %d\n", i, snake.locations[i].x, i, snake.locations[i].y);
ajorgih3 6:fbaee888e5ea 1572 pc.printf("tail_x: %d, tail_y: %d\n", snake.tail_x, snake.tail_y);
ajorgih3 5:5953ca12205d 1573
ajorgih3 6:fbaee888e5ea 1574 snake.tail_x = snake.tail_x - 1;
ajorgih3 6:fbaee888e5ea 1575 snake.tail_y = snake.tail_y; // this updates the new tail location
ajorgih3 6:fbaee888e5ea 1576 }
ajorgih3 5:5953ca12205d 1577
ajorgih3 5:5953ca12205d 1578
ajorgih3 6:fbaee888e5ea 1579 pc.printf("tail_x: %d, tail_y: %d\n", snake.tail_x, snake.tail_y);
ajorgih3 5:5953ca12205d 1580
ajorgih3 6:fbaee888e5ea 1581 bodyLength++;
ajorgih3 5:5953ca12205d 1582
ajorgih3 6:fbaee888e5ea 1583 pc.printf("body length: %d\n", bodyLength);
ajorgih3 6:fbaee888e5ea 1584 break;
ajorgih3 6:fbaee888e5ea 1585 }
ajorgih3 6:fbaee888e5ea 1586 pc.printf("i: %d\n", i);
ajorgih3 5:5953ca12205d 1587 }
ajorgih3 7:7ab2f4b09196 1588 }
ajorgih3 7:7ab2f4b09196 1589 }
ajorgih3 4:697e1120f821 1590
ajorgih3 6:fbaee888e5ea 1591 if (nextHead->type == SNOWFLAKE) {
ajorgih3 7:7ab2f4b09196 1592 slowflakeCounter = 20;
ajorgih3 4:697e1120f821 1593 map_erase(snake.head_x, snake.head_y);
ajorgih3 7:7ab2f4b09196 1594 add_nothing(snake.head_x - 1, snake.head_y);
ajorgih3 6:fbaee888e5ea 1595 }
ajorgih3 4:697e1120f821 1596
ajorgih3 7:7ab2f4b09196 1597 if (nextHead->type == SWORD && shieldCounter == 0) {
ajorgih3 4:697e1120f821 1598 if (lives == 0) {
ajorgih3 6:fbaee888e5ea 1599 draw_game(GAME_OVER);
ajorgih3 4:697e1120f821 1600 }
ajorgih3 4:697e1120f821 1601 else {
ajorgih3 7:7ab2f4b09196 1602 if (shieldCounter == 0) {
ajorgih3 7:7ab2f4b09196 1603 lives--;
ajorgih3 7:7ab2f4b09196 1604 }
ajorgih3 4:697e1120f821 1605 }
ajorgih3 4:697e1120f821 1606 map_erase(snake.head_x, snake.head_y);
ajorgih3 6:fbaee888e5ea 1607 add_nothing(snake.head_x, snake.head_y+1);
ajorgih3 6:fbaee888e5ea 1608 }
ajorgih3 6:fbaee888e5ea 1609
ajorgih3 6:fbaee888e5ea 1610 if (nextHead->type == REVERSE) {
ajorgih3 6:fbaee888e5ea 1611 reverseCounter = 20;
ajorgih3 4:697e1120f821 1612 map_erase(snake.head_x, snake.head_y);
ajorgih3 6:fbaee888e5ea 1613 add_nothing(snake.head_x, snake.head_y + 1);
ajorgih3 6:fbaee888e5ea 1614 }
ajorgih3 6:fbaee888e5ea 1615
ajorgih3 6:fbaee888e5ea 1616 if (nextHead->type == LIGHTSPEED) {
ajorgih3 6:fbaee888e5ea 1617 speedCounter = 50;
ajorgih3 4:697e1120f821 1618 map_erase(snake.head_x, snake.head_y);
ajorgih3 6:fbaee888e5ea 1619 add_nothing(snake.head_x, snake.head_y + 1);
ajorgih3 6:fbaee888e5ea 1620 }
ajorgih3 6:fbaee888e5ea 1621
ajorgih3 7:7ab2f4b09196 1622 if (nextHead->type == SHIELD) {
ajorgih3 6:fbaee888e5ea 1623 shieldCounter = 15;
ajorgih3 6:fbaee888e5ea 1624 map_erase(snake.head_x, snake.head_y);
ajorgih3 6:fbaee888e5ea 1625 add_nothing(snake.head_x, snake.head_y + 1);
ajorgih3 6:fbaee888e5ea 1626 }
ajorgih3 6:fbaee888e5ea 1627
ajorgih3 7:7ab2f4b09196 1628 if (nextHead->type == REDPOTION) {
ajorgih3 7:7ab2f4b09196 1629 redCounter = 20;
ajorgih3 7:7ab2f4b09196 1630 map_erase(snake.head_x, snake.head_y);
ajorgih3 7:7ab2f4b09196 1631 add_nothing(snake.head_x, snake.head_y + 1);
ajorgih3 7:7ab2f4b09196 1632 }
ajorgih3 7:7ab2f4b09196 1633
ajorgih3 7:7ab2f4b09196 1634 if (nextHead->type == BLUEPOTION) {
ajorgih3 7:7ab2f4b09196 1635 blueCounter = 20;
ajorgih3 7:7ab2f4b09196 1636 map_erase(snake.head_x, snake.head_y);
ajorgih3 7:7ab2f4b09196 1637 add_nothing(snake.head_x, snake.head_y + 1);
ajorgih3 7:7ab2f4b09196 1638 }
ajorgih3 7:7ab2f4b09196 1639
ajorgih3 6:fbaee888e5ea 1640 break;
ajorgih3 3:bb6f73642f01 1641
ajorgih3 6:fbaee888e5ea 1642 case HAX:
ajorgih3 6:fbaee888e5ea 1643 invincibility = true;
ajorgih3 6:fbaee888e5ea 1644 break;
ajorgih3 3:bb6f73642f01 1645
ajorgih3 6:fbaee888e5ea 1646 default:
ajorgih3 6:fbaee888e5ea 1647 break;
ajorgih3 6:fbaee888e5ea 1648 }
ajorgih3 3:bb6f73642f01 1649
ajorgih3 3:bb6f73642f01 1650
ajorgih3 3:bb6f73642f01 1651
ajorgih3 6:fbaee888e5ea 1652 return NO_RESULT;
ajorgih3 3:bb6f73642f01 1653 }
ajorgih3 3:bb6f73642f01 1654
ajorgih3 3:bb6f73642f01 1655
DCchico 1:10330bce85cb 1656 /**
DCchico 1:10330bce85cb 1657 * Program entry point! This is where it all begins.
DCchico 1:10330bce85cb 1658 * This function or all the parts of the game. Most of your
DCchico 1:10330bce85cb 1659 * implementation should be elsewhere - this holds the game loop, and should
DCchico 1:10330bce85cb 1660 * read like a road map for the rest of the code.
DCchico 1:10330bce85cb 1661 */
DCchico 1:10330bce85cb 1662 int main()
DCchico 1:10330bce85cb 1663 {
DCchico 1:10330bce85cb 1664 // First things first: initialize hardware
ajorgih3 6:fbaee888e5ea 1665 ASSERT_P(hardware_init() == ERROR_NONE, "Hardware init failed!");
ajorgih3 3:bb6f73642f01 1666
ajorgih3 5:5953ca12205d 1667 //start_game();
ajorgih3 5:5953ca12205d 1668 //title_page();
ajorgih3 5:5953ca12205d 1669 //helpful_items();
ajorgih3 5:5953ca12205d 1670 //harmful_items();
ajorgih3 7:7ab2f4b09196 1671 //additional_info();
ajorgih3 3:bb6f73642f01 1672
ajorgih3 3:bb6f73642f01 1673 // loading screen
ajorgih3 3:bb6f73642f01 1674 //uLCD.filled_rectangle(0, 0, 255, 255, BLACK);
ajorgih3 3:bb6f73642f01 1675 //uLCD.textbackground_color(BLACK);
ajorgih3 3:bb6f73642f01 1676 //uLCD.color(0xFFFFFF);
ajorgih3 3:bb6f73642f01 1677 //uLCD.locate(4,7);
ajorgih3 3:bb6f73642f01 1678 //uLCD.printf("GOOD LUCK!");
ajorgih3 3:bb6f73642f01 1679 //uLCD.locate(4,8);
ajorgih3 3:bb6f73642f01 1680 //uLCD.printf("Loading...");
ajorgih3 3:bb6f73642f01 1681 //wait(4);
ajorgih3 3:bb6f73642f01 1682 //uLCD.filled_rectangle(0, 0, 255, 255, BLACK);
ajorgih3 3:bb6f73642f01 1683
ajorgih3 6:fbaee888e5ea 1684 snake_init(&snake);
DCchico 2:4947d6a82971 1685 // 0. Initialize the maps -- implement this function:
ajorgih3 6:fbaee888e5ea 1686 maps_init();
ajorgih3 5:5953ca12205d 1687
ajorgih3 5:5953ca12205d 1688
ajorgih3 5:5953ca12205d 1689
ajorgih3 6:fbaee888e5ea 1690 init_main_map();
ajorgih3 5:5953ca12205d 1691 //init_map_2();
ajorgih3 5:5953ca12205d 1692
DCchico 1:10330bce85cb 1693
DCchico 1:10330bce85cb 1694 // Initialize game state
ajorgih3 6:fbaee888e5ea 1695 set_active_map(0);
ajorgih3 6:fbaee888e5ea 1696 snake.head_x = snake.head_y = 5;
ajorgih3 6:fbaee888e5ea 1697 snake.body_x = 4;
ajorgih3 6:fbaee888e5ea 1698 snake.body_y = 5;
ajorgih3 6:fbaee888e5ea 1699 snake.tail_x = 3;
ajorgih3 6:fbaee888e5ea 1700 snake.tail_y = 5;
DCchico 1:10330bce85cb 1701 // Initial drawing
ajorgih3 6:fbaee888e5ea 1702 draw_game(FULL_DRAW);
DCchico 1:10330bce85cb 1703 // Main game loop
ajorgih3 6:fbaee888e5ea 1704 while(1) {
DCchico 1:10330bce85cb 1705 // Timer to measure game update speed
ajorgih3 6:fbaee888e5ea 1706 Timer t;
ajorgih3 6:fbaee888e5ea 1707 t.start();
ajorgih3 6:fbaee888e5ea 1708
DCchico 2:4947d6a82971 1709 // 1. Read inputs -- implement this function:
ajorgih3 6:fbaee888e5ea 1710 GameInputs inputs = read_inputs();
DCchico 2:4947d6a82971 1711
DCchico 2:4947d6a82971 1712 // 2. Determine action (move, act, menu, etc.) -- implement this function:
ajorgih3 6:fbaee888e5ea 1713 int action = get_action(inputs);
DCchico 2:4947d6a82971 1714
DCchico 2:4947d6a82971 1715 // 3. Update game -- implement this function:
ajorgih3 6:fbaee888e5ea 1716 int result = update_game(action);
DCchico 2:4947d6a82971 1717
DCchico 2:4947d6a82971 1718 // 3b. Check for game over based on result
DCchico 2:4947d6a82971 1719 // and if so, handle game over -- implement this.
DCchico 2:4947d6a82971 1720
DCchico 2:4947d6a82971 1721 // 4. Draw screen -- provided:
ajorgih3 6:fbaee888e5ea 1722 draw_game(result);
DCchico 2:4947d6a82971 1723
DCchico 1:10330bce85cb 1724 // Compute update time
ajorgih3 6:fbaee888e5ea 1725 t.stop();
ajorgih3 6:fbaee888e5ea 1726 int dt = t.read_ms();
ajorgih3 6:fbaee888e5ea 1727
DCchico 1:10330bce85cb 1728 // Display and wait
DCchico 1:10330bce85cb 1729 // NOTE: Text is 8 pixels tall
ajorgih3 6:fbaee888e5ea 1730 if (dt < 100) wait_ms(100 - dt);
ajorgih3 6:fbaee888e5ea 1731 }
DCchico 1:10330bce85cb 1732 }
DCchico 1:10330bce85cb 1733
ajorgih3 3:bb6f73642f01 1734 int main2() {
ajorgih3 7:7ab2f4b09196 1735 // First things first: initialize hardware
ajorgih3 7:7ab2f4b09196 1736 ASSERT_P(hardware_init() == ERROR_NONE, "Hardware init failed!");
ajorgih3 7:7ab2f4b09196 1737
ajorgih3 7:7ab2f4b09196 1738 //start_game();
ajorgih3 7:7ab2f4b09196 1739 //title_page();
ajorgih3 7:7ab2f4b09196 1740 //helpful_items();
ajorgih3 7:7ab2f4b09196 1741 //harmful_items();
ajorgih3 7:7ab2f4b09196 1742 //additional_info();
ajorgih3 7:7ab2f4b09196 1743
ajorgih3 7:7ab2f4b09196 1744 // loading screen
ajorgih3 7:7ab2f4b09196 1745 //uLCD.filled_rectangle(0, 0, 255, 255, BLACK);
ajorgih3 7:7ab2f4b09196 1746 //uLCD.textbackground_color(BLACK);
ajorgih3 7:7ab2f4b09196 1747 //uLCD.color(0xFFFFFF);
ajorgih3 7:7ab2f4b09196 1748 //uLCD.locate(4,7);
ajorgih3 7:7ab2f4b09196 1749 //uLCD.printf("GOOD LUCK!");
ajorgih3 7:7ab2f4b09196 1750 //uLCD.locate(4,8);
ajorgih3 7:7ab2f4b09196 1751 //uLCD.printf("Loading...");
ajorgih3 7:7ab2f4b09196 1752 //wait(4);
ajorgih3 3:bb6f73642f01 1753 //uLCD.filled_rectangle(0, 0, 255, 255, BLACK);
ajorgih3 3:bb6f73642f01 1754
ajorgih3 7:7ab2f4b09196 1755 snake_init(&snake);
ajorgih3 3:bb6f73642f01 1756 // 0. Initialize the maps -- implement this function:
ajorgih3 7:7ab2f4b09196 1757 maps_init();
ajorgih3 7:7ab2f4b09196 1758
ajorgih3 7:7ab2f4b09196 1759
ajorgih3 7:7ab2f4b09196 1760
ajorgih3 7:7ab2f4b09196 1761 init_main_map();
ajorgih3 7:7ab2f4b09196 1762 //init_map_2();
ajorgih3 7:7ab2f4b09196 1763
ajorgih3 3:bb6f73642f01 1764
ajorgih3 3:bb6f73642f01 1765 // Initialize game state
ajorgih3 6:fbaee888e5ea 1766 set_active_map(0);
ajorgih3 6:fbaee888e5ea 1767 snake.head_x = snake.head_y = 5;
ajorgih3 6:fbaee888e5ea 1768 snake.body_x = 4;
ajorgih3 6:fbaee888e5ea 1769 snake.body_y = 5;
ajorgih3 6:fbaee888e5ea 1770 snake.tail_x = 3;
ajorgih3 6:fbaee888e5ea 1771 snake.tail_y = 5;
ajorgih3 3:bb6f73642f01 1772 // Initial drawing
ajorgih3 6:fbaee888e5ea 1773 draw_game(FULL_DRAW);
ajorgih3 3:bb6f73642f01 1774 // Main game loop
ajorgih3 6:fbaee888e5ea 1775 while(1) {
ajorgih3 3:bb6f73642f01 1776 // Timer to measure game update speed
ajorgih3 6:fbaee888e5ea 1777 Timer t;
ajorgih3 6:fbaee888e5ea 1778 t.start();
ajorgih3 6:fbaee888e5ea 1779
ajorgih3 3:bb6f73642f01 1780 // 1. Read inputs -- implement this function:
ajorgih3 6:fbaee888e5ea 1781 GameInputs inputs = read_inputs();
ajorgih3 3:bb6f73642f01 1782
ajorgih3 3:bb6f73642f01 1783 // 2. Determine action (move, act, menu, etc.) -- implement this function:
ajorgih3 6:fbaee888e5ea 1784 int action = get_action(inputs);
ajorgih3 3:bb6f73642f01 1785
ajorgih3 3:bb6f73642f01 1786 // 3. Update game -- implement this function:
ajorgih3 6:fbaee888e5ea 1787 int result = update_game(action);
ajorgih3 3:bb6f73642f01 1788
ajorgih3 3:bb6f73642f01 1789 // 3b. Check for game over based on result
ajorgih3 3:bb6f73642f01 1790 // and if so, handle game over -- implement this.
ajorgih3 3:bb6f73642f01 1791
ajorgih3 3:bb6f73642f01 1792 // 4. Draw screen -- provided:
ajorgih3 6:fbaee888e5ea 1793 draw_game(result);
ajorgih3 3:bb6f73642f01 1794
ajorgih3 3:bb6f73642f01 1795 // Compute update time
ajorgih3 6:fbaee888e5ea 1796 t.stop();
ajorgih3 6:fbaee888e5ea 1797 int dt = t.read_ms();
ajorgih3 6:fbaee888e5ea 1798
ajorgih3 3:bb6f73642f01 1799 // Display and wait
ajorgih3 3:bb6f73642f01 1800 // NOTE: Text is 8 pixels tall
ajorgih3 6:fbaee888e5ea 1801 if (dt < 100) wait_ms(100 - dt);
ajorgih3 6:fbaee888e5ea 1802 }
ajorgih3 7:7ab2f4b09196 1803
ajorgih3 3:bb6f73642f01 1804 }
ajorgih3 3:bb6f73642f01 1805
DCchico 1:10330bce85cb 1806 // Plays a wavfile
DCchico 1:10330bce85cb 1807 void playSound(char* wav)
DCchico 1:10330bce85cb 1808 {
DCchico 1:10330bce85cb 1809
DCchico 1:10330bce85cb 1810 }