
hgftf
Dependencies: mbed wave_player 4DGL-uLCD-SE MMA8452
main.cpp@4:697e1120f821, 2020-11-17 (annotated)
- 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?
User | Revision | Line number | New 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 | } |