Game Ant Run - requires 8x8 LED RG shield - project MPOA (VUT v Brne)
Dependencies: MMA8451Q RGB mbed
main.cpp@1:806df0da28dc, 2015-01-08 (annotated)
- Committer:
- tomas_dca
- Date:
- Thu Jan 08 11:57:28 2015 +0000
- Revision:
- 1:806df0da28dc
- Parent:
- 0:56ca0aab95fc
- Child:
- 2:3735ddc47ec7
fixed broken pin PTC7
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
tomas_dca | 0:56ca0aab95fc | 1 | #include "mbed.h" |
tomas_dca | 0:56ca0aab95fc | 2 | #include "MMA8451Q.h" |
tomas_dca | 0:56ca0aab95fc | 3 | #include "MyColor.h" |
tomas_dca | 0:56ca0aab95fc | 4 | |
tomas_dca | 0:56ca0aab95fc | 5 | |
tomas_dca | 0:56ca0aab95fc | 6 | |
tomas_dca | 0:56ca0aab95fc | 7 | |
tomas_dca | 0:56ca0aab95fc | 8 | // LED matrix states (pixel) |
tomas_dca | 0:56ca0aab95fc | 9 | |
tomas_dca | 0:56ca0aab95fc | 10 | #define led_used 3 // color orange |
tomas_dca | 0:56ca0aab95fc | 11 | #define led_lab 2 // color green |
tomas_dca | 0:56ca0aab95fc | 12 | #define led_ant 1 // color red |
tomas_dca | 0:56ca0aab95fc | 13 | #define led_free 0 // off |
tomas_dca | 0:56ca0aab95fc | 14 | |
tomas_dca | 0:56ca0aab95fc | 15 | // brightness of LED matrix |
tomas_dca | 0:56ca0aab95fc | 16 | #define brightness 0.0003f // 0.001f optimal, 0.0003f for night |
tomas_dca | 0:56ca0aab95fc | 17 | |
tomas_dca | 0:56ca0aab95fc | 18 | // RGB states |
tomas_dca | 0:56ca0aab95fc | 19 | |
tomas_dca | 0:56ca0aab95fc | 20 | #define color_red 1.0 |
tomas_dca | 0:56ca0aab95fc | 21 | #define color_orange 0.1 |
tomas_dca | 0:56ca0aab95fc | 22 | #define color_green 0.3 |
tomas_dca | 0:56ca0aab95fc | 23 | #define color_blue 0.5 |
tomas_dca | 0:56ca0aab95fc | 24 | |
tomas_dca | 0:56ca0aab95fc | 25 | |
tomas_dca | 0:56ca0aab95fc | 26 | |
tomas_dca | 0:56ca0aab95fc | 27 | // labyrint virtual LED matrix |
tomas_dca | 0:56ca0aab95fc | 28 | uint8_t matrix[8][8]; |
tomas_dca | 0:56ca0aab95fc | 29 | |
tomas_dca | 0:56ca0aab95fc | 30 | // templates for labyrint |
tomas_dca | 0:56ca0aab95fc | 31 | #define template_fill (~0) // fill all pixels |
tomas_dca | 0:56ca0aab95fc | 32 | |
tomas_dca | 0:56ca0aab95fc | 33 | #define template_arrow 0x12244848241200 |
tomas_dca | 0:56ca0aab95fc | 34 | /* |
tomas_dca | 0:56ca0aab95fc | 35 | * . . . . . . . . |
tomas_dca | 0:56ca0aab95fc | 36 | * . . . x . . x . |
tomas_dca | 0:56ca0aab95fc | 37 | * . . x . . x . . |
tomas_dca | 0:56ca0aab95fc | 38 | * . x . . x . . . |
tomas_dca | 0:56ca0aab95fc | 39 | * . . x . . x . . |
tomas_dca | 0:56ca0aab95fc | 40 | * . . . x . . x . |
tomas_dca | 0:56ca0aab95fc | 41 | * . . . . . . . . |
tomas_dca | 0:56ca0aab95fc | 42 | * . . . . . . . . |
tomas_dca | 0:56ca0aab95fc | 43 | */ |
tomas_dca | 0:56ca0aab95fc | 44 | |
tomas_dca | 0:56ca0aab95fc | 45 | #define lab_turn_big 0x0D /* |
tomas_dca | 0:56ca0aab95fc | 46 | * x x |
tomas_dca | 0:56ca0aab95fc | 47 | * . x |
tomas_dca | 0:56ca0aab95fc | 48 | */ |
tomas_dca | 0:56ca0aab95fc | 49 | |
tomas_dca | 0:56ca0aab95fc | 50 | #define lab_turn_small 0x08 /* |
tomas_dca | 0:56ca0aab95fc | 51 | * x . |
tomas_dca | 0:56ca0aab95fc | 52 | * . . |
tomas_dca | 0:56ca0aab95fc | 53 | */ |
tomas_dca | 0:56ca0aab95fc | 54 | |
tomas_dca | 0:56ca0aab95fc | 55 | #define lab_straight 0x0A /* |
tomas_dca | 0:56ca0aab95fc | 56 | * x . |
tomas_dca | 0:56ca0aab95fc | 57 | * x . |
tomas_dca | 0:56ca0aab95fc | 58 | */ |
tomas_dca | 0:56ca0aab95fc | 59 | |
tomas_dca | 0:56ca0aab95fc | 60 | |
tomas_dca | 0:56ca0aab95fc | 61 | #define one 0xF248 |
tomas_dca | 0:56ca0aab95fc | 62 | //000000001111001001001000 |
tomas_dca | 0:56ca0aab95fc | 63 | |
tomas_dca | 0:56ca0aab95fc | 64 | #define two 0x3D2B8 |
tomas_dca | 0:56ca0aab95fc | 65 | //000000111101001010111000 |
tomas_dca | 0:56ca0aab95fc | 66 | |
tomas_dca | 0:56ca0aab95fc | 67 | #define three 0x39678 |
tomas_dca | 0:56ca0aab95fc | 68 | //000000111001011001111000 |
tomas_dca | 0:56ca0aab95fc | 69 | |
tomas_dca | 0:56ca0aab95fc | 70 | #define four 0x25E48 |
tomas_dca | 0:56ca0aab95fc | 71 | //000000100101111001001000 |
tomas_dca | 0:56ca0aab95fc | 72 | |
tomas_dca | 0:56ca0aab95fc | 73 | #define five 0x3CE78 |
tomas_dca | 0:56ca0aab95fc | 74 | //000000111100111001111000 |
tomas_dca | 0:56ca0aab95fc | 75 | |
tomas_dca | 0:56ca0aab95fc | 76 | #define six 0x3CF78 |
tomas_dca | 0:56ca0aab95fc | 77 | //000000111100111101111000 |
tomas_dca | 0:56ca0aab95fc | 78 | |
tomas_dca | 0:56ca0aab95fc | 79 | #define seven 0x39248 |
tomas_dca | 0:56ca0aab95fc | 80 | //000000111001001001001000 |
tomas_dca | 0:56ca0aab95fc | 81 | |
tomas_dca | 0:56ca0aab95fc | 82 | #define eight 0x3DF78 |
tomas_dca | 0:56ca0aab95fc | 83 | //000000111101111101111000 |
tomas_dca | 0:56ca0aab95fc | 84 | |
tomas_dca | 0:56ca0aab95fc | 85 | #define nine 0x3DE78 |
tomas_dca | 0:56ca0aab95fc | 86 | //000000111101111001111000 |
tomas_dca | 0:56ca0aab95fc | 87 | |
tomas_dca | 0:56ca0aab95fc | 88 | #define zero 0x3DB78 |
tomas_dca | 0:56ca0aab95fc | 89 | //000000111101101101111000 |
tomas_dca | 0:56ca0aab95fc | 90 | |
tomas_dca | 0:56ca0aab95fc | 91 | |
tomas_dca | 0:56ca0aab95fc | 92 | // init LED 8x8 matrix -> port |
tomas_dca | 0:56ca0aab95fc | 93 | DigitalOut ROW0(PTB0); |
tomas_dca | 0:56ca0aab95fc | 94 | DigitalOut ROW1(PTB1); |
tomas_dca | 0:56ca0aab95fc | 95 | DigitalOut ROW2(PTB2); |
tomas_dca | 0:56ca0aab95fc | 96 | |
tomas_dca | 0:56ca0aab95fc | 97 | DigitalOut COLG0(PTC0); |
tomas_dca | 0:56ca0aab95fc | 98 | DigitalOut COLG1(PTC1); |
tomas_dca | 0:56ca0aab95fc | 99 | DigitalOut COLG2(PTC2); |
tomas_dca | 0:56ca0aab95fc | 100 | DigitalOut COLG3(PTC3); |
tomas_dca | 0:56ca0aab95fc | 101 | DigitalOut COLG4(PTC4); |
tomas_dca | 0:56ca0aab95fc | 102 | DigitalOut COLG5(PTC5); |
tomas_dca | 0:56ca0aab95fc | 103 | DigitalOut COLG6(PTC6); |
tomas_dca | 1:806df0da28dc | 104 | DigitalOut COLG7(PTC7); |
tomas_dca | 0:56ca0aab95fc | 105 | |
tomas_dca | 0:56ca0aab95fc | 106 | DigitalOut COLR0(PTC8); |
tomas_dca | 0:56ca0aab95fc | 107 | DigitalOut COLR1(PTC9); |
tomas_dca | 0:56ca0aab95fc | 108 | DigitalOut COLR2(PTC10); |
tomas_dca | 0:56ca0aab95fc | 109 | DigitalOut COLR3(PTC11); |
tomas_dca | 0:56ca0aab95fc | 110 | DigitalOut COLR4(PTC12); |
tomas_dca | 0:56ca0aab95fc | 111 | DigitalOut COLR5(PTC13); |
tomas_dca | 0:56ca0aab95fc | 112 | DigitalOut COLR6(PTC16); |
tomas_dca | 0:56ca0aab95fc | 113 | DigitalOut COLR7(PTC17); |
tomas_dca | 0:56ca0aab95fc | 114 | |
tomas_dca | 0:56ca0aab95fc | 115 | // init LED 8x8 matrix -> port |
tomas_dca | 0:56ca0aab95fc | 116 | |
tomas_dca | 0:56ca0aab95fc | 117 | // state table TEST | GAME | PAUSE |
tomas_dca | 0:56ca0aab95fc | 118 | // ---------------------------------------- |
tomas_dca | 0:56ca0aab95fc | 119 | DigitalIn BTN_L(PTD7); // ->new game | ->pause | ->game |
tomas_dca | 0:56ca0aab95fc | 120 | DigitalIn BTN_R(PTD6); // new 0 state | rotate | ->new game |
tomas_dca | 0:56ca0aab95fc | 121 | |
tomas_dca | 0:56ca0aab95fc | 122 | |
tomas_dca | 0:56ca0aab95fc | 123 | |
tomas_dca | 0:56ca0aab95fc | 124 | // define accelerometer stuffs |
tomas_dca | 0:56ca0aab95fc | 125 | #define MMA8451_I2C_ADDRESS (0x1d<<1) |
tomas_dca | 0:56ca0aab95fc | 126 | #define MOVE_ANGLE 25 // > degrees for move |
tomas_dca | 0:56ca0aab95fc | 127 | #define IDLE_ANGLE 10 // < degrees for idle state |
tomas_dca | 0:56ca0aab95fc | 128 | |
tomas_dca | 0:56ca0aab95fc | 129 | MMA8451Q acc(PTE25, PTE24, MMA8451_I2C_ADDRESS); |
tomas_dca | 0:56ca0aab95fc | 130 | |
tomas_dca | 0:56ca0aab95fc | 131 | |
tomas_dca | 0:56ca0aab95fc | 132 | |
tomas_dca | 0:56ca0aab95fc | 133 | |
tomas_dca | 0:56ca0aab95fc | 134 | // index for actual block of control |
tomas_dca | 0:56ca0aab95fc | 135 | uint8_t row = 2; |
tomas_dca | 0:56ca0aab95fc | 136 | uint8_t column = 2; |
tomas_dca | 0:56ca0aab95fc | 137 | |
tomas_dca | 0:56ca0aab95fc | 138 | // index for ant position |
tomas_dca | 0:56ca0aab95fc | 139 | uint8_t ant_row = 5; |
tomas_dca | 0:56ca0aab95fc | 140 | uint8_t ant_column = 3; |
tomas_dca | 0:56ca0aab95fc | 141 | |
tomas_dca | 0:56ca0aab95fc | 142 | // score counter |
tomas_dca | 0:56ca0aab95fc | 143 | uint32_t score_cnt = 0; |
tomas_dca | 0:56ca0aab95fc | 144 | |
tomas_dca | 0:56ca0aab95fc | 145 | // Timer ticker |
tomas_dca | 0:56ca0aab95fc | 146 | Ticker display; // display matrix of pixels |
tomas_dca | 0:56ca0aab95fc | 147 | Ticker acc_scan; // scan accelerometer move |
tomas_dca | 0:56ca0aab95fc | 148 | Ticker ant_run; // ant move |
tomas_dca | 0:56ca0aab95fc | 149 | |
tomas_dca | 0:56ca0aab95fc | 150 | // periodic func. prototypes (Tickers) |
tomas_dca | 0:56ca0aab95fc | 151 | void show_matrix(void); // Ticker display |
tomas_dca | 0:56ca0aab95fc | 152 | void accelerometer(void); // Ticker acc_scan |
tomas_dca | 0:56ca0aab95fc | 153 | void ant_move(void); // Ticker ant_run |
tomas_dca | 0:56ca0aab95fc | 154 | |
tomas_dca | 0:56ca0aab95fc | 155 | // func. prototypes |
tomas_dca | 0:56ca0aab95fc | 156 | void fill_matrix(uint64_t temp,uint8_t color); |
tomas_dca | 0:56ca0aab95fc | 157 | void rotate_matrix(void); |
tomas_dca | 0:56ca0aab95fc | 158 | void rotate_lab(uint8_t lab_row, uint8_t lab_col); |
tomas_dca | 0:56ca0aab95fc | 159 | |
tomas_dca | 0:56ca0aab95fc | 160 | void prepare_matrix(void); // prepare matrix for new labyrint and set initial conditions |
tomas_dca | 0:56ca0aab95fc | 161 | void reload_matrix(void); // generate new labyrint blocks (only instead of used) |
tomas_dca | 0:56ca0aab95fc | 162 | |
tomas_dca | 0:56ca0aab95fc | 163 | uint32_t translate(uint8_t); // number to symbol |
tomas_dca | 0:56ca0aab95fc | 164 | |
tomas_dca | 0:56ca0aab95fc | 165 | // func. under accelerometer() |
tomas_dca | 0:56ca0aab95fc | 166 | void confirm_dir(void); |
tomas_dca | 0:56ca0aab95fc | 167 | void move_cursor(void); |
tomas_dca | 0:56ca0aab95fc | 168 | |
tomas_dca | 0:56ca0aab95fc | 169 | // states of game |
tomas_dca | 0:56ca0aab95fc | 170 | typedef enum {ready, pause, game, test, save, learn, score} state_t; |
tomas_dca | 0:56ca0aab95fc | 171 | state_t game_state = ready; |
tomas_dca | 0:56ca0aab95fc | 172 | |
tomas_dca | 0:56ca0aab95fc | 173 | /* |
tomas_dca | 0:56ca0aab95fc | 174 | * ready - ready for game (idle) |
tomas_dca | 0:56ca0aab95fc | 175 | * test - test controls |
tomas_dca | 0:56ca0aab95fc | 176 | * save - save accelerator offset |
tomas_dca | 0:56ca0aab95fc | 177 | * |
tomas_dca | 0:56ca0aab95fc | 178 | * game - ant run game |
tomas_dca | 0:56ca0aab95fc | 179 | * learn - special type of the game (without score and game over) |
tomas_dca | 0:56ca0aab95fc | 180 | * pause - pause game |
tomas_dca | 0:56ca0aab95fc | 181 | * |
tomas_dca | 0:56ca0aab95fc | 182 | * score - game over - show score |
tomas_dca | 0:56ca0aab95fc | 183 | */ |
tomas_dca | 0:56ca0aab95fc | 184 | |
tomas_dca | 0:56ca0aab95fc | 185 | // directions |
tomas_dca | 0:56ca0aab95fc | 186 | typedef enum {idle, left, up, right, down} direction_t; |
tomas_dca | 0:56ca0aab95fc | 187 | direction_t acc_dir = idle; // enum for move direction -> control |
tomas_dca | 0:56ca0aab95fc | 188 | direction_t ant_dir = down; // enum for move direction -> ant |
tomas_dca | 0:56ca0aab95fc | 189 | |
tomas_dca | 0:56ca0aab95fc | 190 | |
tomas_dca | 0:56ca0aab95fc | 191 | ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// |
tomas_dca | 0:56ca0aab95fc | 192 | ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// |
tomas_dca | 0:56ca0aab95fc | 193 | ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// |
tomas_dca | 0:56ca0aab95fc | 194 | ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// |
tomas_dca | 0:56ca0aab95fc | 195 | |
tomas_dca | 0:56ca0aab95fc | 196 | int main(void) |
tomas_dca | 0:56ca0aab95fc | 197 | { |
tomas_dca | 0:56ca0aab95fc | 198 | // init RGB backlight |
tomas_dca | 0:56ca0aab95fc | 199 | |
tomas_dca | 0:56ca0aab95fc | 200 | DigitalOut rled(LED_RED, 1); |
tomas_dca | 0:56ca0aab95fc | 201 | DigitalOut gled(LED_GREEN, 1); |
tomas_dca | 0:56ca0aab95fc | 202 | DigitalOut bled(LED_BLUE, 1); |
tomas_dca | 0:56ca0aab95fc | 203 | |
tomas_dca | 0:56ca0aab95fc | 204 | PwmOut r (LED_RED); |
tomas_dca | 0:56ca0aab95fc | 205 | PwmOut g (LED_GREEN); |
tomas_dca | 0:56ca0aab95fc | 206 | PwmOut b (LED_BLUE); |
tomas_dca | 0:56ca0aab95fc | 207 | |
tomas_dca | 0:56ca0aab95fc | 208 | MyColor color(LED_RED, LED_GREEN, LED_BLUE); |
tomas_dca | 0:56ca0aab95fc | 209 | |
tomas_dca | 0:56ca0aab95fc | 210 | uint8_t learning = 0; |
tomas_dca | 0:56ca0aab95fc | 211 | |
tomas_dca | 0:56ca0aab95fc | 212 | Timer timer; |
tomas_dca | 0:56ca0aab95fc | 213 | timer.start(); |
tomas_dca | 0:56ca0aab95fc | 214 | |
tomas_dca | 0:56ca0aab95fc | 215 | // display turn on |
tomas_dca | 0:56ca0aab95fc | 216 | display.attach(&show_matrix, 0.01); // the address of the function to be attached (show_matrix) and the interval (0.01 seconds) |
tomas_dca | 0:56ca0aab95fc | 217 | acc_scan.attach(&accelerometer, 0.1); // accelerometer 0.1 s |
tomas_dca | 0:56ca0aab95fc | 218 | ant_run.attach(&ant_move, 1.2); // ant_move 1.2 s |
tomas_dca | 0:56ca0aab95fc | 219 | |
tomas_dca | 0:56ca0aab95fc | 220 | // learn mode |
tomas_dca | 0:56ca0aab95fc | 221 | if(!BTN_L && !BTN_R) |
tomas_dca | 0:56ca0aab95fc | 222 | { |
tomas_dca | 0:56ca0aab95fc | 223 | |
tomas_dca | 0:56ca0aab95fc | 224 | color = color_blue; |
tomas_dca | 0:56ca0aab95fc | 225 | learning = 1; |
tomas_dca | 0:56ca0aab95fc | 226 | while(!BTN_L || !BTN_R); //debounce |
tomas_dca | 0:56ca0aab95fc | 227 | } |
tomas_dca | 0:56ca0aab95fc | 228 | |
tomas_dca | 0:56ca0aab95fc | 229 | //control test |
tomas_dca | 0:56ca0aab95fc | 230 | game_state = test; |
tomas_dca | 0:56ca0aab95fc | 231 | color = color_orange; |
tomas_dca | 0:56ca0aab95fc | 232 | |
tomas_dca | 0:56ca0aab95fc | 233 | // init rand() seed |
tomas_dca | 0:56ca0aab95fc | 234 | srand(timer.read_ms()); |
tomas_dca | 0:56ca0aab95fc | 235 | |
tomas_dca | 0:56ca0aab95fc | 236 | // init time for debounce |
tomas_dca | 0:56ca0aab95fc | 237 | int time = timer.read_ms(); |
tomas_dca | 0:56ca0aab95fc | 238 | |
tomas_dca | 0:56ca0aab95fc | 239 | while (true) |
tomas_dca | 0:56ca0aab95fc | 240 | { |
tomas_dca | 0:56ca0aab95fc | 241 | switch(game_state) |
tomas_dca | 0:56ca0aab95fc | 242 | { |
tomas_dca | 0:56ca0aab95fc | 243 | case score: |
tomas_dca | 0:56ca0aab95fc | 244 | { |
tomas_dca | 0:56ca0aab95fc | 245 | // SHOW SCORE |
tomas_dca | 0:56ca0aab95fc | 246 | static uint8_t go = 0; // go and show score |
tomas_dca | 0:56ca0aab95fc | 247 | static uint8_t sym_col = 100; // state of showing score |
tomas_dca | 0:56ca0aab95fc | 248 | |
tomas_dca | 0:56ca0aab95fc | 249 | |
tomas_dca | 0:56ca0aab95fc | 250 | if((timer.read_ms() % 600 ) > 300) |
tomas_dca | 0:56ca0aab95fc | 251 | { |
tomas_dca | 0:56ca0aab95fc | 252 | color = color_red; |
tomas_dca | 0:56ca0aab95fc | 253 | |
tomas_dca | 0:56ca0aab95fc | 254 | if(go == 5) |
tomas_dca | 0:56ca0aab95fc | 255 | go = 1; |
tomas_dca | 0:56ca0aab95fc | 256 | else |
tomas_dca | 0:56ca0aab95fc | 257 | go = 6; |
tomas_dca | 0:56ca0aab95fc | 258 | |
tomas_dca | 0:56ca0aab95fc | 259 | } |
tomas_dca | 0:56ca0aab95fc | 260 | else |
tomas_dca | 0:56ca0aab95fc | 261 | { |
tomas_dca | 0:56ca0aab95fc | 262 | if(go == 6) |
tomas_dca | 0:56ca0aab95fc | 263 | go = 1; |
tomas_dca | 0:56ca0aab95fc | 264 | else |
tomas_dca | 0:56ca0aab95fc | 265 | go = 5; |
tomas_dca | 0:56ca0aab95fc | 266 | |
tomas_dca | 0:56ca0aab95fc | 267 | color = color_blue; |
tomas_dca | 0:56ca0aab95fc | 268 | } |
tomas_dca | 0:56ca0aab95fc | 269 | |
tomas_dca | 0:56ca0aab95fc | 270 | if( go == 1 ) |
tomas_dca | 0:56ca0aab95fc | 271 | { |
tomas_dca | 0:56ca0aab95fc | 272 | static uint32_t sym_act = 0; |
tomas_dca | 0:56ca0aab95fc | 273 | static uint32_t sym_clr = led_ant; |
tomas_dca | 0:56ca0aab95fc | 274 | static uint32_t score_cnt_temp = 0; |
tomas_dca | 0:56ca0aab95fc | 275 | |
tomas_dca | 0:56ca0aab95fc | 276 | |
tomas_dca | 0:56ca0aab95fc | 277 | |
tomas_dca | 0:56ca0aab95fc | 278 | switch(sym_col) |
tomas_dca | 0:56ca0aab95fc | 279 | { |
tomas_dca | 0:56ca0aab95fc | 280 | case 0: |
tomas_dca | 0:56ca0aab95fc | 281 | case 1: |
tomas_dca | 0:56ca0aab95fc | 282 | sym_col++; |
tomas_dca | 0:56ca0aab95fc | 283 | break; |
tomas_dca | 0:56ca0aab95fc | 284 | case 2: |
tomas_dca | 0:56ca0aab95fc | 285 | score_cnt_temp -= score_cnt_temp % 10; |
tomas_dca | 0:56ca0aab95fc | 286 | score_cnt_temp /=10; |
tomas_dca | 0:56ca0aab95fc | 287 | |
tomas_dca | 0:56ca0aab95fc | 288 | if(score_cnt_temp == 0) |
tomas_dca | 0:56ca0aab95fc | 289 | { |
tomas_dca | 0:56ca0aab95fc | 290 | // empty block |
tomas_dca | 0:56ca0aab95fc | 291 | sym_act = 0; |
tomas_dca | 0:56ca0aab95fc | 292 | // close ceremony |
tomas_dca | 0:56ca0aab95fc | 293 | sym_col++; |
tomas_dca | 0:56ca0aab95fc | 294 | } |
tomas_dca | 0:56ca0aab95fc | 295 | else |
tomas_dca | 0:56ca0aab95fc | 296 | { |
tomas_dca | 0:56ca0aab95fc | 297 | // next number |
tomas_dca | 0:56ca0aab95fc | 298 | sym_act = translate(score_cnt_temp % 10); |
tomas_dca | 0:56ca0aab95fc | 299 | sym_col = 0; |
tomas_dca | 0:56ca0aab95fc | 300 | } |
tomas_dca | 0:56ca0aab95fc | 301 | |
tomas_dca | 0:56ca0aab95fc | 302 | if(sym_clr == led_ant) |
tomas_dca | 0:56ca0aab95fc | 303 | sym_clr = led_lab; |
tomas_dca | 0:56ca0aab95fc | 304 | else |
tomas_dca | 0:56ca0aab95fc | 305 | sym_clr = led_ant; |
tomas_dca | 0:56ca0aab95fc | 306 | |
tomas_dca | 0:56ca0aab95fc | 307 | break; |
tomas_dca | 0:56ca0aab95fc | 308 | case 3: |
tomas_dca | 0:56ca0aab95fc | 309 | case 4: |
tomas_dca | 0:56ca0aab95fc | 310 | case 5: |
tomas_dca | 0:56ca0aab95fc | 311 | case 6: |
tomas_dca | 0:56ca0aab95fc | 312 | case 7: |
tomas_dca | 0:56ca0aab95fc | 313 | case 8: |
tomas_dca | 0:56ca0aab95fc | 314 | case 9: |
tomas_dca | 0:56ca0aab95fc | 315 | case 10: |
tomas_dca | 0:56ca0aab95fc | 316 | // close loop |
tomas_dca | 0:56ca0aab95fc | 317 | sym_col++; |
tomas_dca | 0:56ca0aab95fc | 318 | break; |
tomas_dca | 0:56ca0aab95fc | 319 | case 11: |
tomas_dca | 0:56ca0aab95fc | 320 | sym_col = 100; |
tomas_dca | 0:56ca0aab95fc | 321 | // show score again |
tomas_dca | 0:56ca0aab95fc | 322 | break; |
tomas_dca | 0:56ca0aab95fc | 323 | default: |
tomas_dca | 0:56ca0aab95fc | 324 | // erase old symbol |
tomas_dca | 0:56ca0aab95fc | 325 | fill_matrix(template_fill, led_free); |
tomas_dca | 0:56ca0aab95fc | 326 | // load score |
tomas_dca | 0:56ca0aab95fc | 327 | score_cnt_temp = score_cnt; |
tomas_dca | 0:56ca0aab95fc | 328 | // init new char; |
tomas_dca | 0:56ca0aab95fc | 329 | sym_act = translate(score_cnt_temp % 10); |
tomas_dca | 0:56ca0aab95fc | 330 | sym_col = 0; |
tomas_dca | 0:56ca0aab95fc | 331 | } |
tomas_dca | 0:56ca0aab95fc | 332 | |
tomas_dca | 0:56ca0aab95fc | 333 | // shift matrix |
tomas_dca | 0:56ca0aab95fc | 334 | if((sym_col < 12)) |
tomas_dca | 0:56ca0aab95fc | 335 | { |
tomas_dca | 0:56ca0aab95fc | 336 | for(uint8_t j = 5; j > 0;j--) // rows |
tomas_dca | 0:56ca0aab95fc | 337 | { |
tomas_dca | 0:56ca0aab95fc | 338 | for(uint8_t i = 0; i < 7;i++) // columns |
tomas_dca | 0:56ca0aab95fc | 339 | { |
tomas_dca | 0:56ca0aab95fc | 340 | matrix[j][7-i] = matrix[j][6-i]; |
tomas_dca | 0:56ca0aab95fc | 341 | } |
tomas_dca | 0:56ca0aab95fc | 342 | // add new column to matrix |
tomas_dca | 0:56ca0aab95fc | 343 | // find actual bit sym_col, assign color |
tomas_dca | 0:56ca0aab95fc | 344 | matrix[j][0] = sym_clr * ((((0x1 << sym_col) << (3*j)) & sym_act) > 0); |
tomas_dca | 0:56ca0aab95fc | 345 | } |
tomas_dca | 0:56ca0aab95fc | 346 | } |
tomas_dca | 0:56ca0aab95fc | 347 | } |
tomas_dca | 0:56ca0aab95fc | 348 | |
tomas_dca | 0:56ca0aab95fc | 349 | // buttons |
tomas_dca | 0:56ca0aab95fc | 350 | if( BTN_R && !BTN_L && (time < timer.read_ms())) |
tomas_dca | 0:56ca0aab95fc | 351 | { |
tomas_dca | 0:56ca0aab95fc | 352 | game_state = pause; |
tomas_dca | 0:56ca0aab95fc | 353 | color = color_orange; |
tomas_dca | 0:56ca0aab95fc | 354 | |
tomas_dca | 0:56ca0aab95fc | 355 | // reset score show |
tomas_dca | 0:56ca0aab95fc | 356 | sym_col = 100; |
tomas_dca | 0:56ca0aab95fc | 357 | |
tomas_dca | 0:56ca0aab95fc | 358 | // RESET LABYRINT |
tomas_dca | 0:56ca0aab95fc | 359 | game_state = ready; |
tomas_dca | 0:56ca0aab95fc | 360 | |
tomas_dca | 0:56ca0aab95fc | 361 | time = timer.read_ms() + 200; //debounce |
tomas_dca | 0:56ca0aab95fc | 362 | } |
tomas_dca | 0:56ca0aab95fc | 363 | |
tomas_dca | 0:56ca0aab95fc | 364 | break; |
tomas_dca | 0:56ca0aab95fc | 365 | } |
tomas_dca | 0:56ca0aab95fc | 366 | case pause: |
tomas_dca | 0:56ca0aab95fc | 367 | { |
tomas_dca | 0:56ca0aab95fc | 368 | // PAUSE |
tomas_dca | 0:56ca0aab95fc | 369 | |
tomas_dca | 0:56ca0aab95fc | 370 | if( BTN_L && !BTN_R && (time < timer.read_ms())) |
tomas_dca | 0:56ca0aab95fc | 371 | { |
tomas_dca | 0:56ca0aab95fc | 372 | // RESET LABYRINT |
tomas_dca | 0:56ca0aab95fc | 373 | |
tomas_dca | 0:56ca0aab95fc | 374 | color = color_orange; |
tomas_dca | 0:56ca0aab95fc | 375 | // prepare matrix for labyrint |
tomas_dca | 0:56ca0aab95fc | 376 | prepare_matrix(); |
tomas_dca | 0:56ca0aab95fc | 377 | wait(0.4f); |
tomas_dca | 0:56ca0aab95fc | 378 | |
tomas_dca | 0:56ca0aab95fc | 379 | // generate new playground |
tomas_dca | 0:56ca0aab95fc | 380 | reload_matrix(); |
tomas_dca | 0:56ca0aab95fc | 381 | wait(0.2f); |
tomas_dca | 0:56ca0aab95fc | 382 | |
tomas_dca | 0:56ca0aab95fc | 383 | color = color_red; |
tomas_dca | 0:56ca0aab95fc | 384 | |
tomas_dca | 0:56ca0aab95fc | 385 | } |
tomas_dca | 0:56ca0aab95fc | 386 | else |
tomas_dca | 0:56ca0aab95fc | 387 | // RETURN |
tomas_dca | 0:56ca0aab95fc | 388 | if( BTN_R && !BTN_L && (time < timer.read_ms())) |
tomas_dca | 0:56ca0aab95fc | 389 | { |
tomas_dca | 0:56ca0aab95fc | 390 | color = color_green; |
tomas_dca | 0:56ca0aab95fc | 391 | if(!learning) |
tomas_dca | 0:56ca0aab95fc | 392 | { |
tomas_dca | 0:56ca0aab95fc | 393 | game_state = game; |
tomas_dca | 0:56ca0aab95fc | 394 | |
tomas_dca | 0:56ca0aab95fc | 395 | // haaahaaaa :D |
tomas_dca | 0:56ca0aab95fc | 396 | score_cnt = 0; |
tomas_dca | 0:56ca0aab95fc | 397 | } |
tomas_dca | 0:56ca0aab95fc | 398 | else |
tomas_dca | 0:56ca0aab95fc | 399 | { |
tomas_dca | 0:56ca0aab95fc | 400 | game_state = learn; |
tomas_dca | 0:56ca0aab95fc | 401 | } |
tomas_dca | 0:56ca0aab95fc | 402 | |
tomas_dca | 0:56ca0aab95fc | 403 | time = timer.read_ms() + 200; //debounce |
tomas_dca | 0:56ca0aab95fc | 404 | } |
tomas_dca | 0:56ca0aab95fc | 405 | |
tomas_dca | 0:56ca0aab95fc | 406 | break; |
tomas_dca | 0:56ca0aab95fc | 407 | } |
tomas_dca | 0:56ca0aab95fc | 408 | case game: |
tomas_dca | 0:56ca0aab95fc | 409 | case learn: |
tomas_dca | 0:56ca0aab95fc | 410 | { |
tomas_dca | 0:56ca0aab95fc | 411 | // GAME |
tomas_dca | 0:56ca0aab95fc | 412 | |
tomas_dca | 0:56ca0aab95fc | 413 | if( BTN_L && !BTN_R && (time < timer.read_ms())) |
tomas_dca | 0:56ca0aab95fc | 414 | { |
tomas_dca | 0:56ca0aab95fc | 415 | // rotate block |
tomas_dca | 0:56ca0aab95fc | 416 | time = timer.read_ms() + 200; // debounce |
tomas_dca | 0:56ca0aab95fc | 417 | rotate_lab(row, column); |
tomas_dca | 0:56ca0aab95fc | 418 | } |
tomas_dca | 0:56ca0aab95fc | 419 | else |
tomas_dca | 0:56ca0aab95fc | 420 | if( BTN_R && !BTN_L && (time < timer.read_ms())) |
tomas_dca | 0:56ca0aab95fc | 421 | { |
tomas_dca | 0:56ca0aab95fc | 422 | // pause |
tomas_dca | 0:56ca0aab95fc | 423 | color = color_red; |
tomas_dca | 0:56ca0aab95fc | 424 | game_state = pause; |
tomas_dca | 0:56ca0aab95fc | 425 | |
tomas_dca | 0:56ca0aab95fc | 426 | time = timer.read_ms() + 200; // debounce |
tomas_dca | 0:56ca0aab95fc | 427 | // wait for action |
tomas_dca | 0:56ca0aab95fc | 428 | // RETURN or RESET |
tomas_dca | 0:56ca0aab95fc | 429 | } |
tomas_dca | 0:56ca0aab95fc | 430 | |
tomas_dca | 0:56ca0aab95fc | 431 | break; |
tomas_dca | 0:56ca0aab95fc | 432 | } |
tomas_dca | 0:56ca0aab95fc | 433 | case ready: |
tomas_dca | 0:56ca0aab95fc | 434 | { |
tomas_dca | 0:56ca0aab95fc | 435 | // RESET LAB |
tomas_dca | 0:56ca0aab95fc | 436 | |
tomas_dca | 0:56ca0aab95fc | 437 | color = color_orange; |
tomas_dca | 0:56ca0aab95fc | 438 | |
tomas_dca | 0:56ca0aab95fc | 439 | // prepare matrix for labyrint |
tomas_dca | 0:56ca0aab95fc | 440 | prepare_matrix(); |
tomas_dca | 0:56ca0aab95fc | 441 | wait(0.4f); |
tomas_dca | 0:56ca0aab95fc | 442 | |
tomas_dca | 0:56ca0aab95fc | 443 | // generate new playground |
tomas_dca | 0:56ca0aab95fc | 444 | reload_matrix(); |
tomas_dca | 0:56ca0aab95fc | 445 | wait(0.2f); |
tomas_dca | 0:56ca0aab95fc | 446 | |
tomas_dca | 0:56ca0aab95fc | 447 | game_state = pause; |
tomas_dca | 0:56ca0aab95fc | 448 | |
tomas_dca | 0:56ca0aab95fc | 449 | color = color_red; |
tomas_dca | 0:56ca0aab95fc | 450 | break; |
tomas_dca | 0:56ca0aab95fc | 451 | } |
tomas_dca | 0:56ca0aab95fc | 452 | default: |
tomas_dca | 0:56ca0aab95fc | 453 | { |
tomas_dca | 0:56ca0aab95fc | 454 | // TEST |
tomas_dca | 0:56ca0aab95fc | 455 | |
tomas_dca | 0:56ca0aab95fc | 456 | |
tomas_dca | 0:56ca0aab95fc | 457 | // arrows |
tomas_dca | 0:56ca0aab95fc | 458 | |
tomas_dca | 0:56ca0aab95fc | 459 | // set new 0 point (offset) |
tomas_dca | 0:56ca0aab95fc | 460 | if( BTN_R && !BTN_L && (time < timer.read_ms())) |
tomas_dca | 0:56ca0aab95fc | 461 | { |
tomas_dca | 0:56ca0aab95fc | 462 | color = color_green; |
tomas_dca | 0:56ca0aab95fc | 463 | game_state = save; |
tomas_dca | 0:56ca0aab95fc | 464 | wait(0.4f); |
tomas_dca | 0:56ca0aab95fc | 465 | game_state = test; |
tomas_dca | 0:56ca0aab95fc | 466 | color = color_orange; |
tomas_dca | 0:56ca0aab95fc | 467 | |
tomas_dca | 0:56ca0aab95fc | 468 | time = timer.read_ms() + 200; // debounce |
tomas_dca | 0:56ca0aab95fc | 469 | } |
tomas_dca | 0:56ca0aab95fc | 470 | |
tomas_dca | 0:56ca0aab95fc | 471 | if( BTN_L && !BTN_R && (time < timer.read_ms())) |
tomas_dca | 0:56ca0aab95fc | 472 | { |
tomas_dca | 0:56ca0aab95fc | 473 | // generate new playground |
tomas_dca | 0:56ca0aab95fc | 474 | game_state = ready; |
tomas_dca | 0:56ca0aab95fc | 475 | |
tomas_dca | 0:56ca0aab95fc | 476 | time = timer.read_ms() + 200; // debounce |
tomas_dca | 0:56ca0aab95fc | 477 | } |
tomas_dca | 0:56ca0aab95fc | 478 | } |
tomas_dca | 0:56ca0aab95fc | 479 | } |
tomas_dca | 0:56ca0aab95fc | 480 | } |
tomas_dca | 0:56ca0aab95fc | 481 | } |
tomas_dca | 0:56ca0aab95fc | 482 | |
tomas_dca | 0:56ca0aab95fc | 483 | |
tomas_dca | 0:56ca0aab95fc | 484 | void accelerometer() |
tomas_dca | 0:56ca0aab95fc | 485 | { |
tomas_dca | 0:56ca0aab95fc | 486 | // offset |
tomas_dca | 0:56ca0aab95fc | 487 | static float xAngle_offset = 0; |
tomas_dca | 0:56ca0aab95fc | 488 | static float yAngle_offset = 0; |
tomas_dca | 0:56ca0aab95fc | 489 | |
tomas_dca | 0:56ca0aab95fc | 490 | if((game_state == test) || (game_state == game) || (game_state == save) || (game_state == learn)) |
tomas_dca | 0:56ca0aab95fc | 491 | { |
tomas_dca | 0:56ca0aab95fc | 492 | float ax, ay, az; |
tomas_dca | 0:56ca0aab95fc | 493 | float xAngle, yAngle; |
tomas_dca | 0:56ca0aab95fc | 494 | |
tomas_dca | 0:56ca0aab95fc | 495 | ax = acc.getAccX(); |
tomas_dca | 0:56ca0aab95fc | 496 | ay = acc.getAccY(); |
tomas_dca | 0:56ca0aab95fc | 497 | az = acc.getAccZ(); |
tomas_dca | 0:56ca0aab95fc | 498 | |
tomas_dca | 0:56ca0aab95fc | 499 | |
tomas_dca | 0:56ca0aab95fc | 500 | xAngle = atan( ax / (sqrt((ay)*(ay) + (az)*(az)))) * 60; |
tomas_dca | 0:56ca0aab95fc | 501 | yAngle = atan( ay / (sqrt((ax)*(ax) + (az)*(az)))) * 60; |
tomas_dca | 0:56ca0aab95fc | 502 | |
tomas_dca | 0:56ca0aab95fc | 503 | if(game_state == save) |
tomas_dca | 0:56ca0aab95fc | 504 | { |
tomas_dca | 0:56ca0aab95fc | 505 | xAngle_offset = xAngle; |
tomas_dca | 0:56ca0aab95fc | 506 | yAngle_offset = yAngle; |
tomas_dca | 0:56ca0aab95fc | 507 | } |
tomas_dca | 0:56ca0aab95fc | 508 | else |
tomas_dca | 0:56ca0aab95fc | 509 | { |
tomas_dca | 0:56ca0aab95fc | 510 | xAngle -= xAngle_offset; |
tomas_dca | 0:56ca0aab95fc | 511 | yAngle -= yAngle_offset; |
tomas_dca | 0:56ca0aab95fc | 512 | } |
tomas_dca | 0:56ca0aab95fc | 513 | |
tomas_dca | 0:56ca0aab95fc | 514 | // find maximum |
tomas_dca | 0:56ca0aab95fc | 515 | if(abs(xAngle) >= abs(yAngle)) |
tomas_dca | 0:56ca0aab95fc | 516 | { |
tomas_dca | 0:56ca0aab95fc | 517 | if(xAngle >= MOVE_ANGLE) |
tomas_dca | 0:56ca0aab95fc | 518 | { |
tomas_dca | 0:56ca0aab95fc | 519 | // +X |
tomas_dca | 0:56ca0aab95fc | 520 | acc_dir = up; |
tomas_dca | 0:56ca0aab95fc | 521 | } |
tomas_dca | 0:56ca0aab95fc | 522 | else |
tomas_dca | 0:56ca0aab95fc | 523 | if(xAngle <= -MOVE_ANGLE) |
tomas_dca | 0:56ca0aab95fc | 524 | { |
tomas_dca | 0:56ca0aab95fc | 525 | // -X |
tomas_dca | 0:56ca0aab95fc | 526 | acc_dir = down; |
tomas_dca | 0:56ca0aab95fc | 527 | } |
tomas_dca | 0:56ca0aab95fc | 528 | else |
tomas_dca | 0:56ca0aab95fc | 529 | if(abs(xAngle) <= IDLE_ANGLE) |
tomas_dca | 0:56ca0aab95fc | 530 | { |
tomas_dca | 0:56ca0aab95fc | 531 | if(game_state == test) |
tomas_dca | 0:56ca0aab95fc | 532 | confirm_dir(); |
tomas_dca | 0:56ca0aab95fc | 533 | else |
tomas_dca | 0:56ca0aab95fc | 534 | move_cursor(); |
tomas_dca | 0:56ca0aab95fc | 535 | } |
tomas_dca | 0:56ca0aab95fc | 536 | } |
tomas_dca | 0:56ca0aab95fc | 537 | else |
tomas_dca | 0:56ca0aab95fc | 538 | { |
tomas_dca | 0:56ca0aab95fc | 539 | if(yAngle >= MOVE_ANGLE) |
tomas_dca | 0:56ca0aab95fc | 540 | { |
tomas_dca | 0:56ca0aab95fc | 541 | // +Y |
tomas_dca | 0:56ca0aab95fc | 542 | acc_dir = left; |
tomas_dca | 0:56ca0aab95fc | 543 | } |
tomas_dca | 0:56ca0aab95fc | 544 | else |
tomas_dca | 0:56ca0aab95fc | 545 | if(yAngle <= -MOVE_ANGLE) |
tomas_dca | 0:56ca0aab95fc | 546 | { |
tomas_dca | 0:56ca0aab95fc | 547 | // -Y |
tomas_dca | 0:56ca0aab95fc | 548 | acc_dir = right; |
tomas_dca | 0:56ca0aab95fc | 549 | } |
tomas_dca | 0:56ca0aab95fc | 550 | else |
tomas_dca | 0:56ca0aab95fc | 551 | if(abs(yAngle) <= IDLE_ANGLE) |
tomas_dca | 0:56ca0aab95fc | 552 | { |
tomas_dca | 0:56ca0aab95fc | 553 | if(game_state == test) |
tomas_dca | 0:56ca0aab95fc | 554 | confirm_dir(); |
tomas_dca | 0:56ca0aab95fc | 555 | else |
tomas_dca | 0:56ca0aab95fc | 556 | move_cursor(); |
tomas_dca | 0:56ca0aab95fc | 557 | } |
tomas_dca | 0:56ca0aab95fc | 558 | |
tomas_dca | 0:56ca0aab95fc | 559 | } |
tomas_dca | 0:56ca0aab95fc | 560 | |
tomas_dca | 0:56ca0aab95fc | 561 | if(acc_dir != idle) |
tomas_dca | 0:56ca0aab95fc | 562 | { |
tomas_dca | 0:56ca0aab95fc | 563 | if(game_state == test) |
tomas_dca | 0:56ca0aab95fc | 564 | { |
tomas_dca | 0:56ca0aab95fc | 565 | fill_matrix(template_arrow, led_ant); |
tomas_dca | 0:56ca0aab95fc | 566 | |
tomas_dca | 0:56ca0aab95fc | 567 | |
tomas_dca | 0:56ca0aab95fc | 568 | switch(acc_dir) |
tomas_dca | 0:56ca0aab95fc | 569 | { |
tomas_dca | 0:56ca0aab95fc | 570 | case down: |
tomas_dca | 0:56ca0aab95fc | 571 | rotate_matrix(); |
tomas_dca | 0:56ca0aab95fc | 572 | case right: |
tomas_dca | 0:56ca0aab95fc | 573 | rotate_matrix(); |
tomas_dca | 0:56ca0aab95fc | 574 | case up: |
tomas_dca | 0:56ca0aab95fc | 575 | rotate_matrix(); |
tomas_dca | 0:56ca0aab95fc | 576 | case left: |
tomas_dca | 0:56ca0aab95fc | 577 | break; |
tomas_dca | 0:56ca0aab95fc | 578 | default: |
tomas_dca | 0:56ca0aab95fc | 579 | fill_matrix(template_fill, led_free); |
tomas_dca | 0:56ca0aab95fc | 580 | } |
tomas_dca | 0:56ca0aab95fc | 581 | } |
tomas_dca | 0:56ca0aab95fc | 582 | } |
tomas_dca | 0:56ca0aab95fc | 583 | } |
tomas_dca | 0:56ca0aab95fc | 584 | } |
tomas_dca | 0:56ca0aab95fc | 585 | |
tomas_dca | 0:56ca0aab95fc | 586 | void move_cursor(void) |
tomas_dca | 0:56ca0aab95fc | 587 | { |
tomas_dca | 0:56ca0aab95fc | 588 | switch(acc_dir) |
tomas_dca | 0:56ca0aab95fc | 589 | { |
tomas_dca | 0:56ca0aab95fc | 590 | case up: |
tomas_dca | 0:56ca0aab95fc | 591 | if(row == 6) |
tomas_dca | 0:56ca0aab95fc | 592 | row = 0; |
tomas_dca | 0:56ca0aab95fc | 593 | else |
tomas_dca | 0:56ca0aab95fc | 594 | row +=2; |
tomas_dca | 0:56ca0aab95fc | 595 | break; |
tomas_dca | 0:56ca0aab95fc | 596 | case right: |
tomas_dca | 0:56ca0aab95fc | 597 | if(column == 6) |
tomas_dca | 0:56ca0aab95fc | 598 | column = 0; |
tomas_dca | 0:56ca0aab95fc | 599 | else |
tomas_dca | 0:56ca0aab95fc | 600 | column +=2; |
tomas_dca | 0:56ca0aab95fc | 601 | break; |
tomas_dca | 0:56ca0aab95fc | 602 | case down: |
tomas_dca | 0:56ca0aab95fc | 603 | if(row == 0) |
tomas_dca | 0:56ca0aab95fc | 604 | row = 6; |
tomas_dca | 0:56ca0aab95fc | 605 | else |
tomas_dca | 0:56ca0aab95fc | 606 | row -=2; |
tomas_dca | 0:56ca0aab95fc | 607 | break; |
tomas_dca | 0:56ca0aab95fc | 608 | case left: |
tomas_dca | 0:56ca0aab95fc | 609 | if(column == 0) |
tomas_dca | 0:56ca0aab95fc | 610 | column = 6; |
tomas_dca | 0:56ca0aab95fc | 611 | else |
tomas_dca | 0:56ca0aab95fc | 612 | column -=2; |
tomas_dca | 0:56ca0aab95fc | 613 | break; |
tomas_dca | 0:56ca0aab95fc | 614 | default: |
tomas_dca | 0:56ca0aab95fc | 615 | break; |
tomas_dca | 0:56ca0aab95fc | 616 | } |
tomas_dca | 0:56ca0aab95fc | 617 | acc_dir = idle; |
tomas_dca | 0:56ca0aab95fc | 618 | } |
tomas_dca | 0:56ca0aab95fc | 619 | |
tomas_dca | 0:56ca0aab95fc | 620 | void confirm_dir(void) |
tomas_dca | 0:56ca0aab95fc | 621 | { |
tomas_dca | 0:56ca0aab95fc | 622 | fill_matrix(template_arrow, led_lab); |
tomas_dca | 0:56ca0aab95fc | 623 | |
tomas_dca | 0:56ca0aab95fc | 624 | switch(acc_dir) |
tomas_dca | 0:56ca0aab95fc | 625 | { |
tomas_dca | 0:56ca0aab95fc | 626 | case down: |
tomas_dca | 0:56ca0aab95fc | 627 | rotate_matrix(); |
tomas_dca | 0:56ca0aab95fc | 628 | case right: |
tomas_dca | 0:56ca0aab95fc | 629 | rotate_matrix(); |
tomas_dca | 0:56ca0aab95fc | 630 | case up: |
tomas_dca | 0:56ca0aab95fc | 631 | rotate_matrix(); |
tomas_dca | 0:56ca0aab95fc | 632 | case left: |
tomas_dca | 0:56ca0aab95fc | 633 | break; |
tomas_dca | 0:56ca0aab95fc | 634 | default: |
tomas_dca | 0:56ca0aab95fc | 635 | fill_matrix(template_fill, led_free); |
tomas_dca | 0:56ca0aab95fc | 636 | } |
tomas_dca | 0:56ca0aab95fc | 637 | acc_dir = idle; |
tomas_dca | 0:56ca0aab95fc | 638 | } |
tomas_dca | 0:56ca0aab95fc | 639 | |
tomas_dca | 0:56ca0aab95fc | 640 | void show_matrix(void) |
tomas_dca | 0:56ca0aab95fc | 641 | { |
tomas_dca | 0:56ca0aab95fc | 642 | // labyrint block selection |
tomas_dca | 0:56ca0aab95fc | 643 | static uint8_t mask = 0; // on/off -> blink |
tomas_dca | 0:56ca0aab95fc | 644 | |
tomas_dca | 0:56ca0aab95fc | 645 | mask++; |
tomas_dca | 0:56ca0aab95fc | 646 | |
tomas_dca | 0:56ca0aab95fc | 647 | for(uint8_t j = 0; j < 8;j++) |
tomas_dca | 0:56ca0aab95fc | 648 | { |
tomas_dca | 0:56ca0aab95fc | 649 | ROW0 = 0x0001 & j; |
tomas_dca | 0:56ca0aab95fc | 650 | ROW1 = 0x0002 & j; |
tomas_dca | 0:56ca0aab95fc | 651 | ROW2 = 0x0004 & j; |
tomas_dca | 0:56ca0aab95fc | 652 | |
tomas_dca | 0:56ca0aab95fc | 653 | COLG0 = ~matrix[j][0] & led_lab; |
tomas_dca | 0:56ca0aab95fc | 654 | COLG1 = ~matrix[j][1] & led_lab; |
tomas_dca | 0:56ca0aab95fc | 655 | COLG2 = ~matrix[j][2] & led_lab; |
tomas_dca | 0:56ca0aab95fc | 656 | COLG3 = ~matrix[j][3] & led_lab; |
tomas_dca | 0:56ca0aab95fc | 657 | COLG4 = ~matrix[j][4] & led_lab; |
tomas_dca | 0:56ca0aab95fc | 658 | COLG5 = ~matrix[j][5] & led_lab; |
tomas_dca | 0:56ca0aab95fc | 659 | COLG6 = ~matrix[j][6] & led_lab; |
tomas_dca | 0:56ca0aab95fc | 660 | COLG7 = ~matrix[j][7] & led_lab; |
tomas_dca | 0:56ca0aab95fc | 661 | |
tomas_dca | 0:56ca0aab95fc | 662 | COLR0 = ~matrix[j][0] & led_ant; |
tomas_dca | 0:56ca0aab95fc | 663 | COLR1 = ~matrix[j][1] & led_ant; |
tomas_dca | 0:56ca0aab95fc | 664 | COLR2 = ~matrix[j][2] & led_ant; |
tomas_dca | 0:56ca0aab95fc | 665 | COLR3 = ~matrix[j][3] & led_ant; |
tomas_dca | 0:56ca0aab95fc | 666 | COLR4 = ~matrix[j][4] & led_ant; |
tomas_dca | 0:56ca0aab95fc | 667 | COLR5 = ~matrix[j][5] & led_ant; |
tomas_dca | 0:56ca0aab95fc | 668 | COLR6 = ~matrix[j][6] & led_ant; |
tomas_dca | 0:56ca0aab95fc | 669 | COLR7 = ~matrix[j][7] & led_ant; |
tomas_dca | 0:56ca0aab95fc | 670 | |
tomas_dca | 0:56ca0aab95fc | 671 | |
tomas_dca | 0:56ca0aab95fc | 672 | // blik cursor (block) |
tomas_dca | 0:56ca0aab95fc | 673 | if(((row == j) || ((row+1) == j)) && ((mask % 0x17) < 0xD) && ((game_state == game || (game_state == learn)))) |
tomas_dca | 0:56ca0aab95fc | 674 | { |
tomas_dca | 0:56ca0aab95fc | 675 | switch(column) |
tomas_dca | 0:56ca0aab95fc | 676 | { |
tomas_dca | 0:56ca0aab95fc | 677 | case 0: |
tomas_dca | 0:56ca0aab95fc | 678 | COLG0 = ~led_free; |
tomas_dca | 0:56ca0aab95fc | 679 | COLR0 = ~led_free; |
tomas_dca | 0:56ca0aab95fc | 680 | COLG1 = ~led_free; |
tomas_dca | 0:56ca0aab95fc | 681 | COLR1 = ~led_free; |
tomas_dca | 0:56ca0aab95fc | 682 | break; |
tomas_dca | 0:56ca0aab95fc | 683 | case 2: |
tomas_dca | 0:56ca0aab95fc | 684 | COLG2 = ~led_free; |
tomas_dca | 0:56ca0aab95fc | 685 | COLR2 = ~led_free; |
tomas_dca | 0:56ca0aab95fc | 686 | COLG3 = ~led_free; |
tomas_dca | 0:56ca0aab95fc | 687 | COLR3 = ~led_free; |
tomas_dca | 0:56ca0aab95fc | 688 | break; |
tomas_dca | 0:56ca0aab95fc | 689 | case 4: |
tomas_dca | 0:56ca0aab95fc | 690 | COLG4 = ~led_free; |
tomas_dca | 0:56ca0aab95fc | 691 | COLR4 = ~led_free; |
tomas_dca | 0:56ca0aab95fc | 692 | COLG5 = ~led_free; |
tomas_dca | 0:56ca0aab95fc | 693 | COLR5 = ~led_free; |
tomas_dca | 0:56ca0aab95fc | 694 | break; |
tomas_dca | 0:56ca0aab95fc | 695 | case 6: |
tomas_dca | 0:56ca0aab95fc | 696 | COLG6 = ~led_free; |
tomas_dca | 0:56ca0aab95fc | 697 | COLR6 = ~led_free; |
tomas_dca | 0:56ca0aab95fc | 698 | COLG7 = ~led_free; |
tomas_dca | 0:56ca0aab95fc | 699 | COLR7 = ~led_free; |
tomas_dca | 0:56ca0aab95fc | 700 | break; |
tomas_dca | 0:56ca0aab95fc | 701 | default: |
tomas_dca | 0:56ca0aab95fc | 702 | break; |
tomas_dca | 0:56ca0aab95fc | 703 | } |
tomas_dca | 0:56ca0aab95fc | 704 | } |
tomas_dca | 0:56ca0aab95fc | 705 | |
tomas_dca | 0:56ca0aab95fc | 706 | wait(brightness); |
tomas_dca | 0:56ca0aab95fc | 707 | |
tomas_dca | 0:56ca0aab95fc | 708 | COLG0 = ~led_free; |
tomas_dca | 0:56ca0aab95fc | 709 | COLG1 = ~led_free; |
tomas_dca | 0:56ca0aab95fc | 710 | COLG2 = ~led_free; |
tomas_dca | 0:56ca0aab95fc | 711 | COLG3 = ~led_free; |
tomas_dca | 0:56ca0aab95fc | 712 | COLG4 = ~led_free; |
tomas_dca | 0:56ca0aab95fc | 713 | COLG5 = ~led_free; |
tomas_dca | 0:56ca0aab95fc | 714 | COLG6 = ~led_free; |
tomas_dca | 0:56ca0aab95fc | 715 | COLG7 = ~led_free; |
tomas_dca | 0:56ca0aab95fc | 716 | |
tomas_dca | 0:56ca0aab95fc | 717 | COLR0 = ~led_free; |
tomas_dca | 0:56ca0aab95fc | 718 | COLR1 = ~led_free; |
tomas_dca | 0:56ca0aab95fc | 719 | COLR2 = ~led_free; |
tomas_dca | 0:56ca0aab95fc | 720 | COLR3 = ~led_free; |
tomas_dca | 0:56ca0aab95fc | 721 | COLR4 = ~led_free; |
tomas_dca | 0:56ca0aab95fc | 722 | COLR5 = ~led_free; |
tomas_dca | 0:56ca0aab95fc | 723 | COLR6 = ~led_free; |
tomas_dca | 0:56ca0aab95fc | 724 | COLR7 = ~led_free; |
tomas_dca | 0:56ca0aab95fc | 725 | } |
tomas_dca | 0:56ca0aab95fc | 726 | } |
tomas_dca | 0:56ca0aab95fc | 727 | |
tomas_dca | 0:56ca0aab95fc | 728 | void fill_matrix(uint64_t temp, uint8_t color) |
tomas_dca | 0:56ca0aab95fc | 729 | { |
tomas_dca | 0:56ca0aab95fc | 730 | for(uint8_t j = 0; j < 8;j++) |
tomas_dca | 0:56ca0aab95fc | 731 | { |
tomas_dca | 0:56ca0aab95fc | 732 | for(uint8_t i = 0; i < 8;i++) |
tomas_dca | 0:56ca0aab95fc | 733 | { |
tomas_dca | 0:56ca0aab95fc | 734 | matrix[j][i] = color * ( 0 < (temp & (0x8000000000000000>>((8*j)+i)))); // print template to the matrix |
tomas_dca | 0:56ca0aab95fc | 735 | } |
tomas_dca | 0:56ca0aab95fc | 736 | } |
tomas_dca | 0:56ca0aab95fc | 737 | } |
tomas_dca | 0:56ca0aab95fc | 738 | |
tomas_dca | 0:56ca0aab95fc | 739 | void rotate_matrix(void) |
tomas_dca | 0:56ca0aab95fc | 740 | { |
tomas_dca | 0:56ca0aab95fc | 741 | uint8_t temp[8][8]; |
tomas_dca | 0:56ca0aab95fc | 742 | |
tomas_dca | 0:56ca0aab95fc | 743 | for(uint8_t j = 0; j < 8;j++) |
tomas_dca | 0:56ca0aab95fc | 744 | { |
tomas_dca | 0:56ca0aab95fc | 745 | for(uint8_t i = 0; i < 8;i++) |
tomas_dca | 0:56ca0aab95fc | 746 | { |
tomas_dca | 0:56ca0aab95fc | 747 | temp[7-i][j] = matrix[j][i]; |
tomas_dca | 0:56ca0aab95fc | 748 | } |
tomas_dca | 0:56ca0aab95fc | 749 | } |
tomas_dca | 0:56ca0aab95fc | 750 | |
tomas_dca | 0:56ca0aab95fc | 751 | for(uint8_t j = 0; j < 8;j++) |
tomas_dca | 0:56ca0aab95fc | 752 | { |
tomas_dca | 0:56ca0aab95fc | 753 | for(uint8_t i = 0; i < 8;i++) |
tomas_dca | 0:56ca0aab95fc | 754 | { |
tomas_dca | 0:56ca0aab95fc | 755 | matrix[j][i] = temp[j][i]; |
tomas_dca | 0:56ca0aab95fc | 756 | } |
tomas_dca | 0:56ca0aab95fc | 757 | } |
tomas_dca | 0:56ca0aab95fc | 758 | } |
tomas_dca | 0:56ca0aab95fc | 759 | |
tomas_dca | 0:56ca0aab95fc | 760 | void rotate_lab(uint8_t lab_row, uint8_t lab_col) |
tomas_dca | 0:56ca0aab95fc | 761 | { |
tomas_dca | 0:56ca0aab95fc | 762 | // if block is labyrint only |
tomas_dca | 0:56ca0aab95fc | 763 | if(((matrix[lab_row][lab_col]%2) == 0) && ((matrix[lab_row+1][lab_col]%2) == 0) && ((matrix[lab_row][lab_col+1]%2) == 0) && ((matrix[lab_row+1][lab_col+1]%2) == 0)) |
tomas_dca | 0:56ca0aab95fc | 764 | { |
tomas_dca | 0:56ca0aab95fc | 765 | uint8_t temp; |
tomas_dca | 0:56ca0aab95fc | 766 | |
tomas_dca | 0:56ca0aab95fc | 767 | temp = matrix[lab_row][lab_col]; |
tomas_dca | 0:56ca0aab95fc | 768 | matrix[lab_row][lab_col] = matrix[lab_row][lab_col+1]; |
tomas_dca | 0:56ca0aab95fc | 769 | matrix[lab_row][lab_col+1] = matrix[lab_row+1][lab_col+1]; |
tomas_dca | 0:56ca0aab95fc | 770 | matrix[lab_row+1][lab_col+1] = matrix[lab_row+1][lab_col]; |
tomas_dca | 0:56ca0aab95fc | 771 | matrix[lab_row+1][lab_col] = temp; |
tomas_dca | 0:56ca0aab95fc | 772 | |
tomas_dca | 0:56ca0aab95fc | 773 | // change block type (because of turn clockwise and Anticlockwise too) |
tomas_dca | 0:56ca0aab95fc | 774 | if(matrix[lab_row][lab_col+1] == led_lab) |
tomas_dca | 0:56ca0aab95fc | 775 | { |
tomas_dca | 0:56ca0aab95fc | 776 | if((matrix[lab_row][lab_col] == led_lab) && (matrix[lab_row+1][lab_col] == led_lab)) |
tomas_dca | 0:56ca0aab95fc | 777 | { |
tomas_dca | 0:56ca0aab95fc | 778 | matrix[lab_row][lab_col] = led_free; |
tomas_dca | 0:56ca0aab95fc | 779 | matrix[lab_row][lab_col+1] = led_lab; |
tomas_dca | 0:56ca0aab95fc | 780 | matrix[lab_row+1][lab_col+1] = led_free; |
tomas_dca | 0:56ca0aab95fc | 781 | matrix[lab_row+1][lab_col] = led_free; |
tomas_dca | 0:56ca0aab95fc | 782 | } |
tomas_dca | 0:56ca0aab95fc | 783 | else |
tomas_dca | 0:56ca0aab95fc | 784 | if((matrix[lab_row][lab_col] == led_free) && (matrix[lab_row+1][lab_col] == led_free) && (matrix[lab_row+1][lab_col+1] == led_free)) |
tomas_dca | 0:56ca0aab95fc | 785 | { |
tomas_dca | 0:56ca0aab95fc | 786 | matrix[lab_row][lab_col] = led_lab; |
tomas_dca | 0:56ca0aab95fc | 787 | matrix[lab_row+1][lab_col] = led_lab; |
tomas_dca | 0:56ca0aab95fc | 788 | matrix[lab_row+1][lab_col+1] = led_free; |
tomas_dca | 0:56ca0aab95fc | 789 | } |
tomas_dca | 0:56ca0aab95fc | 790 | } |
tomas_dca | 0:56ca0aab95fc | 791 | |
tomas_dca | 0:56ca0aab95fc | 792 | } |
tomas_dca | 0:56ca0aab95fc | 793 | } |
tomas_dca | 0:56ca0aab95fc | 794 | |
tomas_dca | 0:56ca0aab95fc | 795 | void prepare_matrix(void) |
tomas_dca | 0:56ca0aab95fc | 796 | { |
tomas_dca | 0:56ca0aab95fc | 797 | // only used blocks are re-generate |
tomas_dca | 0:56ca0aab95fc | 798 | fill_matrix(template_fill, led_used); |
tomas_dca | 0:56ca0aab95fc | 799 | |
tomas_dca | 0:56ca0aab95fc | 800 | // reset counter |
tomas_dca | 0:56ca0aab95fc | 801 | if(game_state != game) |
tomas_dca | 0:56ca0aab95fc | 802 | score_cnt = 0; |
tomas_dca | 0:56ca0aab95fc | 803 | |
tomas_dca | 0:56ca0aab95fc | 804 | // start marker position |
tomas_dca | 0:56ca0aab95fc | 805 | row = 2; |
tomas_dca | 0:56ca0aab95fc | 806 | column = 2; |
tomas_dca | 0:56ca0aab95fc | 807 | |
tomas_dca | 0:56ca0aab95fc | 808 | // start symbol (home) |
tomas_dca | 0:56ca0aab95fc | 809 | matrix[4][2] = led_free; |
tomas_dca | 0:56ca0aab95fc | 810 | matrix[5][2] = led_free; |
tomas_dca | 0:56ca0aab95fc | 811 | matrix[4][3] = led_lab; |
tomas_dca | 0:56ca0aab95fc | 812 | matrix[5][3] = led_ant; |
tomas_dca | 0:56ca0aab95fc | 813 | |
tomas_dca | 0:56ca0aab95fc | 814 | // start ant position |
tomas_dca | 0:56ca0aab95fc | 815 | ant_row = 5; |
tomas_dca | 0:56ca0aab95fc | 816 | ant_column = 3; |
tomas_dca | 0:56ca0aab95fc | 817 | |
tomas_dca | 0:56ca0aab95fc | 818 | // new direction |
tomas_dca | 0:56ca0aab95fc | 819 | ant_dir = down; |
tomas_dca | 0:56ca0aab95fc | 820 | } |
tomas_dca | 0:56ca0aab95fc | 821 | |
tomas_dca | 0:56ca0aab95fc | 822 | void reload_matrix(void) |
tomas_dca | 0:56ca0aab95fc | 823 | { |
tomas_dca | 0:56ca0aab95fc | 824 | for(uint8_t j = 0; j < 4;j++) |
tomas_dca | 0:56ca0aab95fc | 825 | { |
tomas_dca | 0:56ca0aab95fc | 826 | for(uint8_t i = 0; i < 4;i++) |
tomas_dca | 0:56ca0aab95fc | 827 | { |
tomas_dca | 0:56ca0aab95fc | 828 | int8_t block; |
tomas_dca | 0:56ca0aab95fc | 829 | int8_t shift; |
tomas_dca | 0:56ca0aab95fc | 830 | |
tomas_dca | 0:56ca0aab95fc | 831 | // if labyrint part == used => generate new part |
tomas_dca | 0:56ca0aab95fc | 832 | if((matrix[j*2][i*2] == led_used) && (matrix[(j*2) + 1][i*2] == led_used) && (matrix[(j*2) + 1][(i*2) + 1] == led_used) && (matrix[j*2][(i*2) + 1] == led_used)) |
tomas_dca | 0:56ca0aab95fc | 833 | { |
tomas_dca | 0:56ca0aab95fc | 834 | switch( rand() % 3 ) |
tomas_dca | 0:56ca0aab95fc | 835 | { |
tomas_dca | 0:56ca0aab95fc | 836 | case 0: |
tomas_dca | 0:56ca0aab95fc | 837 | block = lab_turn_big; |
tomas_dca | 0:56ca0aab95fc | 838 | break; |
tomas_dca | 0:56ca0aab95fc | 839 | case 1: |
tomas_dca | 0:56ca0aab95fc | 840 | block = lab_turn_small; |
tomas_dca | 0:56ca0aab95fc | 841 | break; |
tomas_dca | 0:56ca0aab95fc | 842 | case 2: |
tomas_dca | 0:56ca0aab95fc | 843 | block = lab_straight; |
tomas_dca | 0:56ca0aab95fc | 844 | break; |
tomas_dca | 0:56ca0aab95fc | 845 | default: |
tomas_dca | 0:56ca0aab95fc | 846 | block = 0x0f; |
tomas_dca | 0:56ca0aab95fc | 847 | } |
tomas_dca | 0:56ca0aab95fc | 848 | |
tomas_dca | 0:56ca0aab95fc | 849 | shift = rand() % 4; |
tomas_dca | 0:56ca0aab95fc | 850 | matrix[2*j][2*i] = led_lab * ( 1 & block >> (shift % 4)); // 0 |
tomas_dca | 0:56ca0aab95fc | 851 | matrix[2*j][(2*i)+1] = led_lab * ( 1 & (block >> (++shift % 4))); // 1 |
tomas_dca | 0:56ca0aab95fc | 852 | matrix[(2*j)+1][2*i] = led_lab * ( 1 & (block >> (++shift % 4))); // 2 |
tomas_dca | 0:56ca0aab95fc | 853 | matrix[(2*j)+1][(2*i)+1] = led_lab * ( 1 & (block >> (++shift % 4))); // 3 |
tomas_dca | 0:56ca0aab95fc | 854 | |
tomas_dca | 0:56ca0aab95fc | 855 | // one block == one point |
tomas_dca | 0:56ca0aab95fc | 856 | if(game_state == game) |
tomas_dca | 0:56ca0aab95fc | 857 | score_cnt++; |
tomas_dca | 0:56ca0aab95fc | 858 | } |
tomas_dca | 0:56ca0aab95fc | 859 | } |
tomas_dca | 0:56ca0aab95fc | 860 | } |
tomas_dca | 0:56ca0aab95fc | 861 | } |
tomas_dca | 0:56ca0aab95fc | 862 | |
tomas_dca | 0:56ca0aab95fc | 863 | void ant_move(void) |
tomas_dca | 0:56ca0aab95fc | 864 | { |
tomas_dca | 0:56ca0aab95fc | 865 | // ant_dir |
tomas_dca | 0:56ca0aab95fc | 866 | // enum left(1), up(2), right(3), down(4) |
tomas_dca | 0:56ca0aab95fc | 867 | |
tomas_dca | 0:56ca0aab95fc | 868 | |
tomas_dca | 0:56ca0aab95fc | 869 | if((game_state == game) || (game_state == learn)) |
tomas_dca | 0:56ca0aab95fc | 870 | { |
tomas_dca | 0:56ca0aab95fc | 871 | |
tomas_dca | 0:56ca0aab95fc | 872 | // old pixel |
tomas_dca | 0:56ca0aab95fc | 873 | matrix[ant_row][ant_column] = led_used; |
tomas_dca | 0:56ca0aab95fc | 874 | |
tomas_dca | 0:56ca0aab95fc | 875 | // find new pixel |
tomas_dca | 0:56ca0aab95fc | 876 | if((ant_dir % 2) == 0) |
tomas_dca | 0:56ca0aab95fc | 877 | { |
tomas_dca | 0:56ca0aab95fc | 878 | // up, down |
tomas_dca | 0:56ca0aab95fc | 879 | if(((ant_row + (ant_dir == down)) % 2) == 0) |
tomas_dca | 0:56ca0aab95fc | 880 | { |
tomas_dca | 0:56ca0aab95fc | 881 | // 1. type move |
tomas_dca | 0:56ca0aab95fc | 882 | /* | str in */ if(matrix[ant_row + 1 - (2 * (ant_dir == down))][ant_column] == led_lab) |
tomas_dca | 0:56ca0aab95fc | 883 | { |
tomas_dca | 0:56ca0aab95fc | 884 | // go straight (in block) |
tomas_dca | 0:56ca0aab95fc | 885 | // ant_dir = ant_dir; |
tomas_dca | 0:56ca0aab95fc | 886 | ant_row += 1 - (2 * (ant_dir == down)); |
tomas_dca | 0:56ca0aab95fc | 887 | } |
tomas_dca | 0:56ca0aab95fc | 888 | else |
tomas_dca | 0:56ca0aab95fc | 889 | { |
tomas_dca | 0:56ca0aab95fc | 890 | /* | turn out */ if((matrix[ant_row][ant_column - 1 + (2 * (ant_dir == down))] == led_lab ) && (matrix[ant_row + 1 - (2 * (ant_row % 2))][ant_column - 1 + (2 * (ant_dir == down))] == led_free )) |
tomas_dca | 0:56ca0aab95fc | 891 | { |
tomas_dca | 0:56ca0aab95fc | 892 | // mark used block |
tomas_dca | 0:56ca0aab95fc | 893 | matrix[ant_row + 1 - (2* (ant_row % 2))][ant_column] = led_used; |
tomas_dca | 0:56ca0aab95fc | 894 | matrix[ant_row][ant_column + 1 - (2* (ant_column % 2))] = led_used; |
tomas_dca | 0:56ca0aab95fc | 895 | matrix[ant_row + 1 - (2* (ant_row % 2))][ant_column + 1 - (2* (ant_column % 2))] = led_used; |
tomas_dca | 0:56ca0aab95fc | 896 | |
tomas_dca | 0:56ca0aab95fc | 897 | if((ant_column % 2) == 0) |
tomas_dca | 0:56ca0aab95fc | 898 | { |
tomas_dca | 0:56ca0aab95fc | 899 | ant_dir = left; |
tomas_dca | 0:56ca0aab95fc | 900 | } |
tomas_dca | 0:56ca0aab95fc | 901 | else |
tomas_dca | 0:56ca0aab95fc | 902 | { |
tomas_dca | 0:56ca0aab95fc | 903 | ant_dir = right; |
tomas_dca | 0:56ca0aab95fc | 904 | } |
tomas_dca | 0:56ca0aab95fc | 905 | |
tomas_dca | 0:56ca0aab95fc | 906 | // turn (out block) |
tomas_dca | 0:56ca0aab95fc | 907 | ant_column += -1 + (2 * (ant_column % 2)); |
tomas_dca | 0:56ca0aab95fc | 908 | } |
tomas_dca | 0:56ca0aab95fc | 909 | else |
tomas_dca | 0:56ca0aab95fc | 910 | // reload matrix |
tomas_dca | 0:56ca0aab95fc | 911 | if((ant_column == 7) || (ant_column == 0)) |
tomas_dca | 0:56ca0aab95fc | 912 | { |
tomas_dca | 0:56ca0aab95fc | 913 | if((matrix[ant_row][7 * (ant_column != 7)] == led_lab) && (matrix[ant_row + 1 - (2 * (ant_row % 2))][7 * (ant_column != 7)] == led_free)) |
tomas_dca | 0:56ca0aab95fc | 914 | { |
tomas_dca | 0:56ca0aab95fc | 915 | // mark used block |
tomas_dca | 0:56ca0aab95fc | 916 | matrix[ant_row + 1 - (2* (ant_row % 2))][ant_column] = led_used; |
tomas_dca | 0:56ca0aab95fc | 917 | matrix[ant_row][ant_column + 1 - (2* (ant_column % 2))] = led_used; |
tomas_dca | 0:56ca0aab95fc | 918 | matrix[ant_row + 1 - (2* (ant_row % 2))][ant_column + 1 - (2* (ant_column % 2))] = led_used; |
tomas_dca | 0:56ca0aab95fc | 919 | |
tomas_dca | 0:56ca0aab95fc | 920 | reload_matrix(); |
tomas_dca | 0:56ca0aab95fc | 921 | |
tomas_dca | 0:56ca0aab95fc | 922 | if(ant_column == 0) |
tomas_dca | 0:56ca0aab95fc | 923 | { |
tomas_dca | 0:56ca0aab95fc | 924 | ant_column = 7; |
tomas_dca | 0:56ca0aab95fc | 925 | ant_dir = left; |
tomas_dca | 0:56ca0aab95fc | 926 | } |
tomas_dca | 0:56ca0aab95fc | 927 | else |
tomas_dca | 0:56ca0aab95fc | 928 | { |
tomas_dca | 0:56ca0aab95fc | 929 | ant_column = 0; |
tomas_dca | 0:56ca0aab95fc | 930 | ant_dir = right; |
tomas_dca | 0:56ca0aab95fc | 931 | } |
tomas_dca | 0:56ca0aab95fc | 932 | } |
tomas_dca | 0:56ca0aab95fc | 933 | else |
tomas_dca | 0:56ca0aab95fc | 934 | { |
tomas_dca | 0:56ca0aab95fc | 935 | // GAME OVER |
tomas_dca | 0:56ca0aab95fc | 936 | if(game_state == game) |
tomas_dca | 0:56ca0aab95fc | 937 | game_state = score; |
tomas_dca | 0:56ca0aab95fc | 938 | } |
tomas_dca | 0:56ca0aab95fc | 939 | } |
tomas_dca | 0:56ca0aab95fc | 940 | else |
tomas_dca | 0:56ca0aab95fc | 941 | { |
tomas_dca | 0:56ca0aab95fc | 942 | // GAME OVER |
tomas_dca | 0:56ca0aab95fc | 943 | if(game_state == game) |
tomas_dca | 0:56ca0aab95fc | 944 | game_state = score; |
tomas_dca | 0:56ca0aab95fc | 945 | } |
tomas_dca | 0:56ca0aab95fc | 946 | } |
tomas_dca | 0:56ca0aab95fc | 947 | } |
tomas_dca | 0:56ca0aab95fc | 948 | else |
tomas_dca | 0:56ca0aab95fc | 949 | if(((ant_row + (ant_dir == down)) % 2) == 1) |
tomas_dca | 0:56ca0aab95fc | 950 | { |
tomas_dca | 0:56ca0aab95fc | 951 | // 2. type move |
tomas_dca | 0:56ca0aab95fc | 952 | /* | turn in */ if(matrix[ant_row][ant_column + 1 - (2 * (ant_column % 2))] == led_lab) |
tomas_dca | 0:56ca0aab95fc | 953 | { |
tomas_dca | 0:56ca0aab95fc | 954 | if((ant_column % 2) == 0) |
tomas_dca | 0:56ca0aab95fc | 955 | { |
tomas_dca | 0:56ca0aab95fc | 956 | ant_dir = right; |
tomas_dca | 0:56ca0aab95fc | 957 | } |
tomas_dca | 0:56ca0aab95fc | 958 | else |
tomas_dca | 0:56ca0aab95fc | 959 | { |
tomas_dca | 0:56ca0aab95fc | 960 | ant_dir = left; |
tomas_dca | 0:56ca0aab95fc | 961 | } |
tomas_dca | 0:56ca0aab95fc | 962 | |
tomas_dca | 0:56ca0aab95fc | 963 | // turn (in block) |
tomas_dca | 0:56ca0aab95fc | 964 | ant_column += 1 - (2 * (ant_column % 2)); |
tomas_dca | 0:56ca0aab95fc | 965 | |
tomas_dca | 0:56ca0aab95fc | 966 | } |
tomas_dca | 0:56ca0aab95fc | 967 | else |
tomas_dca | 0:56ca0aab95fc | 968 | { |
tomas_dca | 0:56ca0aab95fc | 969 | // go straight (out block) |
tomas_dca | 0:56ca0aab95fc | 970 | /* | str out */ |
tomas_dca | 0:56ca0aab95fc | 971 | if((matrix[ant_row + 1 - (2 * (ant_dir == down))][ant_column] == led_lab) && (matrix[ant_row + 1 - (2 * (ant_dir == down))][ant_column + 1 - (2 * (ant_column % 2))] == led_free)) |
tomas_dca | 0:56ca0aab95fc | 972 | { |
tomas_dca | 0:56ca0aab95fc | 973 | // mark used block |
tomas_dca | 0:56ca0aab95fc | 974 | matrix[ant_row + 1 - (2* (ant_row % 2))][ant_column] = led_used; |
tomas_dca | 0:56ca0aab95fc | 975 | matrix[ant_row][ant_column + 1 - (2* (ant_column % 2))] = led_used; |
tomas_dca | 0:56ca0aab95fc | 976 | matrix[ant_row + 1 - (2* (ant_row % 2))][ant_column + 1 - (2* (ant_column % 2))] = led_used; |
tomas_dca | 0:56ca0aab95fc | 977 | |
tomas_dca | 0:56ca0aab95fc | 978 | // ant_dir = ant_dir; |
tomas_dca | 0:56ca0aab95fc | 979 | ant_row += 1 - (2 * (ant_dir == down)); |
tomas_dca | 0:56ca0aab95fc | 980 | } |
tomas_dca | 0:56ca0aab95fc | 981 | else |
tomas_dca | 0:56ca0aab95fc | 982 | // reload matrix |
tomas_dca | 0:56ca0aab95fc | 983 | if((ant_row == 7) || (ant_row == 0)) |
tomas_dca | 0:56ca0aab95fc | 984 | { |
tomas_dca | 0:56ca0aab95fc | 985 | if((matrix[7 * (ant_row != 7)][ant_column] == led_lab) && (matrix[7 * (ant_row != 7)][ant_column + 1 - (2 * (ant_column % 2))] == led_free)) |
tomas_dca | 0:56ca0aab95fc | 986 | { |
tomas_dca | 0:56ca0aab95fc | 987 | // mark used block |
tomas_dca | 0:56ca0aab95fc | 988 | matrix[ant_row + 1 - (2* (ant_row % 2))][ant_column] = led_used; |
tomas_dca | 0:56ca0aab95fc | 989 | matrix[ant_row][ant_column + 1 - (2* (ant_column % 2))] = led_used; |
tomas_dca | 0:56ca0aab95fc | 990 | matrix[ant_row + 1 - (2* (ant_row % 2))][ant_column + 1 - (2* (ant_column % 2))] = led_used; |
tomas_dca | 0:56ca0aab95fc | 991 | |
tomas_dca | 0:56ca0aab95fc | 992 | reload_matrix(); |
tomas_dca | 0:56ca0aab95fc | 993 | |
tomas_dca | 0:56ca0aab95fc | 994 | if(ant_dir == down) |
tomas_dca | 0:56ca0aab95fc | 995 | ant_row = 7; |
tomas_dca | 0:56ca0aab95fc | 996 | else |
tomas_dca | 0:56ca0aab95fc | 997 | ant_row = 0; |
tomas_dca | 0:56ca0aab95fc | 998 | } |
tomas_dca | 0:56ca0aab95fc | 999 | else |
tomas_dca | 0:56ca0aab95fc | 1000 | { |
tomas_dca | 0:56ca0aab95fc | 1001 | // GAME OVER |
tomas_dca | 0:56ca0aab95fc | 1002 | if(game_state == game) |
tomas_dca | 0:56ca0aab95fc | 1003 | game_state = score; |
tomas_dca | 0:56ca0aab95fc | 1004 | } |
tomas_dca | 0:56ca0aab95fc | 1005 | } |
tomas_dca | 0:56ca0aab95fc | 1006 | else |
tomas_dca | 0:56ca0aab95fc | 1007 | { |
tomas_dca | 0:56ca0aab95fc | 1008 | // GAME OVER |
tomas_dca | 0:56ca0aab95fc | 1009 | if(game_state == game) |
tomas_dca | 0:56ca0aab95fc | 1010 | game_state = score; |
tomas_dca | 0:56ca0aab95fc | 1011 | } |
tomas_dca | 0:56ca0aab95fc | 1012 | } |
tomas_dca | 0:56ca0aab95fc | 1013 | } |
tomas_dca | 0:56ca0aab95fc | 1014 | |
tomas_dca | 0:56ca0aab95fc | 1015 | } |
tomas_dca | 0:56ca0aab95fc | 1016 | // right, left |
tomas_dca | 0:56ca0aab95fc | 1017 | else |
tomas_dca | 0:56ca0aab95fc | 1018 | { |
tomas_dca | 0:56ca0aab95fc | 1019 | if(((ant_column + (ant_dir == right)) % 2) == 1) |
tomas_dca | 0:56ca0aab95fc | 1020 | { |
tomas_dca | 0:56ca0aab95fc | 1021 | // 1. type move |
tomas_dca | 0:56ca0aab95fc | 1022 | /* - str in */ |
tomas_dca | 0:56ca0aab95fc | 1023 | if(matrix[ant_row][ant_column - 1 + (2 * ( ant_dir == right))] == led_lab ) |
tomas_dca | 0:56ca0aab95fc | 1024 | { |
tomas_dca | 0:56ca0aab95fc | 1025 | // go straight (in block) |
tomas_dca | 0:56ca0aab95fc | 1026 | // ant_dir = ant_dir; |
tomas_dca | 0:56ca0aab95fc | 1027 | ant_column += - 1 + (2 * ( ant_dir == right)); |
tomas_dca | 0:56ca0aab95fc | 1028 | |
tomas_dca | 0:56ca0aab95fc | 1029 | } |
tomas_dca | 0:56ca0aab95fc | 1030 | else |
tomas_dca | 0:56ca0aab95fc | 1031 | /* - turn out */ |
tomas_dca | 0:56ca0aab95fc | 1032 | if((matrix[ant_row - 1 + (2 * (ant_row % 2 ))][ant_column] == led_lab ) && (matrix[ant_row - 1 + (2 * (ant_row % 2 ))][ant_column - 1 + (2 * (ant_dir == right))] == led_free )) |
tomas_dca | 0:56ca0aab95fc | 1033 | { |
tomas_dca | 0:56ca0aab95fc | 1034 | // mark used block |
tomas_dca | 0:56ca0aab95fc | 1035 | matrix[ant_row + 1 - (2* (ant_row % 2))][ant_column] = led_used; |
tomas_dca | 0:56ca0aab95fc | 1036 | matrix[ant_row][ant_column + 1 - (2* (ant_column % 2))] = led_used; |
tomas_dca | 0:56ca0aab95fc | 1037 | matrix[ant_row + 1 - (2* (ant_row % 2))][ant_column + 1 - (2* (ant_column % 2))] = led_used; |
tomas_dca | 0:56ca0aab95fc | 1038 | |
tomas_dca | 0:56ca0aab95fc | 1039 | if((ant_row % 2) == 0) |
tomas_dca | 0:56ca0aab95fc | 1040 | { |
tomas_dca | 0:56ca0aab95fc | 1041 | ant_dir = down; |
tomas_dca | 0:56ca0aab95fc | 1042 | } |
tomas_dca | 0:56ca0aab95fc | 1043 | else |
tomas_dca | 0:56ca0aab95fc | 1044 | { |
tomas_dca | 0:56ca0aab95fc | 1045 | ant_dir = up; |
tomas_dca | 0:56ca0aab95fc | 1046 | } |
tomas_dca | 0:56ca0aab95fc | 1047 | |
tomas_dca | 0:56ca0aab95fc | 1048 | // turn (out block) |
tomas_dca | 0:56ca0aab95fc | 1049 | ant_row += -1 + (2 * (ant_row % 2)); |
tomas_dca | 0:56ca0aab95fc | 1050 | |
tomas_dca | 0:56ca0aab95fc | 1051 | } |
tomas_dca | 0:56ca0aab95fc | 1052 | else |
tomas_dca | 0:56ca0aab95fc | 1053 | // reload matrix |
tomas_dca | 0:56ca0aab95fc | 1054 | if((ant_row == 7) || (ant_row == 0)) |
tomas_dca | 0:56ca0aab95fc | 1055 | { |
tomas_dca | 0:56ca0aab95fc | 1056 | if((matrix[7 * (ant_row != 7)][ant_column] == led_lab) && (matrix[7 * (ant_row != 7)][ant_column + 1 - (2 * (ant_column % 2))] == led_free)) |
tomas_dca | 0:56ca0aab95fc | 1057 | { |
tomas_dca | 0:56ca0aab95fc | 1058 | // mark used block |
tomas_dca | 0:56ca0aab95fc | 1059 | matrix[ant_row + 1 - (2* (ant_row % 2))][ant_column] = led_used; |
tomas_dca | 0:56ca0aab95fc | 1060 | matrix[ant_row][ant_column + 1 - (2* (ant_column % 2))] = led_used; |
tomas_dca | 0:56ca0aab95fc | 1061 | matrix[ant_row + 1 - (2* (ant_row % 2))][ant_column + 1 - (2* (ant_column % 2))] = led_used; |
tomas_dca | 0:56ca0aab95fc | 1062 | |
tomas_dca | 0:56ca0aab95fc | 1063 | reload_matrix(); |
tomas_dca | 0:56ca0aab95fc | 1064 | |
tomas_dca | 0:56ca0aab95fc | 1065 | if(ant_row == 0) |
tomas_dca | 0:56ca0aab95fc | 1066 | { |
tomas_dca | 0:56ca0aab95fc | 1067 | ant_row = 7; |
tomas_dca | 0:56ca0aab95fc | 1068 | ant_dir = down; |
tomas_dca | 0:56ca0aab95fc | 1069 | } |
tomas_dca | 0:56ca0aab95fc | 1070 | else |
tomas_dca | 0:56ca0aab95fc | 1071 | { |
tomas_dca | 0:56ca0aab95fc | 1072 | ant_row = 0; |
tomas_dca | 0:56ca0aab95fc | 1073 | ant_dir = up; |
tomas_dca | 0:56ca0aab95fc | 1074 | } |
tomas_dca | 0:56ca0aab95fc | 1075 | } |
tomas_dca | 0:56ca0aab95fc | 1076 | else |
tomas_dca | 0:56ca0aab95fc | 1077 | { |
tomas_dca | 0:56ca0aab95fc | 1078 | // GAME OVER |
tomas_dca | 0:56ca0aab95fc | 1079 | if(game_state == game) |
tomas_dca | 0:56ca0aab95fc | 1080 | game_state = score; |
tomas_dca | 0:56ca0aab95fc | 1081 | } |
tomas_dca | 0:56ca0aab95fc | 1082 | } |
tomas_dca | 0:56ca0aab95fc | 1083 | else |
tomas_dca | 0:56ca0aab95fc | 1084 | { |
tomas_dca | 0:56ca0aab95fc | 1085 | // GAME OVER |
tomas_dca | 0:56ca0aab95fc | 1086 | if(game_state == game) |
tomas_dca | 0:56ca0aab95fc | 1087 | game_state = score; |
tomas_dca | 0:56ca0aab95fc | 1088 | } |
tomas_dca | 0:56ca0aab95fc | 1089 | } |
tomas_dca | 0:56ca0aab95fc | 1090 | else |
tomas_dca | 0:56ca0aab95fc | 1091 | { |
tomas_dca | 0:56ca0aab95fc | 1092 | // 2. type move |
tomas_dca | 0:56ca0aab95fc | 1093 | /* - turn in */ if(matrix[ant_row + 1 - (2 * (ant_dir == right))][ant_column] == led_lab) |
tomas_dca | 0:56ca0aab95fc | 1094 | { |
tomas_dca | 0:56ca0aab95fc | 1095 | if((ant_row % 2) == 0) |
tomas_dca | 0:56ca0aab95fc | 1096 | { |
tomas_dca | 0:56ca0aab95fc | 1097 | ant_dir = up; |
tomas_dca | 0:56ca0aab95fc | 1098 | } |
tomas_dca | 0:56ca0aab95fc | 1099 | else |
tomas_dca | 0:56ca0aab95fc | 1100 | { |
tomas_dca | 0:56ca0aab95fc | 1101 | ant_dir = down; |
tomas_dca | 0:56ca0aab95fc | 1102 | } |
tomas_dca | 0:56ca0aab95fc | 1103 | |
tomas_dca | 0:56ca0aab95fc | 1104 | // turn (in block) |
tomas_dca | 0:56ca0aab95fc | 1105 | ant_row += 1 - (2 * (ant_row % 2)); |
tomas_dca | 0:56ca0aab95fc | 1106 | } |
tomas_dca | 0:56ca0aab95fc | 1107 | /* - str out */ |
tomas_dca | 0:56ca0aab95fc | 1108 | else |
tomas_dca | 0:56ca0aab95fc | 1109 | if((matrix[ant_row][ant_column - 1 + (2 * ( ant_dir == right))] == led_lab) && (matrix[ant_row + 1 - (2 * (ant_row % 2))][ant_column - 1 + (2 * ( ant_dir == right))] == led_free)) |
tomas_dca | 0:56ca0aab95fc | 1110 | { |
tomas_dca | 0:56ca0aab95fc | 1111 | // mark used block |
tomas_dca | 0:56ca0aab95fc | 1112 | matrix[ant_row + 1 - (2* (ant_row % 2))][ant_column] = led_used; |
tomas_dca | 0:56ca0aab95fc | 1113 | matrix[ant_row][ant_column + 1 - (2* (ant_column % 2))] = led_used; |
tomas_dca | 0:56ca0aab95fc | 1114 | matrix[ant_row + 1 - (2* (ant_row % 2))][ant_column + 1 - (2* (ant_column % 2))] = led_used; |
tomas_dca | 0:56ca0aab95fc | 1115 | |
tomas_dca | 0:56ca0aab95fc | 1116 | // go straight (out block) |
tomas_dca | 0:56ca0aab95fc | 1117 | ant_column += -1 + (2 * ( ant_dir == right)); |
tomas_dca | 0:56ca0aab95fc | 1118 | |
tomas_dca | 0:56ca0aab95fc | 1119 | // ant_dir = ant_dir; |
tomas_dca | 0:56ca0aab95fc | 1120 | } |
tomas_dca | 0:56ca0aab95fc | 1121 | else |
tomas_dca | 0:56ca0aab95fc | 1122 | // reload matrix |
tomas_dca | 0:56ca0aab95fc | 1123 | if((ant_column == 7) || (ant_column == 0)) |
tomas_dca | 0:56ca0aab95fc | 1124 | { |
tomas_dca | 0:56ca0aab95fc | 1125 | if((matrix[ant_row][7 * (ant_column != 7)] == led_lab) && (matrix[ant_row + 1 - (2 * (ant_row % 2))][7 * (ant_column != 7)] == led_free)) |
tomas_dca | 0:56ca0aab95fc | 1126 | { |
tomas_dca | 0:56ca0aab95fc | 1127 | // mark used block |
tomas_dca | 0:56ca0aab95fc | 1128 | matrix[ant_row + 1 - (2* (ant_row % 2))][ant_column] = led_used; |
tomas_dca | 0:56ca0aab95fc | 1129 | matrix[ant_row][ant_column + 1 - (2* (ant_column % 2))] = led_used; |
tomas_dca | 0:56ca0aab95fc | 1130 | matrix[ant_row + 1 - (2* (ant_row % 2))][ant_column + 1 - (2* (ant_column % 2))] = led_used; |
tomas_dca | 0:56ca0aab95fc | 1131 | |
tomas_dca | 0:56ca0aab95fc | 1132 | reload_matrix(); |
tomas_dca | 0:56ca0aab95fc | 1133 | |
tomas_dca | 0:56ca0aab95fc | 1134 | if(ant_dir == left) |
tomas_dca | 0:56ca0aab95fc | 1135 | ant_column = 7; |
tomas_dca | 0:56ca0aab95fc | 1136 | else |
tomas_dca | 0:56ca0aab95fc | 1137 | ant_column = 0; |
tomas_dca | 0:56ca0aab95fc | 1138 | } |
tomas_dca | 0:56ca0aab95fc | 1139 | else |
tomas_dca | 0:56ca0aab95fc | 1140 | { |
tomas_dca | 0:56ca0aab95fc | 1141 | // GAME OVER |
tomas_dca | 0:56ca0aab95fc | 1142 | if(game_state == game) |
tomas_dca | 0:56ca0aab95fc | 1143 | game_state = score; |
tomas_dca | 0:56ca0aab95fc | 1144 | } |
tomas_dca | 0:56ca0aab95fc | 1145 | } |
tomas_dca | 0:56ca0aab95fc | 1146 | else |
tomas_dca | 0:56ca0aab95fc | 1147 | { |
tomas_dca | 0:56ca0aab95fc | 1148 | // GAME OVER |
tomas_dca | 0:56ca0aab95fc | 1149 | if(game_state == game) |
tomas_dca | 0:56ca0aab95fc | 1150 | game_state = score; |
tomas_dca | 0:56ca0aab95fc | 1151 | } |
tomas_dca | 0:56ca0aab95fc | 1152 | } |
tomas_dca | 0:56ca0aab95fc | 1153 | } |
tomas_dca | 0:56ca0aab95fc | 1154 | matrix[ant_row][ant_column] = led_ant; |
tomas_dca | 0:56ca0aab95fc | 1155 | } |
tomas_dca | 0:56ca0aab95fc | 1156 | } |
tomas_dca | 0:56ca0aab95fc | 1157 | |
tomas_dca | 0:56ca0aab95fc | 1158 | uint32_t translate(uint8_t number) |
tomas_dca | 0:56ca0aab95fc | 1159 | { |
tomas_dca | 0:56ca0aab95fc | 1160 | uint32_t ret; |
tomas_dca | 0:56ca0aab95fc | 1161 | |
tomas_dca | 0:56ca0aab95fc | 1162 | |
tomas_dca | 0:56ca0aab95fc | 1163 | // translate numbers to symbols |
tomas_dca | 0:56ca0aab95fc | 1164 | for(uint8_t j = 0; j < 5;j++) |
tomas_dca | 0:56ca0aab95fc | 1165 | { |
tomas_dca | 0:56ca0aab95fc | 1166 | switch(number) |
tomas_dca | 0:56ca0aab95fc | 1167 | { |
tomas_dca | 0:56ca0aab95fc | 1168 | case 0: |
tomas_dca | 0:56ca0aab95fc | 1169 | ret = zero; |
tomas_dca | 0:56ca0aab95fc | 1170 | break; |
tomas_dca | 0:56ca0aab95fc | 1171 | case 1: |
tomas_dca | 0:56ca0aab95fc | 1172 | ret = one; |
tomas_dca | 0:56ca0aab95fc | 1173 | break; |
tomas_dca | 0:56ca0aab95fc | 1174 | case 2: |
tomas_dca | 0:56ca0aab95fc | 1175 | ret = two; |
tomas_dca | 0:56ca0aab95fc | 1176 | break; |
tomas_dca | 0:56ca0aab95fc | 1177 | case 3: |
tomas_dca | 0:56ca0aab95fc | 1178 | ret = three; |
tomas_dca | 0:56ca0aab95fc | 1179 | break; |
tomas_dca | 0:56ca0aab95fc | 1180 | case 4: |
tomas_dca | 0:56ca0aab95fc | 1181 | ret = four; |
tomas_dca | 0:56ca0aab95fc | 1182 | break; |
tomas_dca | 0:56ca0aab95fc | 1183 | case 5: |
tomas_dca | 0:56ca0aab95fc | 1184 | ret = five; |
tomas_dca | 0:56ca0aab95fc | 1185 | break; |
tomas_dca | 0:56ca0aab95fc | 1186 | case 6: |
tomas_dca | 0:56ca0aab95fc | 1187 | ret = six; |
tomas_dca | 0:56ca0aab95fc | 1188 | break; |
tomas_dca | 0:56ca0aab95fc | 1189 | case 7: |
tomas_dca | 0:56ca0aab95fc | 1190 | ret = seven; |
tomas_dca | 0:56ca0aab95fc | 1191 | break; |
tomas_dca | 0:56ca0aab95fc | 1192 | case 8: |
tomas_dca | 0:56ca0aab95fc | 1193 | ret = eight; |
tomas_dca | 0:56ca0aab95fc | 1194 | break; |
tomas_dca | 0:56ca0aab95fc | 1195 | default: |
tomas_dca | 0:56ca0aab95fc | 1196 | ret = nine; |
tomas_dca | 0:56ca0aab95fc | 1197 | break; |
tomas_dca | 0:56ca0aab95fc | 1198 | } |
tomas_dca | 0:56ca0aab95fc | 1199 | } |
tomas_dca | 0:56ca0aab95fc | 1200 | |
tomas_dca | 0:56ca0aab95fc | 1201 | return(ret); |
tomas_dca | 0:56ca0aab95fc | 1202 | } |