void ram(void) { int c=0, pos=0,del=0; struct pos_s tail[MAX_SNAKE_LEN]; snake.tail = tail; // load the highscore highscore = highscore_get(); // initially reset everything reset(); while (1) { if(!(++c % snake.speed)) { handle_input(); pos = (snake.t_start+1) % MAX_SNAKE_LEN; snake.tail[pos].x = snake.tail[snake.t_start].x; snake.tail[pos].y = snake.tail[snake.t_start].y; if(snake.dir == 0) snake.tail[pos].x++; else if(snake.dir == 1) snake.tail[pos].y++; else if(snake.dir == 2) snake.tail[pos].x--; else if(snake.dir == 3) snake.tail[pos].y--; snake.t_start = pos; if (pos < snake.len) { del = MAX_SNAKE_LEN - (snake.len - pos); } else del = pos - snake.len; // remove last, add first line draw_block(snake.tail[del].x, snake.tail[del].y, 0xFF); draw_block(snake.tail[pos].x, snake.tail[pos].y, 0b00011000); // check for obstacle hit.. if (hitWall() || hitSelf()) { death_anim(); if (showHighscore()) break; reset(); } else if (hitFood()) next_level(); lcdDisplay(); } #ifdef SIMULATOR delayms(50); #else delayms(3); #endif } }
void ram(void) { int c=0, pos=0,del=0; struct pos_s tail[MAX_SNAKE_LEN]; snake.tail = tail; // initially reset everything reset(); while (1) { if(!(++c % snake.speed)) { if (handle_input()){ //handle_input returns 1 to quit break; } pos = (snake.t_start+1) % MAX_SNAKE_LEN; snake.tail[pos].x = snake.tail[snake.t_start].x; snake.tail[pos].y = snake.tail[snake.t_start].y; if(snake.dir == 0) { snake.tail[pos].x++; if(snake.tail[pos].x*SNAKE_DIM>=MAX_X) snake.tail[pos].x=MIN_X/SNAKE_DIM+1; } else if(snake.dir == 1) { snake.tail[pos].y++; if(snake.tail[pos].y*SNAKE_DIM>=MAX_Y) snake.tail[pos].y=MIN_Y/SNAKE_DIM+1; } else if(snake.dir == 2) { snake.tail[pos].x--; if(snake.tail[pos].x*SNAKE_DIM<=MIN_X) snake.tail[pos].x=MAX_X/SNAKE_DIM-1; } else if(snake.dir == SNAKE_DIM) { snake.tail[pos].y--; if(snake.tail[pos].y*SNAKE_DIM<=MIN_Y) snake.tail[pos].y=MAX_Y/SNAKE_DIM-1; } snake.t_start = pos; del = pos - snake.len; if (pos < snake.len) del += MAX_SNAKE_LEN; // remove last, add first line draw_block(snake.tail[del].x, snake.tail[del].y, 0xFF); draw_block(snake.tail[pos].x, snake.tail[pos].y, 0b00011000); // check for obstacle hit.. if (hitSelf()) { death_anim(); if (showHighscore()) break; reset(); } else if (hitFood()) next_level(); lcdDisplay(); } #ifdef SIMULATOR delayms(50); #else delayms(3); #endif } }