hgftf

Dependencies:   mbed wave_player 4DGL-uLCD-SE MMA8452

Committer:
ajorgih3
Date:
Tue Nov 17 19:14:48 2020 +0000
Revision:
4:697e1120f821
Parent:
3:bb6f73642f01
Child:
5:5953ca12205d
good;

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>
DCchico 1:10330bce85cb 20
DCchico 1:10330bce85cb 21 #define CITY_HIT_MARGIN 1
DCchico 1:10330bce85cb 22 #define CITY_UPPER_BOUND (SIZE_Y-(LANDSCAPE_HEIGHT+MAX_BUILDING_HEIGHT))
DCchico 2:4947d6a82971 23
DCchico 1:10330bce85cb 24 // Helper function declarations
DCchico 1:10330bce85cb 25 void playSound(char* wav);
DCchico 1:10330bce85cb 26
DCchico 1:10330bce85cb 27 /**
DCchico 1:10330bce85cb 28 * The main game state. Must include snake locations and previous locations for
DCchico 1:10330bce85cb 29 * drawing to work properly. Other items can be added as needed.
DCchico 1:10330bce85cb 30 */
DCchico 1:10330bce85cb 31
DCchico 1:10330bce85cb 32 /**
DCchico 1:10330bce85cb 33 * Given the game inputs, determine what kind of update needs to happen.
DCchico 1:10330bce85cb 34 * Possbile return values are defined below.
DCchico 1:10330bce85cb 35 */
DCchico 1:10330bce85cb 36 Snake snake;
ajorgih3 3:bb6f73642f01 37 int score;
ajorgih3 3:bb6f73642f01 38 GameInputs input;
ajorgih3 3:bb6f73642f01 39 int main();
ajorgih3 3:bb6f73642f01 40 void go_right();
ajorgih3 3:bb6f73642f01 41 void go_left();
ajorgih3 3:bb6f73642f01 42 void go_up();
ajorgih3 3:bb6f73642f01 43 void go_down();
ajorgih3 3:bb6f73642f01 44 int previousState;
ajorgih3 3:bb6f73642f01 45 int thisState;
ajorgih3 3:bb6f73642f01 46 int lives = 0;
ajorgih3 3:bb6f73642f01 47 int main2();
ajorgih3 4:697e1120f821 48 int y;
ajorgih3 3:bb6f73642f01 49 MapItem *nextHead;
ajorgih3 4:697e1120f821 50 int updateY();
ajorgih3 4:697e1120f821 51 void go_right2();
ajorgih3 4:697e1120f821 52 void go_up2();
DCchico 1:10330bce85cb 53
DCchico 1:10330bce85cb 54 // Function prototypes
DCchico 2:4947d6a82971 55
DCchico 2:4947d6a82971 56 /**
DCchico 2:4947d6a82971 57 * Given the game inputs, determine what kind of update needs to happen.
DCchico 2:4947d6a82971 58 * Possible return values are defined below.
DCchico 2:4947d6a82971 59 */
DCchico 2:4947d6a82971 60 #define NO_RESULT 0
DCchico 2:4947d6a82971 61 #define NO_ACTION 0
DCchico 2:4947d6a82971 62 #define ACTION_BUTTON 1
DCchico 2:4947d6a82971 63 #define MENU_BUTTON 2
DCchico 2:4947d6a82971 64 #define GO_LEFT 3
DCchico 2:4947d6a82971 65 #define GO_RIGHT 4
DCchico 2:4947d6a82971 66 #define GO_UP 5
DCchico 2:4947d6a82971 67 #define GO_DOWN 6
DCchico 2:4947d6a82971 68 #define GAME_OVER 7
DCchico 2:4947d6a82971 69 #define FULL_DRAW 8
ajorgih3 4:697e1120f821 70 #define HAX 9
ajorgih3 3:bb6f73642f01 71 #define NOT_UP 10
ajorgih3 3:bb6f73642f01 72 #define IN_GAME_MENU 11
ajorgih3 3:bb6f73642f01 73 #define NOT_RIGHT 12
ajorgih3 3:bb6f73642f01 74
ajorgih3 3:bb6f73642f01 75
DCchico 1:10330bce85cb 76 // Get Actions from User (push buttons & accelerometer)
DCchico 2:4947d6a82971 77 // Based on push button and accelerometer inputs, determine which action
DCchico 2:4947d6a82971 78 // needs to be performed (may be no action).
DCchico 1:10330bce85cb 79 int get_action(GameInputs inputs)
DCchico 1:10330bce85cb 80 {
ajorgih3 3:bb6f73642f01 81 // threshold for moving right
ajorgih3 3:bb6f73642f01 82 if (inputs.ax >= 0.30 && inputs.ax <= 0.60) {
ajorgih3 3:bb6f73642f01 83 return GO_RIGHT;
ajorgih3 3:bb6f73642f01 84 }
ajorgih3 3:bb6f73642f01 85 // threshold for moving left
ajorgih3 3:bb6f73642f01 86 if (inputs.ax <= -0.30 && inputs.ax >= -0.60) {
ajorgih3 3:bb6f73642f01 87 return GO_LEFT;
ajorgih3 3:bb6f73642f01 88 }
ajorgih3 3:bb6f73642f01 89 // threshold for moving up
ajorgih3 3:bb6f73642f01 90 if (inputs.ay >= 0.30 && inputs.ay <= 0.60) {
ajorgih3 3:bb6f73642f01 91 return GO_UP;
ajorgih3 3:bb6f73642f01 92 }
ajorgih3 3:bb6f73642f01 93 // threshold for moving down
ajorgih3 3:bb6f73642f01 94 if (inputs.ay <= -0.30 && inputs.ay >= -0.60) {
ajorgih3 3:bb6f73642f01 95 return GO_DOWN;
ajorgih3 3:bb6f73642f01 96 }
ajorgih3 3:bb6f73642f01 97
ajorgih3 3:bb6f73642f01 98 if (!inputs.b1) {
ajorgih3 4:697e1120f821 99 return HAX;
ajorgih3 3:bb6f73642f01 100 }
ajorgih3 3:bb6f73642f01 101
ajorgih3 3:bb6f73642f01 102 // if we do not satisfy these conditions then
ajorgih3 3:bb6f73642f01 103 // no action is done
ajorgih3 3:bb6f73642f01 104 return NO_ACTION;
DCchico 1:10330bce85cb 105 }
DCchico 1:10330bce85cb 106 /**
DCchico 1:10330bce85cb 107 * Update the game state based on the user action. For example, if the user
DCchico 1:10330bce85cb 108 * requests GO_UP, then this function should determine if that is possible by
DCchico 1:10330bce85cb 109 * consulting the map, and update the snake position accordingly.
DCchico 1:10330bce85cb 110 *
DCchico 1:10330bce85cb 111 * Return values are defined below. FULL_DRAW indicates that for this frame,
DCchico 1:10330bce85cb 112 * draw_game should not optimize drawing and should draw every tile, even if
DCchico 1:10330bce85cb 113 * the snake has not moved.
DCchico 1:10330bce85cb 114 */
ajorgih3 3:bb6f73642f01 115
DCchico 1:10330bce85cb 116
DCchico 1:10330bce85cb 117 /**
DCchico 1:10330bce85cb 118 * Draw the upper status bar.
DCchico 1:10330bce85cb 119 */
ajorgih3 3:bb6f73642f01 120 void draw_upper_status(int x, int y, int z)
DCchico 1:10330bce85cb 121 {
DCchico 1:10330bce85cb 122 uLCD.line(0, 9, 127, 9, GREEN);
ajorgih3 3:bb6f73642f01 123 uLCD.text_width(1);
ajorgih3 3:bb6f73642f01 124 uLCD.text_height(1);
ajorgih3 3:bb6f73642f01 125 uLCD.color(0xFFFF00);
ajorgih3 3:bb6f73642f01 126 uLCD.locate(0,0);
ajorgih3 4:697e1120f821 127 uLCD.printf("POS:%d,%d ", x, y);
ajorgih3 3:bb6f73642f01 128 uLCD.locate(10,0);
ajorgih3 3:bb6f73642f01 129 uLCD.printf("SCORE:%d", score);
DCchico 1:10330bce85cb 130 }
DCchico 1:10330bce85cb 131
DCchico 1:10330bce85cb 132 /**
DCchico 1:10330bce85cb 133 * Draw the lower status bar.
DCchico 1:10330bce85cb 134 */
ajorgih3 3:bb6f73642f01 135 void draw_lower_status(int lives)
DCchico 1:10330bce85cb 136 {
ajorgih3 3:bb6f73642f01 137 uLCD.line(0, 118, 127, 118, 0xFFFF00);
ajorgih3 3:bb6f73642f01 138 uLCD.text_width(1);
ajorgih3 3:bb6f73642f01 139 uLCD.text_height(1);
ajorgih3 3:bb6f73642f01 140 uLCD.color(0xFFFF00);
ajorgih3 3:bb6f73642f01 141 uLCD.locate(0,15);
ajorgih3 3:bb6f73642f01 142 uLCD.printf("LIVES:%d", lives);
DCchico 1:10330bce85cb 143 }
DCchico 1:10330bce85cb 144
DCchico 1:10330bce85cb 145 /**
DCchico 1:10330bce85cb 146 * Draw the border for the map.
DCchico 1:10330bce85cb 147 */
DCchico 1:10330bce85cb 148 void draw_border()
DCchico 1:10330bce85cb 149 {
ajorgih3 3:bb6f73642f01 150 uLCD.filled_rectangle(0, 9, 127, 14, WHITE); // Top
ajorgih3 3:bb6f73642f01 151 uLCD.filled_rectangle(0, 13, 2, 114, WHITE); // Left
ajorgih3 3:bb6f73642f01 152 uLCD.filled_rectangle(0, 114, 127, 117, WHITE); // Bottom
ajorgih3 3:bb6f73642f01 153 uLCD.filled_rectangle(124, 14, 127, 117, WHITE); // Right
DCchico 1:10330bce85cb 154 }
DCchico 1:10330bce85cb 155
ajorgih3 3:bb6f73642f01 156
DCchico 1:10330bce85cb 157 /**
DCchico 1:10330bce85cb 158 * Entry point for frame drawing. This should be called once per iteration of
DCchico 1:10330bce85cb 159 * the game loop. This draws all tiles on the screen, followed by the status
DCchico 1:10330bce85cb 160 * bars. Unless init is nonzero, this function will optimize drawing by only
DCchico 1:10330bce85cb 161 * drawing tiles that have changed from the previous frame.
DCchico 1:10330bce85cb 162 */
DCchico 1:10330bce85cb 163 void draw_game(int draw_option)
ajorgih3 3:bb6f73642f01 164 {
ajorgih3 3:bb6f73642f01 165 // prints game over if the player loses.
ajorgih3 3:bb6f73642f01 166 if (draw_option == GAME_OVER) {
ajorgih3 3:bb6f73642f01 167 int u = 58;
ajorgih3 3:bb6f73642f01 168 int v = 56;
ajorgih3 3:bb6f73642f01 169 uLCD.filled_rectangle(0, 0, 255, 255, BLACK);
ajorgih3 3:bb6f73642f01 170 uLCD.text_width(1);
ajorgih3 3:bb6f73642f01 171 uLCD.text_height(1);
ajorgih3 3:bb6f73642f01 172 uLCD.locate(5,7);
ajorgih3 3:bb6f73642f01 173 uLCD.color(RED);
ajorgih3 3:bb6f73642f01 174 uLCD.printf("GAME OVER\n");
ajorgih3 3:bb6f73642f01 175 draw_snake_head(u+22, v+11);
ajorgih3 3:bb6f73642f01 176 draw_snake_tail(u-22, v+11);
ajorgih3 3:bb6f73642f01 177
ajorgih3 3:bb6f73642f01 178 uLCD.textbackground_color(BLACK);
ajorgih3 3:bb6f73642f01 179 uLCD.color(0xFFFFFF);
ajorgih3 3:bb6f73642f01 180 uLCD.text_width(1);
ajorgih3 3:bb6f73642f01 181 uLCD.text_height(1);
ajorgih3 3:bb6f73642f01 182 uLCD.locate(4, 10);
ajorgih3 3:bb6f73642f01 183 uLCD.printf("Press 'B2'\n");
ajorgih3 3:bb6f73642f01 184 uLCD.locate(5, 11);
ajorgih3 3:bb6f73642f01 185 uLCD.printf("to retry!\n");
ajorgih3 3:bb6f73642f01 186
ajorgih3 3:bb6f73642f01 187 do {
ajorgih3 3:bb6f73642f01 188 input = read_inputs();
ajorgih3 3:bb6f73642f01 189 } while(input.b2);
ajorgih3 3:bb6f73642f01 190
ajorgih3 3:bb6f73642f01 191 uLCD.filled_rectangle(0, 0, 255, 255, BLACK);
ajorgih3 3:bb6f73642f01 192 main();
ajorgih3 3:bb6f73642f01 193
ajorgih3 3:bb6f73642f01 194 }
ajorgih3 3:bb6f73642f01 195
DCchico 1:10330bce85cb 196 // Draw game border first
DCchico 1:10330bce85cb 197 if(draw_option == FULL_DRAW)
DCchico 1:10330bce85cb 198 {
DCchico 1:10330bce85cb 199 draw_border();
DCchico 1:10330bce85cb 200 int u = 58;
ajorgih3 3:bb6f73642f01 201 int v = 59;
ajorgih3 3:bb6f73642f01 202
ajorgih3 3:bb6f73642f01 203 snake.head_pi = u;
ajorgih3 3:bb6f73642f01 204 snake.head_pj = v;
ajorgih3 3:bb6f73642f01 205
ajorgih3 3:bb6f73642f01 206 snake.body_pi = u - 11;
ajorgih3 3:bb6f73642f01 207 snake.body_pj = v;
ajorgih3 3:bb6f73642f01 208
ajorgih3 3:bb6f73642f01 209 snake.tail_pi = u - 22;
ajorgih3 3:bb6f73642f01 210 snake.tail_pj = v;
ajorgih3 3:bb6f73642f01 211
DCchico 1:10330bce85cb 212 draw_snake_head(u, v);
DCchico 1:10330bce85cb 213 draw_snake_body(u-11, v);
DCchico 1:10330bce85cb 214 draw_snake_tail(u-22, v);
ajorgih3 3:bb6f73642f01 215
DCchico 1:10330bce85cb 216 return;
DCchico 1:10330bce85cb 217 }
DCchico 1:10330bce85cb 218 // Iterate over all visible map tiles
DCchico 1:10330bce85cb 219 for (int i = -5; i <= 5; i++) { // Iterate over columns of tiles
DCchico 1:10330bce85cb 220 for (int j = -4; j <= 4; j++) { // Iterate over one column of tiles
DCchico 1:10330bce85cb 221 // Here, we have a given (i,j)
DCchico 1:10330bce85cb 222
DCchico 1:10330bce85cb 223 // Compute the current map (x,y) of this tile
DCchico 1:10330bce85cb 224 int x = i + snake.head_x;
DCchico 1:10330bce85cb 225 int y = j + snake.head_y;
DCchico 1:10330bce85cb 226
DCchico 1:10330bce85cb 227 // Compute the previous map (px, py) of this tile
DCchico 1:10330bce85cb 228 int px = i + snake.head_px;
DCchico 1:10330bce85cb 229 int py = j + snake.head_py;
DCchico 1:10330bce85cb 230
DCchico 1:10330bce85cb 231 // Compute u,v coordinates for drawing
DCchico 1:10330bce85cb 232 int u = (i+5)*11 + 3;
DCchico 1:10330bce85cb 233 int v = (j+4)*11 + 15;
DCchico 1:10330bce85cb 234
DCchico 1:10330bce85cb 235 // Figure out what to draw
DCchico 1:10330bce85cb 236 DrawFunc draw = NULL;
DCchico 1:10330bce85cb 237 if (x >= 0 && y >= 0 && x < map_width() && y < map_height()) { // Current (i,j) in the map
DCchico 1:10330bce85cb 238 MapItem* curr_item = get_here(x, y);
DCchico 1:10330bce85cb 239 MapItem* prev_item = get_here(px, py);
DCchico 1:10330bce85cb 240 if (draw_option || curr_item != prev_item) { // Only draw if they're different
DCchico 1:10330bce85cb 241 if (curr_item) { // There's something here! Draw it
DCchico 1:10330bce85cb 242 draw = curr_item->draw;
DCchico 1:10330bce85cb 243 } else { // There used to be something, but now there isn't
DCchico 1:10330bce85cb 244 draw = draw_nothing;
DCchico 1:10330bce85cb 245 }
DCchico 1:10330bce85cb 246 } else if (curr_item && curr_item->type == CLEAR) {
DCchico 1:10330bce85cb 247 // This is a special case for erasing things like doors.
DCchico 1:10330bce85cb 248 draw = curr_item->draw; // i.e. draw_nothing
DCchico 1:10330bce85cb 249 }
DCchico 1:10330bce85cb 250 } else if (draw_option) { // If doing a full draw, but we're out of bounds, draw the walls.
DCchico 1:10330bce85cb 251 draw = draw_wall;
DCchico 1:10330bce85cb 252 }
DCchico 1:10330bce85cb 253
DCchico 1:10330bce85cb 254 // Actually draw the tile
DCchico 1:10330bce85cb 255 if (draw) draw(u, v);
DCchico 1:10330bce85cb 256 }
DCchico 1:10330bce85cb 257 }
DCchico 1:10330bce85cb 258
DCchico 1:10330bce85cb 259 // Draw status bars
ajorgih3 4:697e1120f821 260 draw_upper_status(snake.head_x, updateY(), score);
ajorgih3 3:bb6f73642f01 261 draw_lower_status(lives);
ajorgih3 3:bb6f73642f01 262 }
ajorgih3 3:bb6f73642f01 263
ajorgih3 4:697e1120f821 264 int updateY() {
ajorgih3 4:697e1120f821 265 y = snake.head_y;
ajorgih3 4:697e1120f821 266 return y;
ajorgih3 4:697e1120f821 267 }
ajorgih3 4:697e1120f821 268
ajorgih3 3:bb6f73642f01 269 void start_game() {
ajorgih3 3:bb6f73642f01 270 int u = 58;
ajorgih3 3:bb6f73642f01 271 int v = 56;
ajorgih3 3:bb6f73642f01 272
ajorgih3 3:bb6f73642f01 273 uLCD.textbackground_color(GREEN);
ajorgih3 3:bb6f73642f01 274 uLCD.filled_rectangle(0, 9, 127, 14, WHITE); // Top
ajorgih3 3:bb6f73642f01 275 uLCD.filled_rectangle(0, 13, 2, 114, WHITE); // Left
ajorgih3 3:bb6f73642f01 276 uLCD.filled_rectangle(0, 114, 127, 117, WHITE); // Bottom
ajorgih3 3:bb6f73642f01 277 uLCD.filled_rectangle(124, 14, 127, 117, WHITE); // Right
ajorgih3 3:bb6f73642f01 278 uLCD.text_width(1);
ajorgih3 3:bb6f73642f01 279 uLCD.text_height(1);
ajorgih3 3:bb6f73642f01 280 uLCD.locate(2, 3);
ajorgih3 3:bb6f73642f01 281 uLCD.color(RED);
ajorgih3 3:bb6f73642f01 282 uLCD.printf("-Sneaky Snakey-");
ajorgih3 3:bb6f73642f01 283 uLCD.textbackground_color(BLUE);
ajorgih3 3:bb6f73642f01 284 uLCD.text_width(1);
ajorgih3 3:bb6f73642f01 285 uLCD.text_height(1);
ajorgih3 3:bb6f73642f01 286 uLCD.locate(5, 4);
ajorgih3 3:bb6f73642f01 287 uLCD.color(0xFFFF00);
ajorgih3 3:bb6f73642f01 288 uLCD.printf("ECE 2035");
ajorgih3 3:bb6f73642f01 289 uLCD.locate(7,5);
ajorgih3 3:bb6f73642f01 290
ajorgih3 3:bb6f73642f01 291 draw_snake_head(u, v);
ajorgih3 3:bb6f73642f01 292 draw_snake_body(u-11, v);
ajorgih3 3:bb6f73642f01 293 draw_snake_tail(u-22, v);
ajorgih3 3:bb6f73642f01 294
ajorgih3 3:bb6f73642f01 295 draw_goodie(u+22, v);
ajorgih3 3:bb6f73642f01 296
ajorgih3 3:bb6f73642f01 297 uLCD.textbackground_color(BLACK);
ajorgih3 3:bb6f73642f01 298 uLCD.color(0xFFFFFF);
ajorgih3 3:bb6f73642f01 299 uLCD.text_width(1);
ajorgih3 3:bb6f73642f01 300 uLCD.text_height(1);
ajorgih3 3:bb6f73642f01 301 uLCD.locate(4, 10);
ajorgih3 3:bb6f73642f01 302 uLCD.printf("Press 'B2'\n");
ajorgih3 3:bb6f73642f01 303 uLCD.locate(5, 11);
ajorgih3 3:bb6f73642f01 304 uLCD.printf("to start!\n");
ajorgih3 3:bb6f73642f01 305
ajorgih3 3:bb6f73642f01 306 do {
ajorgih3 3:bb6f73642f01 307 input = read_inputs();
ajorgih3 3:bb6f73642f01 308 } while(input.b2);
ajorgih3 3:bb6f73642f01 309 uLCD.filled_rectangle(0, 0, 255, 255, BLACK);
ajorgih3 3:bb6f73642f01 310 }
ajorgih3 3:bb6f73642f01 311
ajorgih3 3:bb6f73642f01 312 void title_page() {
ajorgih3 3:bb6f73642f01 313
ajorgih3 3:bb6f73642f01 314 int u = 58;
ajorgih3 3:bb6f73642f01 315 int v = 56;
ajorgih3 3:bb6f73642f01 316
ajorgih3 3:bb6f73642f01 317 uLCD.filled_rectangle(0, 9, 127, 14, 0xFFFF00); // Top
ajorgih3 3:bb6f73642f01 318 uLCD.filled_rectangle(0, 13, 2, 114, 0xFFFF00); // Left
ajorgih3 3:bb6f73642f01 319 uLCD.filled_rectangle(0, 114, 127, 117, 0xFFFF00); // Bottom
ajorgih3 3:bb6f73642f01 320 uLCD.filled_rectangle(124, 14, 127, 117, 0xFFFF00); // Right
ajorgih3 3:bb6f73642f01 321 uLCD.text_width(1);
ajorgih3 3:bb6f73642f01 322 uLCD.text_height(1);
ajorgih3 3:bb6f73642f01 323 uLCD.locate(5, 3);
ajorgih3 3:bb6f73642f01 324 uLCD.color(RED);
ajorgih3 3:bb6f73642f01 325 uLCD.printf("OBJECTIVE");
ajorgih3 3:bb6f73642f01 326 uLCD.text_width(1);
ajorgih3 3:bb6f73642f01 327 uLCD.text_height(1);
ajorgih3 3:bb6f73642f01 328 uLCD.locate(2, 4);
ajorgih3 3:bb6f73642f01 329 uLCD.color(0xFFFFFF);
ajorgih3 3:bb6f73642f01 330 uLCD.printf("Eat 20 goodies!");
ajorgih3 3:bb6f73642f01 331
ajorgih3 3:bb6f73642f01 332 uLCD.locate(7,5);
ajorgih3 3:bb6f73642f01 333 draw_goodie(u, v);
ajorgih3 3:bb6f73642f01 334 draw_goodie(u-22, v);
ajorgih3 3:bb6f73642f01 335 draw_goodie(u+22, v);
ajorgih3 3:bb6f73642f01 336
ajorgih3 3:bb6f73642f01 337 uLCD.textbackground_color(BLACK);
ajorgih3 3:bb6f73642f01 338 uLCD.color(0xFFFFFF);
ajorgih3 3:bb6f73642f01 339 uLCD.text_width(1);
ajorgih3 3:bb6f73642f01 340 uLCD.text_height(1);
ajorgih3 3:bb6f73642f01 341 uLCD.locate(3, 10);
ajorgih3 3:bb6f73642f01 342 uLCD.printf("Press 'B2'\n");
ajorgih3 3:bb6f73642f01 343 uLCD.locate(3, 11);
ajorgih3 3:bb6f73642f01 344 uLCD.printf("to continue!\n");
ajorgih3 3:bb6f73642f01 345
ajorgih3 3:bb6f73642f01 346 do {
ajorgih3 3:bb6f73642f01 347 input = read_inputs();
ajorgih3 3:bb6f73642f01 348 } while(input.b2);
ajorgih3 3:bb6f73642f01 349 uLCD.filled_rectangle(0, 0, 255, 255, BLACK);
ajorgih3 3:bb6f73642f01 350
ajorgih3 3:bb6f73642f01 351 }
ajorgih3 3:bb6f73642f01 352
ajorgih3 3:bb6f73642f01 353 void helpful_items() {
ajorgih3 3:bb6f73642f01 354 int u = 58;
ajorgih3 3:bb6f73642f01 355 int v = 56;
ajorgih3 3:bb6f73642f01 356
ajorgih3 3:bb6f73642f01 357 uLCD.filled_rectangle(0, 9, 127, 14, GREEN); // Top
ajorgih3 3:bb6f73642f01 358 uLCD.filled_rectangle(0, 13, 2, 114, GREEN); // Left
ajorgih3 3:bb6f73642f01 359 uLCD.filled_rectangle(0, 114, 127, 117, GREEN); // Bottom
ajorgih3 3:bb6f73642f01 360 uLCD.filled_rectangle(124, 14, 127, 117, GREEN); // Right
ajorgih3 3:bb6f73642f01 361
ajorgih3 3:bb6f73642f01 362 uLCD.text_width(1);
ajorgih3 3:bb6f73642f01 363 uLCD.text_height(1);
ajorgih3 3:bb6f73642f01 364 uLCD.locate(6, 3);
ajorgih3 3:bb6f73642f01 365 uLCD.color(0xFFFF00);
ajorgih3 3:bb6f73642f01 366 uLCD.printf("BUFFS");
ajorgih3 3:bb6f73642f01 367
ajorgih3 3:bb6f73642f01 368 uLCD.text_width(1);
ajorgih3 3:bb6f73642f01 369 uLCD.text_height(1);
ajorgih3 3:bb6f73642f01 370 uLCD.locate(3, 4);
ajorgih3 3:bb6f73642f01 371 uLCD.color(0xFFFFFF);
ajorgih3 3:bb6f73642f01 372 uLCD.printf("Extra Life!");
ajorgih3 3:bb6f73642f01 373
ajorgih3 3:bb6f73642f01 374 uLCD.text_width(1);
ajorgih3 3:bb6f73642f01 375 uLCD.text_height(1);
ajorgih3 3:bb6f73642f01 376 uLCD.locate(2, 5);
ajorgih3 3:bb6f73642f01 377 uLCD.color(0xFFFFFF);
ajorgih3 3:bb6f73642f01 378 uLCD.printf("Invincibility");
ajorgih3 3:bb6f73642f01 379
ajorgih3 3:bb6f73642f01 380 draw_life(u-22, v);
ajorgih3 3:bb6f73642f01 381 draw_shield(u+22, v);
ajorgih3 3:bb6f73642f01 382
ajorgih3 3:bb6f73642f01 383 uLCD.textbackground_color(BLACK);
ajorgih3 3:bb6f73642f01 384 uLCD.color(0xFFFFFF);
ajorgih3 3:bb6f73642f01 385 uLCD.text_width(1);
ajorgih3 3:bb6f73642f01 386 uLCD.text_height(1);
ajorgih3 3:bb6f73642f01 387 uLCD.locate(3, 10);
ajorgih3 3:bb6f73642f01 388 uLCD.printf("Press 'B2'\n");
ajorgih3 3:bb6f73642f01 389 uLCD.locate(3, 11);
ajorgih3 3:bb6f73642f01 390 uLCD.printf("to continue!\n");
ajorgih3 3:bb6f73642f01 391
ajorgih3 3:bb6f73642f01 392 do {
ajorgih3 3:bb6f73642f01 393 input = read_inputs();
ajorgih3 3:bb6f73642f01 394 } while(input.b2);
ajorgih3 3:bb6f73642f01 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 harmful_items() {
ajorgih3 3:bb6f73642f01 400 int u = 58;
ajorgih3 3:bb6f73642f01 401 int v = 56;
ajorgih3 3:bb6f73642f01 402
ajorgih3 3:bb6f73642f01 403 uLCD.filled_rectangle(0, 9, 127, 14, RED); // Top
ajorgih3 3:bb6f73642f01 404 uLCD.filled_rectangle(0, 13, 2, 114, RED); // Left
ajorgih3 3:bb6f73642f01 405 uLCD.filled_rectangle(0, 114, 127, 117, RED); // Bottom
ajorgih3 3:bb6f73642f01 406 uLCD.filled_rectangle(124, 14, 127, 117, RED); // Right
ajorgih3 3:bb6f73642f01 407
ajorgih3 3:bb6f73642f01 408 uLCD.text_width(1);
ajorgih3 3:bb6f73642f01 409 uLCD.text_height(1);
ajorgih3 3:bb6f73642f01 410 uLCD.locate(5, 3);
ajorgih3 3:bb6f73642f01 411 uLCD.color(0xFFA500);
ajorgih3 3:bb6f73642f01 412 uLCD.printf("DEBUFFS");
ajorgih3 3:bb6f73642f01 413
ajorgih3 3:bb6f73642f01 414 uLCD.text_width(1);
ajorgih3 3:bb6f73642f01 415 uLCD.text_height(1);
ajorgih3 4:697e1120f821 416 uLCD.locate(2, 4);
ajorgih3 3:bb6f73642f01 417 uLCD.color(0xFFFFFF);
ajorgih3 4:697e1120f821 418 uLCD.printf("FORCES 6 STEPS");
ajorgih3 3:bb6f73642f01 419
ajorgih3 3:bb6f73642f01 420 uLCD.text_width(1);
ajorgih3 3:bb6f73642f01 421 uLCD.text_height(1);
ajorgih3 3:bb6f73642f01 422 uLCD.locate(3, 5);
ajorgih3 3:bb6f73642f01 423 uLCD.color(0xFFFFFF);
ajorgih3 4:697e1120f821 424 uLCD.printf("OF DIRECTION");
ajorgih3 3:bb6f73642f01 425
ajorgih3 4:697e1120f821 426 draw_arrow_down(u-33, v);
ajorgih3 4:697e1120f821 427 draw_arrow_up(u-11, v);
ajorgih3 4:697e1120f821 428 draw_arrow_right(u+33, v);
ajorgih3 4:697e1120f821 429 draw_arrow_left(u+11, v);
ajorgih3 3:bb6f73642f01 430
ajorgih3 3:bb6f73642f01 431 uLCD.textbackground_color(BLACK);
ajorgih3 3:bb6f73642f01 432 uLCD.color(0xFFFFFF);
ajorgih3 3:bb6f73642f01 433 uLCD.text_width(1);
ajorgih3 3:bb6f73642f01 434 uLCD.text_height(1);
ajorgih3 3:bb6f73642f01 435 uLCD.locate(3, 10);
ajorgih3 3:bb6f73642f01 436 uLCD.printf("Press 'B2'\n");
ajorgih3 3:bb6f73642f01 437 uLCD.locate(3, 11);
ajorgih3 3:bb6f73642f01 438 uLCD.printf("to continue!\n");
ajorgih3 3:bb6f73642f01 439
ajorgih3 3:bb6f73642f01 440 do {
ajorgih3 3:bb6f73642f01 441 input = read_inputs();
ajorgih3 3:bb6f73642f01 442 } while(input.b2);
ajorgih3 3:bb6f73642f01 443 uLCD.filled_rectangle(0, 0, 255, 255, BLACK);
DCchico 1:10330bce85cb 444 }
DCchico 1:10330bce85cb 445
DCchico 1:10330bce85cb 446 /**
DCchico 1:10330bce85cb 447 * Initialize the main world map. Add walls around the edges, interior chambers,
DCchico 1:10330bce85cb 448 * and plants in the background so you can see motion.
DCchico 1:10330bce85cb 449 */
DCchico 1:10330bce85cb 450 void init_main_map()
ajorgih3 3:bb6f73642f01 451 {
DCchico 1:10330bce85cb 452 // "Random" plants
DCchico 1:10330bce85cb 453 Map* map = set_active_map(0);
DCchico 1:10330bce85cb 454 pc.printf("plants\r\n");
DCchico 1:10330bce85cb 455
ajorgih3 3:bb6f73642f01 456 add_sword(10, 10);
ajorgih3 3:bb6f73642f01 457 add_goodie(8, 4);
ajorgih3 3:bb6f73642f01 458 add_goodie(11, 3);
ajorgih3 3:bb6f73642f01 459 add_goodie(5, 3);
ajorgih3 3:bb6f73642f01 460 add_shield(8, 7);
ajorgih3 3:bb6f73642f01 461 add_life(14,15);
ajorgih3 3:bb6f73642f01 462 add_snowflake(20, 20);
ajorgih3 3:bb6f73642f01 463 add_plant(7, 19);
ajorgih3 3:bb6f73642f01 464 add_snake_head(5, 4);
ajorgih3 4:697e1120f821 465 add_arrow_up(16, 5);
ajorgih3 4:697e1120f821 466 add_arrow_down(20, 5);
ajorgih3 4:697e1120f821 467 add_arrow_right(24, 5);
ajorgih3 4:697e1120f821 468 add_arrow_left(28, 5);
ajorgih3 3:bb6f73642f01 469
DCchico 1:10330bce85cb 470 pc.printf("Adding walls!\r\n");
DCchico 1:10330bce85cb 471 add_wall(0, 0, HORIZONTAL, map_width());
DCchico 1:10330bce85cb 472 add_wall(0, map_height()-1, HORIZONTAL, map_width());
DCchico 1:10330bce85cb 473 add_wall(0, 0, VERTICAL, map_height());
DCchico 1:10330bce85cb 474 add_wall(map_width()-1, 0, VERTICAL, map_height());
DCchico 1:10330bce85cb 475 pc.printf("Walls done!\r\n");
DCchico 1:10330bce85cb 476
ajorgih3 4:697e1120f821 477 add_snake_head(snake.locations[0].x, snake.locations[0].y);
ajorgih3 4:697e1120f821 478 add_snake_body(snake.locations[1].x, snake.locations[1].y);
ajorgih3 4:697e1120f821 479 add_snake_tail(snake.locations[2].x, snake.locations[2].y);
DCchico 1:10330bce85cb 480
DCchico 1:10330bce85cb 481 pc.printf("Add extra chamber\r\n");
DCchico 1:10330bce85cb 482 add_wall(30, 0, VERTICAL, 10);
DCchico 1:10330bce85cb 483 add_wall(30, 10, HORIZONTAL, 10);
DCchico 1:10330bce85cb 484 add_wall(39, 0, VERTICAL, 10);
DCchico 1:10330bce85cb 485 pc.printf("Added!\r\n");
ajorgih3 3:bb6f73642f01 486
ajorgih3 3:bb6f73642f01 487
DCchico 1:10330bce85cb 488
DCchico 1:10330bce85cb 489
DCchico 1:10330bce85cb 490 // Add stairs to chamber (map 1)
DCchico 1:10330bce85cb 491 //add_stairs(15, 5, 1, 5, 5);
DCchico 1:10330bce85cb 492
DCchico 1:10330bce85cb 493 // profile_hashtable();
DCchico 1:10330bce85cb 494 print_map();
DCchico 1:10330bce85cb 495 }
DCchico 1:10330bce85cb 496
ajorgih3 4:697e1120f821 497 void go_right2() {
ajorgih3 4:697e1120f821 498 snake.head_x += 1;
ajorgih3 4:697e1120f821 499 snake.head_y += 0;
ajorgih3 4:697e1120f821 500 snake.body_x = snake.head_px;
ajorgih3 4:697e1120f821 501 snake.tail_x = snake.body_px;
ajorgih3 4:697e1120f821 502 snake.body_y = snake.head_py;
ajorgih3 4:697e1120f821 503 snake.tail_y = snake.body_py;
ajorgih3 4:697e1120f821 504 }
ajorgih3 4:697e1120f821 505
ajorgih3 4:697e1120f821 506 void go_up2() {
ajorgih3 4:697e1120f821 507 draw_nothing(snake.tail_x, snake.tail_y);
ajorgih3 4:697e1120f821 508
ajorgih3 4:697e1120f821 509 snake.tail_x = snake.body_x;
ajorgih3 4:697e1120f821 510 snake.tail_y = snake.body_y;
ajorgih3 4:697e1120f821 511 draw_snake_tail(snake.tail_x, snake.tail_y);
ajorgih3 4:697e1120f821 512
ajorgih3 4:697e1120f821 513 snake.body_x = snake.head_x;
ajorgih3 4:697e1120f821 514 snake.body_y = snake.head_y;
ajorgih3 4:697e1120f821 515 draw_snake_body(snake.body_x, snake.body_y);
ajorgih3 4:697e1120f821 516
ajorgih3 4:697e1120f821 517 snake.head_x += 0;
ajorgih3 4:697e1120f821 518 snake.head_y -= 1;
ajorgih3 4:697e1120f821 519 draw_snake_head(snake.body_x, snake.body_y);
ajorgih3 4:697e1120f821 520 }
ajorgih3 3:bb6f73642f01 521
ajorgih3 3:bb6f73642f01 522 void go_right() {
ajorgih3 3:bb6f73642f01 523
ajorgih3 3:bb6f73642f01 524 if (previousState == 0 || previousState == GO_RIGHT) {
ajorgih3 3:bb6f73642f01 525 snake.head_x += 1;
ajorgih3 3:bb6f73642f01 526 snake.head_y += 0;
ajorgih3 3:bb6f73642f01 527 snake.body_x = snake.head_px;
ajorgih3 3:bb6f73642f01 528 snake.tail_x = snake.body_px;
ajorgih3 3:bb6f73642f01 529 snake.body_y = snake.head_py;
ajorgih3 3:bb6f73642f01 530 snake.tail_y = snake.body_py;
ajorgih3 3:bb6f73642f01 531 previousState = GO_RIGHT;
ajorgih3 3:bb6f73642f01 532 }
ajorgih3 3:bb6f73642f01 533
ajorgih3 4:697e1120f821 534 if (previousState == GO_UP) {
ajorgih3 4:697e1120f821 535 if (snake.head_pj != snake.body_pj) {
ajorgih3 3:bb6f73642f01 536 draw_nothing(snake.tail_pi, snake.tail_pj);
ajorgih3 3:bb6f73642f01 537 draw_nothing(snake.body_pi, snake.body_pj);
ajorgih3 3:bb6f73642f01 538 draw_nothing(snake.head_pi, snake.head_pj);
ajorgih3 3:bb6f73642f01 539
ajorgih3 3:bb6f73642f01 540 snake.body_pi = snake.head_pi - 11;
ajorgih3 3:bb6f73642f01 541 snake.body_pj = snake.head_pj;
ajorgih3 3:bb6f73642f01 542 draw_snake_body(snake.body_pi, snake.body_pj);
ajorgih3 3:bb6f73642f01 543 snake.tail_pi = snake.body_pi;
ajorgih3 3:bb6f73642f01 544 snake.tail_pj = snake.body_pj + 11;
ajorgih3 3:bb6f73642f01 545 draw_snake_tail(snake.tail_pi, snake.tail_pj);
ajorgih3 3:bb6f73642f01 546 snake.head_pi = snake.head_pi;
ajorgih3 3:bb6f73642f01 547 snake.head_pj = snake.head_pj;
ajorgih3 3:bb6f73642f01 548 draw_snake_head(snake.head_pi, snake.head_pj);
ajorgih3 3:bb6f73642f01 549
ajorgih3 3:bb6f73642f01 550 snake.tail_x = snake.body_px;
ajorgih3 3:bb6f73642f01 551 snake.tail_y = snake.body_py;
ajorgih3 3:bb6f73642f01 552 snake.body_x = snake.head_px;
ajorgih3 3:bb6f73642f01 553 snake.body_y = snake.head_py;
ajorgih3 4:697e1120f821 554 snake.head_x += 1;
ajorgih3 3:bb6f73642f01 555 snake.head_y -= 0;
ajorgih3 3:bb6f73642f01 556 thisState = NOT_RIGHT;
ajorgih3 3:bb6f73642f01 557 }
ajorgih3 3:bb6f73642f01 558
ajorgih3 3:bb6f73642f01 559 else {
ajorgih3 3:bb6f73642f01 560 draw_nothing(snake.tail_pi, snake.tail_pj);
ajorgih3 3:bb6f73642f01 561 draw_nothing(snake.body_pi, snake.body_pj);
ajorgih3 3:bb6f73642f01 562 draw_nothing(snake.head_pi, snake.head_pj);
ajorgih3 3:bb6f73642f01 563
ajorgih3 3:bb6f73642f01 564 snake.body_pi = snake.body_pi;
ajorgih3 3:bb6f73642f01 565 snake.body_pj = snake.body_pj;
ajorgih3 3:bb6f73642f01 566 draw_snake_body(snake.body_pi, snake.body_pj);
ajorgih3 3:bb6f73642f01 567 snake.tail_pi = snake.body_pi - 11;
ajorgih3 3:bb6f73642f01 568 snake.tail_pj = snake.body_pj;
ajorgih3 3:bb6f73642f01 569 draw_snake_tail(snake.tail_pi, snake.tail_pj);
ajorgih3 3:bb6f73642f01 570 snake.head_pi = snake.head_pi;
ajorgih3 3:bb6f73642f01 571 snake.head_pj = snake.head_pj;
ajorgih3 3:bb6f73642f01 572 draw_snake_head(snake.head_pi, snake.head_pj);
ajorgih3 3:bb6f73642f01 573
ajorgih3 3:bb6f73642f01 574 snake.tail_x = snake.body_px;
ajorgih3 3:bb6f73642f01 575 snake.tail_y = snake.body_py;
ajorgih3 3:bb6f73642f01 576 snake.body_x = snake.head_px;
ajorgih3 3:bb6f73642f01 577 snake.body_y = snake.head_py;
ajorgih3 3:bb6f73642f01 578 snake.head_x += 0;
ajorgih3 3:bb6f73642f01 579 snake.head_y -= 0;
ajorgih3 3:bb6f73642f01 580 }
ajorgih3 3:bb6f73642f01 581 }
ajorgih3 4:697e1120f821 582
ajorgih3 4:697e1120f821 583 if (previousState == GO_DOWN) {
ajorgih3 4:697e1120f821 584 if (snake.head_pj != snake.body_pj) {
ajorgih3 4:697e1120f821 585 draw_nothing(snake.tail_pi, snake.tail_pj);
ajorgih3 4:697e1120f821 586 draw_nothing(snake.body_pi, snake.body_pj);
ajorgih3 4:697e1120f821 587 draw_nothing(snake.head_pi, snake.head_pj);
ajorgih3 4:697e1120f821 588
ajorgih3 4:697e1120f821 589 snake.body_pi = snake.head_pi - 11;
ajorgih3 4:697e1120f821 590 snake.body_pj = snake.head_pj;
ajorgih3 4:697e1120f821 591 draw_snake_body(snake.body_pi, snake.body_pj);
ajorgih3 4:697e1120f821 592 snake.tail_pi = snake.body_pi;
ajorgih3 4:697e1120f821 593 snake.tail_pj = snake.body_pj - 11;
ajorgih3 4:697e1120f821 594 draw_snake_tail(snake.tail_pi, snake.tail_pj);
ajorgih3 4:697e1120f821 595 snake.head_pi = snake.head_pi;
ajorgih3 4:697e1120f821 596 snake.head_pj = snake.head_pj;
ajorgih3 4:697e1120f821 597 draw_snake_head(snake.head_pi, snake.head_pj);
ajorgih3 4:697e1120f821 598
ajorgih3 4:697e1120f821 599 snake.tail_x = snake.body_px;
ajorgih3 4:697e1120f821 600 snake.tail_y = snake.body_py;
ajorgih3 4:697e1120f821 601 snake.body_x = snake.head_px;
ajorgih3 4:697e1120f821 602 snake.body_y = snake.head_py;
ajorgih3 4:697e1120f821 603 snake.head_x += 1;
ajorgih3 4:697e1120f821 604 snake.head_y -= 0;
ajorgih3 4:697e1120f821 605 thisState = NOT_RIGHT;
ajorgih3 4:697e1120f821 606 }
ajorgih3 4:697e1120f821 607
ajorgih3 4:697e1120f821 608 else {
ajorgih3 4:697e1120f821 609 draw_nothing(snake.tail_pi, snake.tail_pj);
ajorgih3 4:697e1120f821 610 draw_nothing(snake.body_pi, snake.body_pj);
ajorgih3 4:697e1120f821 611 draw_nothing(snake.head_pi, snake.head_pj);
ajorgih3 4:697e1120f821 612
ajorgih3 4:697e1120f821 613 snake.body_pi = snake.body_pi;
ajorgih3 4:697e1120f821 614 snake.body_pj = snake.body_pj;
ajorgih3 4:697e1120f821 615 draw_snake_body(snake.body_pi, snake.body_pj);
ajorgih3 4:697e1120f821 616 snake.tail_pi = snake.body_pi - 11;
ajorgih3 4:697e1120f821 617 snake.tail_pj = snake.body_pj;
ajorgih3 4:697e1120f821 618 draw_snake_tail(snake.tail_pi, snake.tail_pj);
ajorgih3 4:697e1120f821 619 snake.head_pi = snake.head_pi;
ajorgih3 4:697e1120f821 620 snake.head_pj = snake.head_pj;
ajorgih3 4:697e1120f821 621 draw_snake_head(snake.head_pi, snake.head_pj);
ajorgih3 4:697e1120f821 622
ajorgih3 4:697e1120f821 623 snake.tail_x = snake.body_px;
ajorgih3 4:697e1120f821 624 snake.tail_y = snake.body_py;
ajorgih3 4:697e1120f821 625 snake.body_x = snake.head_px;
ajorgih3 4:697e1120f821 626 snake.body_y = snake.head_py;
ajorgih3 4:697e1120f821 627 snake.head_x += 0;
ajorgih3 4:697e1120f821 628 snake.head_y -= 0;
ajorgih3 4:697e1120f821 629 }
ajorgih3 4:697e1120f821 630 }
ajorgih3 4:697e1120f821 631
ajorgih3 3:bb6f73642f01 632 if ((snake.head_pj == snake.tail_pj) && (snake.body_pj == snake.tail_pj)) {
ajorgih3 3:bb6f73642f01 633 previousState = GO_RIGHT;
ajorgih3 3:bb6f73642f01 634 }
ajorgih3 3:bb6f73642f01 635
ajorgih3 3:bb6f73642f01 636 wait(0.1);
ajorgih3 3:bb6f73642f01 637 }
ajorgih3 3:bb6f73642f01 638
ajorgih3 3:bb6f73642f01 639 void go_left() {
ajorgih3 4:697e1120f821 640
ajorgih3 4:697e1120f821 641 MapItem* leftHead = get_west(snake.head_x, snake.head_y);
ajorgih3 4:697e1120f821 642
ajorgih3 4:697e1120f821 643 if (previousState == GO_LEFT && leftHead->walkable) {
ajorgih3 3:bb6f73642f01 644 snake.head_x -= 1;
ajorgih3 4:697e1120f821 645 snake.head_y += 0;
ajorgih3 3:bb6f73642f01 646 snake.body_x = snake.head_px;
ajorgih3 3:bb6f73642f01 647 snake.tail_x = snake.body_px;
ajorgih3 3:bb6f73642f01 648 snake.body_y = snake.head_py;
ajorgih3 4:697e1120f821 649 snake.tail_y = snake.body_py;
ajorgih3 4:697e1120f821 650 previousState = GO_LEFT;
ajorgih3 4:697e1120f821 651 }
ajorgih3 4:697e1120f821 652 if (previousState == GO_UP) {
ajorgih3 4:697e1120f821 653 if (previousState == GO_UP && (snake.head_pj != snake.body_pj)) {
ajorgih3 4:697e1120f821 654 draw_nothing(snake.tail_pi, snake.tail_pj);
ajorgih3 4:697e1120f821 655 draw_nothing(snake.body_pi, snake.body_pj);
ajorgih3 4:697e1120f821 656 draw_nothing(snake.head_pi, snake.head_pj);
ajorgih3 4:697e1120f821 657
ajorgih3 4:697e1120f821 658 snake.body_pi = snake.head_pi + 11;
ajorgih3 4:697e1120f821 659 snake.body_pj = snake.head_pj;
ajorgih3 4:697e1120f821 660 draw_snake_body(snake.body_pi, snake.body_pj);
ajorgih3 4:697e1120f821 661 snake.tail_pi = snake.body_pi;
ajorgih3 4:697e1120f821 662 snake.tail_pj = snake.body_pj + 11;
ajorgih3 4:697e1120f821 663 draw_snake_tail(snake.tail_pi, snake.tail_pj);
ajorgih3 4:697e1120f821 664 snake.head_pi = snake.head_pi;
ajorgih3 4:697e1120f821 665 snake.head_pj = snake.head_pj;
ajorgih3 4:697e1120f821 666 draw_snake_head(snake.head_pi, snake.head_pj);
ajorgih3 4:697e1120f821 667
ajorgih3 4:697e1120f821 668 snake.tail_x = snake.body_px;
ajorgih3 4:697e1120f821 669 snake.tail_y = snake.body_py;
ajorgih3 4:697e1120f821 670 snake.body_x = snake.head_px;
ajorgih3 4:697e1120f821 671 snake.body_y = snake.head_py;
ajorgih3 4:697e1120f821 672 snake.head_x -= 1;
ajorgih3 4:697e1120f821 673 snake.head_y -= 0;
ajorgih3 4:697e1120f821 674 }
ajorgih3 4:697e1120f821 675
ajorgih3 4:697e1120f821 676 else {
ajorgih3 4:697e1120f821 677 draw_nothing(snake.tail_pi, snake.tail_pj);
ajorgih3 4:697e1120f821 678 draw_nothing(snake.body_pi, snake.body_pj);
ajorgih3 4:697e1120f821 679 draw_nothing(snake.head_pi, snake.head_pj);
ajorgih3 4:697e1120f821 680
ajorgih3 4:697e1120f821 681 snake.body_pi = snake.body_pi;
ajorgih3 4:697e1120f821 682 snake.body_pj = snake.body_pj;
ajorgih3 4:697e1120f821 683 draw_snake_body(snake.body_pi, snake.body_pj);
ajorgih3 4:697e1120f821 684 snake.tail_pi = snake.body_pi + 11;
ajorgih3 4:697e1120f821 685 snake.tail_pj = snake.body_pj;
ajorgih3 4:697e1120f821 686 draw_snake_tail(snake.tail_pi, snake.tail_pj);
ajorgih3 4:697e1120f821 687 snake.head_pi = snake.head_pi;
ajorgih3 4:697e1120f821 688 snake.head_pj = snake.head_pj;
ajorgih3 4:697e1120f821 689 draw_snake_head(snake.head_pi, snake.head_pj);
ajorgih3 4:697e1120f821 690
ajorgih3 4:697e1120f821 691 snake.tail_x = snake.body_px;
ajorgih3 4:697e1120f821 692 snake.tail_y = snake.body_py;
ajorgih3 4:697e1120f821 693 snake.body_x = snake.head_px;
ajorgih3 4:697e1120f821 694 snake.body_y = snake.head_py;
ajorgih3 4:697e1120f821 695 snake.head_x += 0;
ajorgih3 4:697e1120f821 696 snake.head_y -= 0;
ajorgih3 4:697e1120f821 697 }
ajorgih3 4:697e1120f821 698 }
ajorgih3 4:697e1120f821 699
ajorgih3 4:697e1120f821 700 if (previousState == GO_DOWN) {
ajorgih3 4:697e1120f821 701 if (previousState == GO_DOWN && (snake.head_pj != snake.body_pj)) {
ajorgih3 4:697e1120f821 702 draw_nothing(snake.tail_pi, snake.tail_pj);
ajorgih3 4:697e1120f821 703 draw_nothing(snake.body_pi, snake.body_pj);
ajorgih3 4:697e1120f821 704 draw_nothing(snake.head_pi, snake.head_pj);
ajorgih3 4:697e1120f821 705
ajorgih3 4:697e1120f821 706 snake.body_pi = snake.head_pi + 11;
ajorgih3 4:697e1120f821 707 snake.body_pj = snake.head_pj;
ajorgih3 4:697e1120f821 708 draw_snake_body(snake.body_pi, snake.body_pj);
ajorgih3 4:697e1120f821 709 snake.tail_pi = snake.body_pi;
ajorgih3 4:697e1120f821 710 snake.tail_pj = snake.body_pj - 11;
ajorgih3 4:697e1120f821 711 draw_snake_tail(snake.tail_pi, snake.tail_pj);
ajorgih3 4:697e1120f821 712 snake.head_pi = snake.head_pi;
ajorgih3 4:697e1120f821 713 snake.head_pj = snake.head_pj;
ajorgih3 4:697e1120f821 714 draw_snake_head(snake.head_pi, snake.head_pj);
ajorgih3 4:697e1120f821 715
ajorgih3 4:697e1120f821 716 snake.tail_x = snake.body_px;
ajorgih3 4:697e1120f821 717 snake.tail_y = snake.body_py;
ajorgih3 4:697e1120f821 718 snake.body_x = snake.head_px;
ajorgih3 4:697e1120f821 719 snake.body_y = snake.head_py;
ajorgih3 4:697e1120f821 720 snake.head_x -= 1;
ajorgih3 4:697e1120f821 721 snake.head_y -= 0;
ajorgih3 4:697e1120f821 722 }
ajorgih3 4:697e1120f821 723
ajorgih3 4:697e1120f821 724 else {
ajorgih3 4:697e1120f821 725 draw_nothing(snake.tail_pi, snake.tail_pj);
ajorgih3 4:697e1120f821 726 draw_nothing(snake.body_pi, snake.body_pj);
ajorgih3 4:697e1120f821 727 draw_nothing(snake.head_pi, snake.head_pj);
ajorgih3 4:697e1120f821 728
ajorgih3 4:697e1120f821 729 snake.body_pi = snake.body_pi;
ajorgih3 4:697e1120f821 730 snake.body_pj = snake.body_pj;
ajorgih3 4:697e1120f821 731 draw_snake_body(snake.body_pi, snake.body_pj);
ajorgih3 4:697e1120f821 732 snake.tail_pi = snake.body_pi + 11;
ajorgih3 4:697e1120f821 733 snake.tail_pj = snake.body_pj;
ajorgih3 4:697e1120f821 734 draw_snake_tail(snake.tail_pi, snake.tail_pj);
ajorgih3 4:697e1120f821 735 snake.head_pi = snake.head_pi;
ajorgih3 4:697e1120f821 736 snake.head_pj = snake.head_pj;
ajorgih3 4:697e1120f821 737 draw_snake_head(snake.head_pi, snake.head_pj);
ajorgih3 4:697e1120f821 738
ajorgih3 4:697e1120f821 739 snake.tail_x = snake.body_px;
ajorgih3 4:697e1120f821 740 snake.tail_y = snake.body_py;
ajorgih3 4:697e1120f821 741 snake.body_x = snake.head_px;
ajorgih3 4:697e1120f821 742 snake.body_y = snake.head_py;
ajorgih3 4:697e1120f821 743 snake.head_x += 0;
ajorgih3 4:697e1120f821 744 snake.head_y -= 0;
ajorgih3 4:697e1120f821 745 }
ajorgih3 4:697e1120f821 746 }
ajorgih3 4:697e1120f821 747
ajorgih3 4:697e1120f821 748 if ((snake.head_pj == snake.tail_pj) && (snake.body_pj == snake.tail_pj)) {
ajorgih3 4:697e1120f821 749 previousState = GO_LEFT;
ajorgih3 4:697e1120f821 750 }
ajorgih3 4:697e1120f821 751
ajorgih3 3:bb6f73642f01 752 }
ajorgih3 3:bb6f73642f01 753
ajorgih3 3:bb6f73642f01 754 void go_up() {
ajorgih3 3:bb6f73642f01 755
ajorgih3 3:bb6f73642f01 756 if (previousState == GO_UP) {
ajorgih3 3:bb6f73642f01 757 snake.head_x += 0;
ajorgih3 3:bb6f73642f01 758 snake.head_y -= 1;
ajorgih3 3:bb6f73642f01 759 snake.body_x = snake.head_px;
ajorgih3 3:bb6f73642f01 760 snake.tail_x = snake.body_px;
ajorgih3 3:bb6f73642f01 761 snake.body_y = snake.head_py;
ajorgih3 3:bb6f73642f01 762 snake.tail_y = snake.body_py;
ajorgih3 3:bb6f73642f01 763 }
ajorgih3 3:bb6f73642f01 764
ajorgih3 3:bb6f73642f01 765 if (previousState == 0 || previousState == GO_RIGHT) {
ajorgih3 3:bb6f73642f01 766 if (snake.head_pi != snake.body_pi) {
ajorgih3 3:bb6f73642f01 767 draw_nothing(snake.tail_pi, snake.tail_pj);
ajorgih3 3:bb6f73642f01 768 draw_nothing(snake.body_pi, snake.body_pj);
ajorgih3 3:bb6f73642f01 769 draw_nothing(snake.head_pi, snake.head_pj);
ajorgih3 3:bb6f73642f01 770 snake.body_pi = snake.head_pi;
ajorgih3 3:bb6f73642f01 771 snake.body_pj = snake.head_pj + 11;
ajorgih3 3:bb6f73642f01 772 draw_snake_body(snake.body_pi, snake.body_pj);
ajorgih3 3:bb6f73642f01 773 snake.tail_pi = snake.body_pi - 11;
ajorgih3 3:bb6f73642f01 774 snake.tail_pj = snake.body_pj;
ajorgih3 3:bb6f73642f01 775 draw_snake_tail(snake.tail_pi, snake.tail_pj);
ajorgih3 3:bb6f73642f01 776 snake.head_pi = snake.head_pi;
ajorgih3 3:bb6f73642f01 777 snake.head_pj = snake.head_pj;
ajorgih3 3:bb6f73642f01 778 draw_snake_head(snake.head_pi, snake.head_pj);
ajorgih3 3:bb6f73642f01 779 snake.tail_x = snake.body_px;
ajorgih3 3:bb6f73642f01 780 snake.tail_y = snake.body_py;
ajorgih3 3:bb6f73642f01 781 snake.body_x = snake.head_px;
ajorgih3 3:bb6f73642f01 782 snake.body_y = snake.head_py;
ajorgih3 3:bb6f73642f01 783 snake.head_x += 0;
ajorgih3 4:697e1120f821 784 snake.head_y -= 1;
ajorgih3 3:bb6f73642f01 785 thisState = NOT_UP;
ajorgih3 3:bb6f73642f01 786 }
ajorgih3 3:bb6f73642f01 787 else {
ajorgih3 3:bb6f73642f01 788 draw_nothing(snake.tail_pi, snake.tail_pj);
ajorgih3 3:bb6f73642f01 789 draw_nothing(snake.body_pi, snake.body_pj);
ajorgih3 3:bb6f73642f01 790 draw_nothing(snake.head_pi, snake.head_pj);
ajorgih3 3:bb6f73642f01 791 snake.body_pi = snake.body_pi;
ajorgih3 3:bb6f73642f01 792 snake.body_pj = snake.body_pj;
ajorgih3 3:bb6f73642f01 793 draw_snake_body(snake.body_pi, snake.body_pj);
ajorgih3 3:bb6f73642f01 794 snake.tail_pi = snake.body_pi;
ajorgih3 3:bb6f73642f01 795 snake.tail_pj = snake.body_pj + 11;
ajorgih3 3:bb6f73642f01 796 draw_snake_tail(snake.tail_pi, snake.tail_pj);
ajorgih3 3:bb6f73642f01 797 snake.head_pi = snake.head_pi;
ajorgih3 3:bb6f73642f01 798 snake.head_pj = snake.head_pj;
ajorgih3 3:bb6f73642f01 799 draw_snake_head(snake.head_pi, snake.head_pj);
ajorgih3 3:bb6f73642f01 800 snake.tail_x = snake.body_px;
ajorgih3 3:bb6f73642f01 801 snake.tail_y = snake.body_py;
ajorgih3 3:bb6f73642f01 802 snake.body_x = snake.head_px;
ajorgih3 3:bb6f73642f01 803 snake.body_y = snake.head_py;
ajorgih3 3:bb6f73642f01 804 snake.head_x += 0;
ajorgih3 3:bb6f73642f01 805 snake.head_y -= 0;
ajorgih3 3:bb6f73642f01 806 }
ajorgih3 3:bb6f73642f01 807
ajorgih3 3:bb6f73642f01 808 }
ajorgih3 3:bb6f73642f01 809
ajorgih3 4:697e1120f821 810 if (previousState == 0 || previousState == GO_LEFT) {
ajorgih3 4:697e1120f821 811 if (snake.head_pi != snake.body_pi) {
ajorgih3 4:697e1120f821 812 draw_nothing(snake.tail_pi, snake.tail_pj);
ajorgih3 4:697e1120f821 813 draw_nothing(snake.body_pi, snake.body_pj);
ajorgih3 4:697e1120f821 814 draw_nothing(snake.head_pi, snake.head_pj);
ajorgih3 4:697e1120f821 815 snake.body_pi = snake.head_pi;
ajorgih3 4:697e1120f821 816 snake.body_pj = snake.head_pj + 11;
ajorgih3 4:697e1120f821 817 draw_snake_body(snake.body_pi, snake.body_pj);
ajorgih3 4:697e1120f821 818 snake.tail_pi = snake.body_pi + 11;
ajorgih3 4:697e1120f821 819 snake.tail_pj = snake.body_pj;
ajorgih3 4:697e1120f821 820 draw_snake_tail(snake.tail_pi, snake.tail_pj);
ajorgih3 4:697e1120f821 821 snake.head_pi = snake.head_pi;
ajorgih3 4:697e1120f821 822 snake.head_pj = snake.head_pj;
ajorgih3 4:697e1120f821 823 draw_snake_head(snake.head_pi, snake.head_pj);
ajorgih3 4:697e1120f821 824 snake.tail_x = snake.body_px;
ajorgih3 4:697e1120f821 825 snake.tail_y = snake.body_py;
ajorgih3 4:697e1120f821 826 snake.body_x = snake.head_px;
ajorgih3 4:697e1120f821 827 snake.body_y = snake.head_py;
ajorgih3 4:697e1120f821 828 snake.head_x += 0;
ajorgih3 4:697e1120f821 829 snake.head_y -= 1;
ajorgih3 4:697e1120f821 830 thisState = NOT_UP;
ajorgih3 4:697e1120f821 831 }
ajorgih3 4:697e1120f821 832
ajorgih3 4:697e1120f821 833 else {
ajorgih3 4:697e1120f821 834 draw_nothing(snake.tail_pi, snake.tail_pj);
ajorgih3 4:697e1120f821 835 draw_nothing(snake.body_pi, snake.body_pj);
ajorgih3 4:697e1120f821 836 draw_nothing(snake.head_pi, snake.head_pj);
ajorgih3 4:697e1120f821 837 snake.body_pi = snake.body_pi;
ajorgih3 4:697e1120f821 838 snake.body_pj = snake.body_pj;
ajorgih3 4:697e1120f821 839 draw_snake_body(snake.body_pi, snake.body_pj);
ajorgih3 4:697e1120f821 840 snake.tail_pi = snake.body_pi;
ajorgih3 4:697e1120f821 841 snake.tail_pj = snake.body_pj + 11;
ajorgih3 4:697e1120f821 842 draw_snake_tail(snake.tail_pi, snake.tail_pj);
ajorgih3 4:697e1120f821 843 snake.head_pi = snake.head_pi;
ajorgih3 4:697e1120f821 844 snake.head_pj = snake.head_pj;
ajorgih3 4:697e1120f821 845 draw_snake_head(snake.head_pi, snake.head_pj);
ajorgih3 4:697e1120f821 846 snake.tail_x = snake.body_px;
ajorgih3 4:697e1120f821 847 snake.tail_y = snake.body_py;
ajorgih3 4:697e1120f821 848 snake.body_x = snake.head_px;
ajorgih3 4:697e1120f821 849 snake.body_y = snake.head_py;
ajorgih3 4:697e1120f821 850 snake.head_x += 0;
ajorgih3 4:697e1120f821 851 snake.head_y -= 0;
ajorgih3 4:697e1120f821 852 }
ajorgih3 4:697e1120f821 853
ajorgih3 4:697e1120f821 854 }
ajorgih3 4:697e1120f821 855
ajorgih3 3:bb6f73642f01 856 if ((snake.head_pi == snake.tail_pi) && (snake.body_pi == snake.tail_pi)) {
ajorgih3 3:bb6f73642f01 857 previousState = GO_UP;
ajorgih3 3:bb6f73642f01 858 }
ajorgih3 3:bb6f73642f01 859
ajorgih3 3:bb6f73642f01 860 wait(0.1);
ajorgih3 3:bb6f73642f01 861 }
ajorgih3 3:bb6f73642f01 862
ajorgih3 3:bb6f73642f01 863 void go_down() {
ajorgih3 3:bb6f73642f01 864
ajorgih3 3:bb6f73642f01 865 if (previousState == GO_DOWN) {
ajorgih3 3:bb6f73642f01 866 snake.head_x += 0;
ajorgih3 3:bb6f73642f01 867 snake.head_y += 1;
ajorgih3 3:bb6f73642f01 868 snake.body_x = snake.head_px;
ajorgih3 3:bb6f73642f01 869 snake.tail_x = snake.body_px;
ajorgih3 3:bb6f73642f01 870 snake.body_y = snake.head_py;
ajorgih3 3:bb6f73642f01 871 snake.tail_y = snake.body_py;
ajorgih3 3:bb6f73642f01 872 }
ajorgih3 3:bb6f73642f01 873
ajorgih3 3:bb6f73642f01 874 if (previousState == 0 || previousState == GO_RIGHT) {
ajorgih3 3:bb6f73642f01 875 if (snake.head_pi != snake.body_pi) {
ajorgih3 3:bb6f73642f01 876 draw_nothing(snake.tail_pi, snake.tail_pj);
ajorgih3 3:bb6f73642f01 877 draw_nothing(snake.body_pi, snake.body_pj);
ajorgih3 3:bb6f73642f01 878 draw_nothing(snake.head_pi, snake.head_pj);
ajorgih3 3:bb6f73642f01 879 snake.body_pi = snake.head_pi;
ajorgih3 3:bb6f73642f01 880 snake.body_pj = snake.head_pj - 11;
ajorgih3 3:bb6f73642f01 881 draw_snake_body(snake.body_pi, snake.body_pj);
ajorgih3 3:bb6f73642f01 882 snake.tail_pi = snake.body_pi - 11;
ajorgih3 3:bb6f73642f01 883 snake.tail_pj = snake.body_pj;
ajorgih3 3:bb6f73642f01 884 draw_snake_tail(snake.tail_pi, snake.tail_pj);
ajorgih3 3:bb6f73642f01 885 snake.head_pi = snake.head_pi;
ajorgih3 3:bb6f73642f01 886 snake.head_pj = snake.head_pj;
ajorgih3 3:bb6f73642f01 887 draw_snake_head(snake.head_pi, snake.head_pj);
ajorgih3 3:bb6f73642f01 888 snake.tail_x = snake.body_px;
ajorgih3 3:bb6f73642f01 889 snake.tail_y = snake.body_py;
ajorgih3 3:bb6f73642f01 890 snake.body_x = snake.head_px;
ajorgih3 3:bb6f73642f01 891 snake.body_y = snake.head_py;
ajorgih3 3:bb6f73642f01 892 snake.head_x += 0;
ajorgih3 4:697e1120f821 893 snake.head_y += 1;
ajorgih3 4:697e1120f821 894 }
ajorgih3 4:697e1120f821 895 else {
ajorgih3 4:697e1120f821 896 draw_nothing(snake.tail_pi, snake.tail_pj);
ajorgih3 4:697e1120f821 897 draw_nothing(snake.body_pi, snake.body_pj);
ajorgih3 4:697e1120f821 898 draw_nothing(snake.head_pi, snake.head_pj);
ajorgih3 4:697e1120f821 899 snake.body_pi = snake.body_pi;
ajorgih3 4:697e1120f821 900 snake.body_pj = snake.body_pj;
ajorgih3 4:697e1120f821 901 draw_snake_body(snake.body_pi, snake.body_pj);
ajorgih3 4:697e1120f821 902 snake.tail_pi = snake.body_pi;
ajorgih3 4:697e1120f821 903 snake.tail_pj = snake.body_pj - 11;
ajorgih3 4:697e1120f821 904 draw_snake_tail(snake.tail_pi, snake.tail_pj);
ajorgih3 4:697e1120f821 905 snake.head_pi = snake.head_pi;
ajorgih3 4:697e1120f821 906 snake.head_pj = snake.head_pj;
ajorgih3 4:697e1120f821 907 draw_snake_head(snake.head_pi, snake.head_pj);
ajorgih3 4:697e1120f821 908 snake.tail_x = snake.body_px;
ajorgih3 4:697e1120f821 909 snake.tail_y = snake.body_py;
ajorgih3 4:697e1120f821 910 snake.body_x = snake.head_px;
ajorgih3 4:697e1120f821 911 snake.body_y = snake.head_py;
ajorgih3 4:697e1120f821 912 snake.head_x += 0;
ajorgih3 3:bb6f73642f01 913 snake.head_y -= 0;
ajorgih3 3:bb6f73642f01 914 }
ajorgih3 4:697e1120f821 915 }
ajorgih3 4:697e1120f821 916
ajorgih3 4:697e1120f821 917 if (previousState == 0 || previousState == GO_LEFT) {
ajorgih3 4:697e1120f821 918 if (snake.head_pi != snake.body_pi) {
ajorgih3 4:697e1120f821 919 draw_nothing(snake.tail_pi, snake.tail_pj);
ajorgih3 4:697e1120f821 920 draw_nothing(snake.body_pi, snake.body_pj);
ajorgih3 4:697e1120f821 921 draw_nothing(snake.head_pi, snake.head_pj);
ajorgih3 4:697e1120f821 922 snake.body_pi = snake.head_pi;
ajorgih3 4:697e1120f821 923 snake.body_pj = snake.head_pj - 11;
ajorgih3 4:697e1120f821 924 draw_snake_body(snake.body_pi, snake.body_pj);
ajorgih3 4:697e1120f821 925 snake.tail_pi = snake.body_pi + 11;
ajorgih3 4:697e1120f821 926 snake.tail_pj = snake.body_pj;
ajorgih3 4:697e1120f821 927 draw_snake_tail(snake.tail_pi, snake.tail_pj);
ajorgih3 4:697e1120f821 928 snake.head_pi = snake.head_pi;
ajorgih3 4:697e1120f821 929 snake.head_pj = snake.head_pj;
ajorgih3 4:697e1120f821 930 draw_snake_head(snake.head_pi, snake.head_pj);
ajorgih3 4:697e1120f821 931 snake.tail_x = snake.body_px;
ajorgih3 4:697e1120f821 932 snake.tail_y = snake.body_py;
ajorgih3 4:697e1120f821 933 snake.body_x = snake.head_px;
ajorgih3 4:697e1120f821 934 snake.body_y = snake.head_py;
ajorgih3 4:697e1120f821 935 snake.head_x += 0;
ajorgih3 4:697e1120f821 936 snake.head_y += 1;
ajorgih3 4:697e1120f821 937 }
ajorgih3 3:bb6f73642f01 938 else {
ajorgih3 3:bb6f73642f01 939 draw_nothing(snake.tail_pi, snake.tail_pj);
ajorgih3 3:bb6f73642f01 940 draw_nothing(snake.body_pi, snake.body_pj);
ajorgih3 3:bb6f73642f01 941 draw_nothing(snake.head_pi, snake.head_pj);
ajorgih3 3:bb6f73642f01 942 snake.body_pi = snake.body_pi;
ajorgih3 3:bb6f73642f01 943 snake.body_pj = snake.body_pj;
ajorgih3 3:bb6f73642f01 944 draw_snake_body(snake.body_pi, snake.body_pj);
ajorgih3 3:bb6f73642f01 945 snake.tail_pi = snake.body_pi;
ajorgih3 3:bb6f73642f01 946 snake.tail_pj = snake.body_pj - 11;
ajorgih3 3:bb6f73642f01 947 draw_snake_tail(snake.tail_pi, snake.tail_pj);
ajorgih3 3:bb6f73642f01 948 snake.head_pi = snake.head_pi;
ajorgih3 3:bb6f73642f01 949 snake.head_pj = snake.head_pj;
ajorgih3 3:bb6f73642f01 950 draw_snake_head(snake.head_pi, snake.head_pj);
ajorgih3 3:bb6f73642f01 951 snake.tail_x = snake.body_px;
ajorgih3 3:bb6f73642f01 952 snake.tail_y = snake.body_py;
ajorgih3 3:bb6f73642f01 953 snake.body_x = snake.head_px;
ajorgih3 3:bb6f73642f01 954 snake.body_y = snake.head_py;
ajorgih3 3:bb6f73642f01 955 snake.head_x += 0;
ajorgih3 3:bb6f73642f01 956 snake.head_y -= 0;
ajorgih3 3:bb6f73642f01 957 }
ajorgih3 3:bb6f73642f01 958 }
ajorgih3 3:bb6f73642f01 959
ajorgih3 3:bb6f73642f01 960 if ((snake.head_pi == snake.tail_pi) && (snake.body_pi == snake.tail_pi)) {
ajorgih3 3:bb6f73642f01 961 previousState = GO_DOWN;
ajorgih3 3:bb6f73642f01 962
ajorgih3 3:bb6f73642f01 963 wait(0.1);
ajorgih3 3:bb6f73642f01 964 }
ajorgih3 3:bb6f73642f01 965 }
ajorgih3 3:bb6f73642f01 966
ajorgih3 3:bb6f73642f01 967 int update_game(int action)
ajorgih3 3:bb6f73642f01 968 {
ajorgih3 3:bb6f73642f01 969 snake.head_px = snake.head_x;
ajorgih3 3:bb6f73642f01 970 snake.body_px = snake.body_x;
ajorgih3 3:bb6f73642f01 971 snake.tail_px = snake.tail_x;
ajorgih3 3:bb6f73642f01 972 snake.head_py = snake.head_y;
ajorgih3 3:bb6f73642f01 973 snake.body_py = snake.body_y;
ajorgih3 3:bb6f73642f01 974 snake.tail_py = snake.head_y;
ajorgih3 3:bb6f73642f01 975
ajorgih3 3:bb6f73642f01 976 switch(action) {
ajorgih3 3:bb6f73642f01 977
ajorgih3 3:bb6f73642f01 978 case GO_RIGHT:
ajorgih3 3:bb6f73642f01 979 nextHead = get_east(snake.head_px, snake.head_py);
ajorgih3 3:bb6f73642f01 980 pc.printf("GO RIGHT\n");
ajorgih3 3:bb6f73642f01 981 if (nextHead->walkable) {
ajorgih3 4:697e1120f821 982 pc.printf("Before:");
ajorgih3 4:697e1120f821 983 pc.printf("head_x: %d, head_y: %d\n", snake.head_x, snake.head_y);
ajorgih3 4:697e1120f821 984 pc.printf("body_x: %d, body_y: %d\n", snake.body_x, snake.body_y);
ajorgih3 4:697e1120f821 985 pc.printf("tail_x: %d, tail_y: %d\n", snake.tail_x, snake.tail_y);
ajorgih3 4:697e1120f821 986 pc.printf("head_pi: %d, head_pj: %d\n", snake.head_pi, snake.head_pj);
ajorgih3 4:697e1120f821 987 pc.printf("body_pi: %d, body_pj: %d\n", snake.body_pi, snake.body_pj);
ajorgih3 4:697e1120f821 988 pc.printf("tail_pi: %d, tail_pj: %d\n", snake.tail_pi, snake.tail_pj);
ajorgih3 3:bb6f73642f01 989 go_right();
ajorgih3 4:697e1120f821 990 draw_snake_head(snake.head_pi, snake.head_pj);
ajorgih3 4:697e1120f821 991 draw_snake_body(snake.body_pi, snake.body_pj);
ajorgih3 4:697e1120f821 992 draw_snake_tail(snake.tail_pi, snake.tail_pj);
ajorgih3 4:697e1120f821 993 updateY();
ajorgih3 4:697e1120f821 994 pc.printf("After:");
ajorgih3 4:697e1120f821 995 pc.printf("head_x: %d, head_y: %d\n", snake.head_x, snake.head_y);
ajorgih3 4:697e1120f821 996 pc.printf("body_x: %d, body_y: %d\n", snake.body_x, snake.body_y);
ajorgih3 4:697e1120f821 997 pc.printf("tail_x: %d, tail_y: %d\n", snake.tail_x, snake.tail_y);
ajorgih3 4:697e1120f821 998 pc.printf("head_pi: %d, head_pj: %d\n", snake.head_pi, snake.head_pj);
ajorgih3 4:697e1120f821 999 pc.printf("body_pi: %d, body_pj: %d\n", snake.body_pi, snake.body_pj);
ajorgih3 4:697e1120f821 1000 pc.printf("tail_pi: %d, tail_pj: %d\n", snake.tail_pi, snake.tail_pj);
ajorgih3 3:bb6f73642f01 1001 }
ajorgih3 4:697e1120f821 1002
ajorgih3 3:bb6f73642f01 1003 if (!nextHead->walkable) {
ajorgih3 4:697e1120f821 1004 if (lives == 0) {
ajorgih3 3:bb6f73642f01 1005 draw_game(GAME_OVER);
ajorgih3 4:697e1120f821 1006 }
ajorgih3 4:697e1120f821 1007 else {
ajorgih3 4:697e1120f821 1008 lives--;
ajorgih3 4:697e1120f821 1009 }
ajorgih3 3:bb6f73642f01 1010 }
ajorgih3 4:697e1120f821 1011
ajorgih3 4:697e1120f821 1012 if (nextHead->type == LIFE) {
ajorgih3 4:697e1120f821 1013 lives++;
ajorgih3 4:697e1120f821 1014 map_erase(snake.head_x, snake.head_y);
ajorgih3 4:697e1120f821 1015 add_nothing(snake.head_x, snake.head_y);
ajorgih3 4:697e1120f821 1016 }
ajorgih3 4:697e1120f821 1017
ajorgih3 4:697e1120f821 1018 if (nextHead->type == GOODIE) {
ajorgih3 4:697e1120f821 1019 score++;
ajorgih3 4:697e1120f821 1020 map_erase(snake.head_x, snake.head_y);
ajorgih3 4:697e1120f821 1021 add_nothing(snake.head_x, snake.head_y);
ajorgih3 4:697e1120f821 1022 }
ajorgih3 4:697e1120f821 1023
ajorgih3 4:697e1120f821 1024 if (nextHead->type == SNOWFLAKE) {
ajorgih3 4:697e1120f821 1025 wait(5);
ajorgih3 4:697e1120f821 1026 map_erase(snake.head_x, snake.head_y);
ajorgih3 4:697e1120f821 1027 add_nothing(snake.head_x, snake.head_y);
ajorgih3 4:697e1120f821 1028 }
ajorgih3 4:697e1120f821 1029
ajorgih3 4:697e1120f821 1030 if (nextHead->type == SWORD) {
ajorgih3 4:697e1120f821 1031 if (lives == 0) {
ajorgih3 4:697e1120f821 1032 draw_game(GAME_OVER);
ajorgih3 4:697e1120f821 1033 }
ajorgih3 4:697e1120f821 1034 else {
ajorgih3 4:697e1120f821 1035 lives--;
ajorgih3 4:697e1120f821 1036 }
ajorgih3 4:697e1120f821 1037 map_erase(snake.head_x, snake.head_y);
ajorgih3 4:697e1120f821 1038 add_nothing(snake.head_x, snake.head_y);
ajorgih3 4:697e1120f821 1039 }
ajorgih3 4:697e1120f821 1040
ajorgih3 4:697e1120f821 1041 if (nextHead->type == ARROWUP) {
ajorgih3 4:697e1120f821 1042 map_erase(snake.head_x, snake.head_y);
ajorgih3 4:697e1120f821 1043 add_nothing(snake.head_x, snake.head_y);
ajorgih3 4:697e1120f821 1044 go_up();
ajorgih3 4:697e1120f821 1045 go_up();
ajorgih3 4:697e1120f821 1046 go_up();
ajorgih3 4:697e1120f821 1047 go_up();
ajorgih3 4:697e1120f821 1048 go_up();
ajorgih3 4:697e1120f821 1049 go_up();
ajorgih3 4:697e1120f821 1050 }
ajorgih3 4:697e1120f821 1051 if (nextHead->type == ARROWDOWN) {
ajorgih3 4:697e1120f821 1052 map_erase(snake.head_x, snake.head_y);
ajorgih3 4:697e1120f821 1053 add_nothing(snake.head_x, snake.head_y);
ajorgih3 4:697e1120f821 1054 go_down();
ajorgih3 4:697e1120f821 1055 go_down();
ajorgih3 4:697e1120f821 1056 go_down();
ajorgih3 4:697e1120f821 1057 go_down();
ajorgih3 4:697e1120f821 1058 go_down();
ajorgih3 4:697e1120f821 1059 go_down();
ajorgih3 4:697e1120f821 1060 }
ajorgih3 4:697e1120f821 1061
ajorgih3 3:bb6f73642f01 1062 break;
ajorgih3 3:bb6f73642f01 1063
ajorgih3 3:bb6f73642f01 1064 case GO_LEFT:
ajorgih3 4:697e1120f821 1065 nextHead = get_west(snake.head_px, snake.head_py);
ajorgih3 3:bb6f73642f01 1066 pc.printf("GO LEFT\n");
ajorgih3 3:bb6f73642f01 1067 if (nextHead->walkable) {
ajorgih3 4:697e1120f821 1068 pc.printf("Before:");
ajorgih3 4:697e1120f821 1069 pc.printf("head_x: %d, head_y: %d\n", snake.head_x, snake.head_y);
ajorgih3 4:697e1120f821 1070 pc.printf("body_x: %d, body_y: %d\n", snake.body_x, snake.body_y);
ajorgih3 4:697e1120f821 1071 pc.printf("tail_x: %d, tail_y: %d\n", snake.tail_x, snake.tail_y);
ajorgih3 4:697e1120f821 1072 pc.printf("head_pi: %d, head_pj: %d\n", snake.head_pi, snake.head_pj);
ajorgih3 4:697e1120f821 1073 pc.printf("body_pi: %d, body_pj: %d\n", snake.body_pi, snake.body_pj);
ajorgih3 4:697e1120f821 1074 pc.printf("tail_pi: %d, tail_pj: %d\n", snake.tail_pi, snake.tail_pj);
ajorgih3 3:bb6f73642f01 1075 go_left();
ajorgih3 4:697e1120f821 1076 draw_snake_head(snake.head_pi, snake.head_pj);
ajorgih3 4:697e1120f821 1077 draw_snake_body(snake.body_pi, snake.body_pj);
ajorgih3 4:697e1120f821 1078 draw_snake_tail(snake.tail_pi, snake.tail_pj);
ajorgih3 4:697e1120f821 1079 updateY();
ajorgih3 4:697e1120f821 1080 pc.printf("After:");
ajorgih3 4:697e1120f821 1081 pc.printf("head_x: %d, head_y: %d\n", snake.head_x, snake.head_y);
ajorgih3 4:697e1120f821 1082 pc.printf("body_x: %d, body_y: %d\n", snake.body_x, snake.body_y);
ajorgih3 4:697e1120f821 1083 pc.printf("tail_x: %d, tail_y: %d\n", snake.tail_x, snake.tail_y);
ajorgih3 4:697e1120f821 1084 pc.printf("head_pi: %d, head_pj: %d\n", snake.head_pi, snake.head_pj);
ajorgih3 4:697e1120f821 1085 pc.printf("body_pi: %d, body_pj: %d\n", snake.body_pi, snake.body_pj);
ajorgih3 4:697e1120f821 1086 pc.printf("tail_pi: %d, tail_pj: %d\n", snake.tail_pi, snake.tail_pj);
ajorgih3 4:697e1120f821 1087 }
ajorgih3 4:697e1120f821 1088
ajorgih3 4:697e1120f821 1089 if (!nextHead->walkable) {
ajorgih3 4:697e1120f821 1090 if (lives == 0) {
ajorgih3 4:697e1120f821 1091 draw_game(GAME_OVER);
ajorgih3 4:697e1120f821 1092 }
ajorgih3 4:697e1120f821 1093 else {
ajorgih3 4:697e1120f821 1094 lives--;
ajorgih3 4:697e1120f821 1095 }
ajorgih3 4:697e1120f821 1096 }
ajorgih3 4:697e1120f821 1097
ajorgih3 4:697e1120f821 1098 if (nextHead->type == LIFE) {
ajorgih3 4:697e1120f821 1099 lives++;
ajorgih3 4:697e1120f821 1100 map_erase(snake.head_x, snake.head_y);
ajorgih3 4:697e1120f821 1101 add_nothing(snake.head_x, snake.head_y);
ajorgih3 3:bb6f73642f01 1102 }
ajorgih3 4:697e1120f821 1103
ajorgih3 4:697e1120f821 1104 if (nextHead->type == GOODIE) {
ajorgih3 4:697e1120f821 1105 score++;
ajorgih3 4:697e1120f821 1106 map_erase(snake.head_x, snake.head_y);
ajorgih3 4:697e1120f821 1107 add_nothing(snake.head_x, snake.head_y);
ajorgih3 4:697e1120f821 1108 }
ajorgih3 4:697e1120f821 1109
ajorgih3 4:697e1120f821 1110 if (nextHead->type == SNOWFLAKE) {
ajorgih3 4:697e1120f821 1111 wait(5);
ajorgih3 4:697e1120f821 1112 map_erase(snake.head_x, snake.head_y);
ajorgih3 4:697e1120f821 1113 add_nothing(snake.head_x, snake.head_y);
ajorgih3 4:697e1120f821 1114 }
ajorgih3 4:697e1120f821 1115
ajorgih3 4:697e1120f821 1116 if (nextHead->type == SWORD) {
ajorgih3 4:697e1120f821 1117 if (lives == 0) {
ajorgih3 3:bb6f73642f01 1118 draw_game(GAME_OVER);
ajorgih3 4:697e1120f821 1119 }
ajorgih3 4:697e1120f821 1120 else {
ajorgih3 4:697e1120f821 1121 lives--;
ajorgih3 4:697e1120f821 1122 }
ajorgih3 4:697e1120f821 1123 map_erase(snake.head_x, snake.head_y);
ajorgih3 4:697e1120f821 1124 add_nothing(snake.head_x, snake.head_y);
ajorgih3 3:bb6f73642f01 1125 }
ajorgih3 4:697e1120f821 1126 if (nextHead->type == ARROWUP) {
ajorgih3 4:697e1120f821 1127 map_erase(snake.head_x, snake.head_y);
ajorgih3 4:697e1120f821 1128 add_nothing(snake.head_x, snake.head_y);
ajorgih3 4:697e1120f821 1129 go_up();
ajorgih3 4:697e1120f821 1130 go_up();
ajorgih3 4:697e1120f821 1131 go_up();
ajorgih3 4:697e1120f821 1132 go_up();
ajorgih3 4:697e1120f821 1133 go_up();
ajorgih3 4:697e1120f821 1134 go_up();
ajorgih3 4:697e1120f821 1135 }
ajorgih3 4:697e1120f821 1136 if (nextHead->type == ARROWDOWN) {
ajorgih3 4:697e1120f821 1137 map_erase(snake.head_x, snake.head_y);
ajorgih3 4:697e1120f821 1138 add_nothing(snake.head_x, snake.head_y);
ajorgih3 4:697e1120f821 1139 go_down();
ajorgih3 4:697e1120f821 1140 go_down();
ajorgih3 4:697e1120f821 1141 go_down();
ajorgih3 4:697e1120f821 1142 go_down();
ajorgih3 4:697e1120f821 1143 go_down();
ajorgih3 4:697e1120f821 1144 go_down();
ajorgih3 4:697e1120f821 1145 }
ajorgih3 4:697e1120f821 1146
ajorgih3 3:bb6f73642f01 1147 break;
ajorgih3 3:bb6f73642f01 1148
ajorgih3 3:bb6f73642f01 1149
ajorgih3 3:bb6f73642f01 1150 case GO_UP:
ajorgih3 4:697e1120f821 1151 nextHead = get_north(snake.head_px, snake.head_py);
ajorgih3 3:bb6f73642f01 1152 pc.printf("GO UP\n");
ajorgih3 3:bb6f73642f01 1153 if (nextHead->walkable) {
ajorgih3 4:697e1120f821 1154 pc.printf("Before:");
ajorgih3 4:697e1120f821 1155 pc.printf("head_x: %d, head_y: %d\n", snake.head_x, snake.head_y);
ajorgih3 4:697e1120f821 1156 pc.printf("body_x: %d, body_y: %d\n", snake.body_x, snake.body_y);
ajorgih3 4:697e1120f821 1157 pc.printf("tail_x: %d, tail_y: %d\n", snake.tail_x, snake.tail_y);
ajorgih3 4:697e1120f821 1158 pc.printf("head_pi: %d, head_pj: %d\n", snake.head_pi, snake.head_pj);
ajorgih3 4:697e1120f821 1159 pc.printf("body_pi: %d, body_pj: %d\n", snake.body_pi, snake.body_pj);
ajorgih3 4:697e1120f821 1160 pc.printf("tail_pi: %d, tail_pj: %d\n", snake.tail_pi, snake.tail_pj);
ajorgih3 3:bb6f73642f01 1161 go_up();
ajorgih3 4:697e1120f821 1162 draw_snake_head(snake.head_pi, snake.head_pj);
ajorgih3 4:697e1120f821 1163 draw_snake_body(snake.body_pi, snake.body_pj);
ajorgih3 4:697e1120f821 1164 draw_snake_tail(snake.tail_pi, snake.tail_pj);
ajorgih3 4:697e1120f821 1165 updateY();
ajorgih3 4:697e1120f821 1166 pc.printf("After:");
ajorgih3 4:697e1120f821 1167 pc.printf("head_x: %d, head_y: %d\n", snake.head_x, snake.head_y);
ajorgih3 4:697e1120f821 1168 pc.printf("body_x: %d, body_y: %d\n", snake.body_x, snake.body_y);
ajorgih3 4:697e1120f821 1169 pc.printf("tail_x: %d, tail_y: %d\n", snake.tail_x, snake.tail_y);
ajorgih3 4:697e1120f821 1170 pc.printf("head_pi: %d, head_pj: %d\n", snake.head_pi, snake.head_pj);
ajorgih3 4:697e1120f821 1171 pc.printf("body_pi: %d, body_pj: %d\n", snake.body_pi, snake.body_pj);
ajorgih3 4:697e1120f821 1172 pc.printf("tail_pi: %d, tail_pj: %d\n", snake.tail_pi, snake.tail_pj);
ajorgih3 3:bb6f73642f01 1173 }
ajorgih3 3:bb6f73642f01 1174
ajorgih3 3:bb6f73642f01 1175 if (!nextHead->walkable) {
ajorgih3 4:697e1120f821 1176 if (lives == 0) {
ajorgih3 3:bb6f73642f01 1177 draw_game(GAME_OVER);
ajorgih3 4:697e1120f821 1178 }
ajorgih3 4:697e1120f821 1179 else {
ajorgih3 4:697e1120f821 1180 lives--;
ajorgih3 4:697e1120f821 1181 }
ajorgih3 4:697e1120f821 1182 }
ajorgih3 4:697e1120f821 1183
ajorgih3 4:697e1120f821 1184 if (nextHead->type == LIFE) {
ajorgih3 4:697e1120f821 1185 lives++;
ajorgih3 4:697e1120f821 1186 map_erase(snake.head_x, snake.head_y);
ajorgih3 4:697e1120f821 1187 add_nothing(snake.head_x, snake.head_y);
ajorgih3 4:697e1120f821 1188 }
ajorgih3 4:697e1120f821 1189
ajorgih3 4:697e1120f821 1190 if (nextHead->type == GOODIE) {
ajorgih3 4:697e1120f821 1191 score++;
ajorgih3 4:697e1120f821 1192 map_erase(snake.head_x, snake.head_y);
ajorgih3 4:697e1120f821 1193 add_nothing(snake.head_x, snake.head_y);
ajorgih3 4:697e1120f821 1194 }
ajorgih3 4:697e1120f821 1195
ajorgih3 4:697e1120f821 1196 if (nextHead->type == SNOWFLAKE) {
ajorgih3 4:697e1120f821 1197 wait(5);
ajorgih3 4:697e1120f821 1198 map_erase(snake.head_x, snake.head_y);
ajorgih3 4:697e1120f821 1199 add_nothing(snake.head_x, snake.head_y);
ajorgih3 4:697e1120f821 1200 }
ajorgih3 4:697e1120f821 1201
ajorgih3 4:697e1120f821 1202 if (nextHead->type == SWORD) {
ajorgih3 4:697e1120f821 1203 if (lives == 0) {
ajorgih3 4:697e1120f821 1204 draw_game(GAME_OVER);
ajorgih3 4:697e1120f821 1205 }
ajorgih3 4:697e1120f821 1206 else {
ajorgih3 4:697e1120f821 1207 lives--;
ajorgih3 4:697e1120f821 1208 }
ajorgih3 4:697e1120f821 1209 map_erase(snake.head_x, snake.head_y);
ajorgih3 4:697e1120f821 1210 add_nothing(snake.head_x, snake.head_y);
ajorgih3 4:697e1120f821 1211 }
ajorgih3 4:697e1120f821 1212
ajorgih3 4:697e1120f821 1213 if (nextHead->type == ARROWRIGHT) {
ajorgih3 4:697e1120f821 1214 map_erase(snake.head_x, snake.head_y);
ajorgih3 4:697e1120f821 1215 add_nothing(snake.head_x, snake.head_y);
ajorgih3 4:697e1120f821 1216 go_right();
ajorgih3 4:697e1120f821 1217 go_right();
ajorgih3 4:697e1120f821 1218 go_right();
ajorgih3 4:697e1120f821 1219 go_right();
ajorgih3 4:697e1120f821 1220 go_right();
ajorgih3 4:697e1120f821 1221 go_right();
ajorgih3 4:697e1120f821 1222 }
ajorgih3 4:697e1120f821 1223 if (nextHead->type == ARROWLEFT) {
ajorgih3 4:697e1120f821 1224 map_erase(snake.head_x, snake.head_y);
ajorgih3 4:697e1120f821 1225 add_nothing(snake.head_x, snake.head_y);
ajorgih3 4:697e1120f821 1226 go_left();
ajorgih3 4:697e1120f821 1227 go_left();
ajorgih3 4:697e1120f821 1228 go_left();
ajorgih3 4:697e1120f821 1229 go_left();
ajorgih3 4:697e1120f821 1230 go_left();
ajorgih3 4:697e1120f821 1231 go_left();
ajorgih3 3:bb6f73642f01 1232 }
ajorgih3 3:bb6f73642f01 1233
ajorgih3 3:bb6f73642f01 1234 break;
ajorgih3 3:bb6f73642f01 1235
ajorgih3 3:bb6f73642f01 1236
ajorgih3 3:bb6f73642f01 1237 case GO_DOWN:
ajorgih3 3:bb6f73642f01 1238 nextHead = get_south(snake.head_px, snake.head_py);
ajorgih3 3:bb6f73642f01 1239 pc.printf("GO DOWN\n");
ajorgih3 3:bb6f73642f01 1240 if (nextHead->walkable) {
ajorgih3 4:697e1120f821 1241 pc.printf("Before:");
ajorgih3 4:697e1120f821 1242 pc.printf("head_x: %d, head_y: %d\n", snake.head_x, snake.head_y);
ajorgih3 4:697e1120f821 1243 pc.printf("body_x: %d, body_y: %d\n", snake.body_x, snake.body_y);
ajorgih3 4:697e1120f821 1244 pc.printf("tail_x: %d, tail_y: %d\n", snake.tail_x, snake.tail_y);
ajorgih3 4:697e1120f821 1245 pc.printf("head_pi: %d, head_pj: %d\n", snake.head_pi, snake.head_pj);
ajorgih3 4:697e1120f821 1246 pc.printf("body_pi: %d, body_pj: %d\n", snake.body_pi, snake.body_pj);
ajorgih3 4:697e1120f821 1247 pc.printf("tail_pi: %d, tail_pj: %d\n", snake.tail_pi, snake.tail_pj);
ajorgih3 3:bb6f73642f01 1248 go_down();
ajorgih3 4:697e1120f821 1249 draw_snake_head(snake.head_pi, snake.head_pj);
ajorgih3 4:697e1120f821 1250 draw_snake_body(snake.body_pi, snake.body_pj);
ajorgih3 4:697e1120f821 1251 draw_snake_tail(snake.tail_pi, snake.tail_pj);
ajorgih3 4:697e1120f821 1252 updateY();
ajorgih3 4:697e1120f821 1253 pc.printf("After:");
ajorgih3 4:697e1120f821 1254 pc.printf("head_x: %d, head_y: %d\n", snake.head_x, snake.head_y);
ajorgih3 4:697e1120f821 1255 pc.printf("body_x: %d, body_y: %d\n", snake.body_x, snake.body_y);
ajorgih3 4:697e1120f821 1256 pc.printf("tail_x: %d, tail_y: %d\n", snake.tail_x, snake.tail_y);
ajorgih3 4:697e1120f821 1257 pc.printf("head_pi: %d, head_pj: %d\n", snake.head_pi, snake.head_pj);
ajorgih3 4:697e1120f821 1258 pc.printf("body_pi: %d, body_pj: %d\n", snake.body_pi, snake.body_pj);
ajorgih3 4:697e1120f821 1259 pc.printf("tail_pi: %d, tail_pj: %d\n", snake.tail_pi, snake.tail_pj);
ajorgih3 3:bb6f73642f01 1260 }
ajorgih3 4:697e1120f821 1261 if (!nextHead->walkable) {
ajorgih3 4:697e1120f821 1262 if (lives == 0) {
ajorgih3 4:697e1120f821 1263 draw_game(GAME_OVER);
ajorgih3 4:697e1120f821 1264 }
ajorgih3 4:697e1120f821 1265 else {
ajorgih3 4:697e1120f821 1266 lives--;
ajorgih3 4:697e1120f821 1267 }
ajorgih3 4:697e1120f821 1268 }
ajorgih3 4:697e1120f821 1269
ajorgih3 4:697e1120f821 1270 if (nextHead->type == LIFE) {
ajorgih3 4:697e1120f821 1271 lives++;
ajorgih3 4:697e1120f821 1272 map_erase(snake.head_x, snake.head_y);
ajorgih3 4:697e1120f821 1273 add_nothing(snake.head_x, snake.head_y);
ajorgih3 4:697e1120f821 1274 }
ajorgih3 4:697e1120f821 1275
ajorgih3 4:697e1120f821 1276 if (nextHead->type == GOODIE) {
ajorgih3 4:697e1120f821 1277 score++;
ajorgih3 4:697e1120f821 1278 map_erase(snake.head_x, snake.head_y);
ajorgih3 4:697e1120f821 1279 add_nothing(snake.head_x, snake.head_y);
ajorgih3 4:697e1120f821 1280 }
ajorgih3 4:697e1120f821 1281
ajorgih3 4:697e1120f821 1282 if (nextHead->type == SNOWFLAKE) {
ajorgih3 4:697e1120f821 1283 wait(5);
ajorgih3 4:697e1120f821 1284 map_erase(snake.head_x, snake.head_y);
ajorgih3 4:697e1120f821 1285 add_nothing(snake.head_x, snake.head_y);
ajorgih3 4:697e1120f821 1286 }
ajorgih3 4:697e1120f821 1287
ajorgih3 4:697e1120f821 1288 if (nextHead->type == SWORD) {
ajorgih3 4:697e1120f821 1289 if (lives == 0) {
ajorgih3 4:697e1120f821 1290 draw_game(GAME_OVER);
ajorgih3 4:697e1120f821 1291 }
ajorgih3 4:697e1120f821 1292 else {
ajorgih3 4:697e1120f821 1293 lives--;
ajorgih3 4:697e1120f821 1294 }
ajorgih3 4:697e1120f821 1295 map_erase(snake.head_x, snake.head_y);
ajorgih3 4:697e1120f821 1296 add_nothing(snake.head_x, snake.head_y);
ajorgih3 4:697e1120f821 1297 }
ajorgih3 4:697e1120f821 1298
ajorgih3 4:697e1120f821 1299 if (nextHead->type == ARROWRIGHT) {
ajorgih3 4:697e1120f821 1300 map_erase(snake.head_x, snake.head_y);
ajorgih3 4:697e1120f821 1301 add_nothing(snake.head_x, snake.head_y);
ajorgih3 4:697e1120f821 1302 go_right();
ajorgih3 4:697e1120f821 1303 go_right();
ajorgih3 4:697e1120f821 1304 go_right();
ajorgih3 4:697e1120f821 1305 go_right();
ajorgih3 4:697e1120f821 1306 go_right();
ajorgih3 4:697e1120f821 1307 go_right();
ajorgih3 4:697e1120f821 1308 }
ajorgih3 4:697e1120f821 1309 if (nextHead->type == ARROWLEFT) {
ajorgih3 4:697e1120f821 1310 map_erase(snake.head_x, snake.head_y);
ajorgih3 4:697e1120f821 1311 add_nothing(snake.head_x, snake.head_y);
ajorgih3 4:697e1120f821 1312 go_left();
ajorgih3 4:697e1120f821 1313 go_left();
ajorgih3 4:697e1120f821 1314 go_left();
ajorgih3 4:697e1120f821 1315 go_left();
ajorgih3 4:697e1120f821 1316 go_left();
ajorgih3 4:697e1120f821 1317 go_left();
ajorgih3 4:697e1120f821 1318 }
ajorgih3 4:697e1120f821 1319
ajorgih3 3:bb6f73642f01 1320 break;
ajorgih3 3:bb6f73642f01 1321
ajorgih3 3:bb6f73642f01 1322 case IN_GAME_MENU:
ajorgih3 3:bb6f73642f01 1323 pc.printf("Menu Pressed!");
ajorgih3 3:bb6f73642f01 1324 uLCD.filled_rectangle(0, 0, 255, 255, BLACK);
ajorgih3 3:bb6f73642f01 1325 title_page();
ajorgih3 3:bb6f73642f01 1326 helpful_items();
ajorgih3 3:bb6f73642f01 1327 harmful_items();
ajorgih3 3:bb6f73642f01 1328 main2();
ajorgih3 3:bb6f73642f01 1329 break;
ajorgih3 3:bb6f73642f01 1330
ajorgih3 4:697e1120f821 1331 case HAX:
ajorgih3 4:697e1120f821 1332 lives = 99999999;
ajorgih3 4:697e1120f821 1333 break;
ajorgih3 4:697e1120f821 1334
ajorgih3 3:bb6f73642f01 1335 default: break;
ajorgih3 3:bb6f73642f01 1336 }
ajorgih3 3:bb6f73642f01 1337
ajorgih3 3:bb6f73642f01 1338
ajorgih3 3:bb6f73642f01 1339
ajorgih3 3:bb6f73642f01 1340 return NO_RESULT;
ajorgih3 3:bb6f73642f01 1341 }
ajorgih3 3:bb6f73642f01 1342
ajorgih3 3:bb6f73642f01 1343
DCchico 1:10330bce85cb 1344 /**
DCchico 1:10330bce85cb 1345 * Program entry point! This is where it all begins.
DCchico 1:10330bce85cb 1346 * This function or all the parts of the game. Most of your
DCchico 1:10330bce85cb 1347 * implementation should be elsewhere - this holds the game loop, and should
DCchico 1:10330bce85cb 1348 * read like a road map for the rest of the code.
DCchico 1:10330bce85cb 1349 */
DCchico 1:10330bce85cb 1350 int main()
DCchico 1:10330bce85cb 1351 {
ajorgih3 3:bb6f73642f01 1352
DCchico 1:10330bce85cb 1353 // First things first: initialize hardware
DCchico 1:10330bce85cb 1354 ASSERT_P(hardware_init() == ERROR_NONE, "Hardware init failed!");
ajorgih3 3:bb6f73642f01 1355
ajorgih3 3:bb6f73642f01 1356 start_game();
ajorgih3 4:697e1120f821 1357 title_page();
ajorgih3 4:697e1120f821 1358 helpful_items();
ajorgih3 4:697e1120f821 1359 harmful_items();
ajorgih3 3:bb6f73642f01 1360
ajorgih3 3:bb6f73642f01 1361 // loading screen
ajorgih3 3:bb6f73642f01 1362 //uLCD.filled_rectangle(0, 0, 255, 255, BLACK);
ajorgih3 3:bb6f73642f01 1363 //uLCD.textbackground_color(BLACK);
ajorgih3 3:bb6f73642f01 1364 //uLCD.color(0xFFFFFF);
ajorgih3 3:bb6f73642f01 1365 //uLCD.locate(4,7);
ajorgih3 3:bb6f73642f01 1366 //uLCD.printf("GOOD LUCK!");
ajorgih3 3:bb6f73642f01 1367 //uLCD.locate(4,8);
ajorgih3 3:bb6f73642f01 1368 //uLCD.printf("Loading...");
ajorgih3 3:bb6f73642f01 1369 //wait(4);
ajorgih3 3:bb6f73642f01 1370 //uLCD.filled_rectangle(0, 0, 255, 255, BLACK);
ajorgih3 3:bb6f73642f01 1371
DCchico 1:10330bce85cb 1372 snake_init(&snake);
DCchico 2:4947d6a82971 1373 // 0. Initialize the maps -- implement this function:
DCchico 1:10330bce85cb 1374 maps_init();
DCchico 1:10330bce85cb 1375 init_main_map();
DCchico 1:10330bce85cb 1376
DCchico 1:10330bce85cb 1377 // Initialize game state
DCchico 1:10330bce85cb 1378 set_active_map(0);
DCchico 1:10330bce85cb 1379 snake.head_x = snake.head_y = 5;
ajorgih3 3:bb6f73642f01 1380 snake.body_x = 4;
ajorgih3 3:bb6f73642f01 1381 snake.body_y = 5;
ajorgih3 3:bb6f73642f01 1382 snake.tail_x = 3;
ajorgih3 3:bb6f73642f01 1383 snake.tail_y = 5;
DCchico 1:10330bce85cb 1384 // Initial drawing
DCchico 1:10330bce85cb 1385 draw_game(FULL_DRAW);
DCchico 1:10330bce85cb 1386 // Main game loop
DCchico 1:10330bce85cb 1387 while(1) {
DCchico 1:10330bce85cb 1388 // Timer to measure game update speed
DCchico 1:10330bce85cb 1389 Timer t;
DCchico 1:10330bce85cb 1390 t.start();
DCchico 1:10330bce85cb 1391
DCchico 2:4947d6a82971 1392 // 1. Read inputs -- implement this function:
DCchico 2:4947d6a82971 1393 GameInputs inputs = read_inputs();
DCchico 2:4947d6a82971 1394
DCchico 2:4947d6a82971 1395 // 2. Determine action (move, act, menu, etc.) -- implement this function:
DCchico 2:4947d6a82971 1396 int action = get_action(inputs);
DCchico 2:4947d6a82971 1397
DCchico 2:4947d6a82971 1398 // 3. Update game -- implement this function:
DCchico 2:4947d6a82971 1399 int result = update_game(action);
DCchico 2:4947d6a82971 1400
DCchico 2:4947d6a82971 1401 // 3b. Check for game over based on result
DCchico 2:4947d6a82971 1402 // and if so, handle game over -- implement this.
DCchico 2:4947d6a82971 1403
DCchico 2:4947d6a82971 1404 // 4. Draw screen -- provided:
DCchico 2:4947d6a82971 1405 draw_game(result);
DCchico 2:4947d6a82971 1406
DCchico 1:10330bce85cb 1407 // Compute update time
DCchico 1:10330bce85cb 1408 t.stop();
DCchico 1:10330bce85cb 1409 int dt = t.read_ms();
DCchico 1:10330bce85cb 1410
DCchico 1:10330bce85cb 1411 // Display and wait
DCchico 1:10330bce85cb 1412 // NOTE: Text is 8 pixels tall
DCchico 1:10330bce85cb 1413 if (dt < 100) wait_ms(100 - dt);
DCchico 1:10330bce85cb 1414 }
DCchico 1:10330bce85cb 1415 }
DCchico 1:10330bce85cb 1416
ajorgih3 3:bb6f73642f01 1417 int main2() {
ajorgih3 3:bb6f73642f01 1418 //uLCD.filled_rectangle(0, 0, 255, 255, BLACK);
ajorgih3 3:bb6f73642f01 1419
ajorgih3 3:bb6f73642f01 1420 //snake_init(&snake);
ajorgih3 3:bb6f73642f01 1421 // 0. Initialize the maps -- implement this function:
ajorgih3 3:bb6f73642f01 1422 //maps_init();
ajorgih3 3:bb6f73642f01 1423 //init_main_map();
ajorgih3 3:bb6f73642f01 1424
ajorgih3 3:bb6f73642f01 1425 // Initialize game state
ajorgih3 3:bb6f73642f01 1426 set_active_map(0);
ajorgih3 3:bb6f73642f01 1427 snake.head_x = snake.head_y = 5;
ajorgih3 3:bb6f73642f01 1428 snake.body_x = 4;
ajorgih3 3:bb6f73642f01 1429 snake.body_y = 5;
ajorgih3 3:bb6f73642f01 1430 snake.tail_x = 3;
ajorgih3 3:bb6f73642f01 1431 snake.tail_y = 5;
ajorgih3 3:bb6f73642f01 1432 // Initial drawing
ajorgih3 3:bb6f73642f01 1433 draw_game(FULL_DRAW);
ajorgih3 3:bb6f73642f01 1434 // Main game loop
ajorgih3 3:bb6f73642f01 1435 while(1) {
ajorgih3 3:bb6f73642f01 1436 // Timer to measure game update speed
ajorgih3 3:bb6f73642f01 1437 Timer t;
ajorgih3 3:bb6f73642f01 1438 t.start();
ajorgih3 3:bb6f73642f01 1439
ajorgih3 3:bb6f73642f01 1440 // 1. Read inputs -- implement this function:
ajorgih3 3:bb6f73642f01 1441 GameInputs inputs = read_inputs();
ajorgih3 3:bb6f73642f01 1442
ajorgih3 3:bb6f73642f01 1443 // 2. Determine action (move, act, menu, etc.) -- implement this function:
ajorgih3 3:bb6f73642f01 1444 int action = get_action(inputs);
ajorgih3 3:bb6f73642f01 1445
ajorgih3 3:bb6f73642f01 1446 // 3. Update game -- implement this function:
ajorgih3 3:bb6f73642f01 1447 int result = update_game(action);
ajorgih3 3:bb6f73642f01 1448
ajorgih3 3:bb6f73642f01 1449 // 3b. Check for game over based on result
ajorgih3 3:bb6f73642f01 1450 // and if so, handle game over -- implement this.
ajorgih3 3:bb6f73642f01 1451
ajorgih3 3:bb6f73642f01 1452 // 4. Draw screen -- provided:
ajorgih3 3:bb6f73642f01 1453 draw_game(result);
ajorgih3 3:bb6f73642f01 1454
ajorgih3 3:bb6f73642f01 1455 // Compute update time
ajorgih3 3:bb6f73642f01 1456 t.stop();
ajorgih3 3:bb6f73642f01 1457 int dt = t.read_ms();
ajorgih3 3:bb6f73642f01 1458
ajorgih3 3:bb6f73642f01 1459 // Display and wait
ajorgih3 3:bb6f73642f01 1460 // NOTE: Text is 8 pixels tall
ajorgih3 3:bb6f73642f01 1461 if (dt < 100) wait_ms(100 - dt);
ajorgih3 3:bb6f73642f01 1462 }
ajorgih3 3:bb6f73642f01 1463
ajorgih3 3:bb6f73642f01 1464 }
ajorgih3 3:bb6f73642f01 1465
DCchico 1:10330bce85cb 1466 // Plays a wavfile
DCchico 1:10330bce85cb 1467 void playSound(char* wav)
DCchico 1:10330bce85cb 1468 {
DCchico 1:10330bce85cb 1469
DCchico 1:10330bce85cb 1470 }