diff options
author | Björn Stenberg <bjorn@haxx.se> | 2002-09-24 17:47:09 +0000 |
---|---|---|
committer | Björn Stenberg <bjorn@haxx.se> | 2002-09-24 17:47:09 +0000 |
commit | 614272c45f6235b01685d3aa48b5a154f9362c10 (patch) | |
tree | 289c5be2933d47c6fc36830132db1f1e0a95ddad /apps/recorder | |
parent | b1b8bd4dd159e90f9e197c8870953da079162639 (diff) |
One snake game is enough
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@2402 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps/recorder')
-rw-r--r-- | apps/recorder/snake.c | 266 |
1 files changed, 0 insertions, 266 deletions
diff --git a/apps/recorder/snake.c b/apps/recorder/snake.c deleted file mode 100644 index 736d08dbd7..0000000000 --- a/apps/recorder/snake.c +++ /dev/null @@ -1,266 +0,0 @@ -/* -Snake! - -by Itai Shaked - -ok, a little explanation - -board holds the snake and apple position - 1+ - snake body (the number -represents the age [1 is the snake's head]). --1 is an apple, and 0 is a clear spot. -dir is the current direction of the snake - 0=up, 1=right, 2=down, 3=left; - -(i'll write more later) -*/ - -#include "sprintf.h" - - -#include "config.h" -#include "lcd.h" -#include "button.h" -#include "kernel.h" -#include "menu.h" -#include "lang.h" - -int board[28][16],snakelength; -unsigned int score,hiscore=0; -short dir,frames,apple,level=1,dead=0; - -int rand_num (int range) { - return current_tick % range; -} - -void die (void) { - char pscore[5],hscore[17]; - lcd_clear_display(); - snprintf(pscore,sizeof(pscore),"%d",score); - lcd_putsxy(3,12,"oops...",0); - lcd_putsxy(3,22,str(LANG_SNAKE_SCORE),0); - lcd_putsxy(3,32, pscore,0); - if (score>hiscore) { - hiscore=score; - lcd_putsxy(3,42,str(LANG_SNAKE_HISCORE_NEW),0); - } - else { - snprintf(hscore,sizeof(hscore),str(LANG_SNAKE_HISCORE),hiscore); - lcd_putsxy(3,42,hscore,0); - } - lcd_update(); - sleep(HZ); - dead=1; -} - -void colission (short x, short y) { - switch (board[x][y]) { - case 0: - break; - case -1: - snakelength+=2; - score+=level; - apple=0; - break; - default: - die(); - break; - } - if (x==28 || x<0 || y==16 || y<0) - die(); -} - -void move_head (short x, short y) { - switch (dir) { - case 0: - y-=1; - break; - case 1: - x+=1; - break; - case 2: - y+=1; - break; - case 3: - x-=1; - break; - } - colission (x,y); - if (dead) return; - board[x][y]=1; - lcd_fillrect(x*4,y*4,4,4); -} - -void frame (void) { - short x,y,head=0; - for (x=0; x<28; x++) { - for (y=0; y<16; y++) { - switch (board[x][y]) { - case 1: - if (!head) { - move_head(x,y); - if (dead) return; - board[x][y]++; - head=1; - } - break; - case 0: - break; - case -1: - break; - default: - if (board[x][y]==snakelength) { - board[x][y]=0; - lcd_clearrect(x*4,y*4,4,4); - } - else - board[x][y]++; - } - } - } - lcd_update(); -} - -void redraw (void) { - short x,y; - lcd_clear_display(); - for (x=0; x<28; x++) { - for (y=0; y<16; y++) { - switch (board[x][y]) { - case -1: - lcd_fillrect((x*4)+1,y*4,2,4); - lcd_fillrect(x*4,(y*4)+1,4,2); - break; - case 0: - break; - default: - lcd_fillrect(x*4,y*4,4,4); - break; - } - } - } - lcd_update(); -} - -void game_pause (void) { - lcd_clear_display(); - lcd_putsxy(3,12,str(LANG_SNAKE_PAUSE),0); - lcd_putsxy(3,22,str(LANG_SNAKE_RESUME),0); - lcd_putsxy(3,32,str(LANG_SNAKE_QUIT),0); - lcd_update(); - while (1) { - switch (button_get(true)) { - case BUTTON_OFF: - dead=1; - return; - case BUTTON_PLAY: - redraw(); - sleep(HZ/2); - return; - } - } -} - - -void game (void) { - short x,y; - while (1) { - frame(); - if (dead) return; - frames++; - if (frames==10) { - frames=0; - if (!apple) { - do { - x=rand_num(28); - y=rand_num(16); - } while (board[x][y]); - apple=1; - board[x][y]=-1; - lcd_fillrect((x*4)+1,y*4,2,4); - lcd_fillrect(x*4,(y*4)+1,4,2); - } - } - - sleep(HZ/level); - - switch (button_get(false)) { - case BUTTON_UP: - if (dir!=2) dir=0; - break; - case BUTTON_RIGHT: - if (dir!=3) dir=1; - break; - case BUTTON_DOWN: - if (dir!=0) dir=2; - break; - case BUTTON_LEFT: - if (dir!=1) dir=3; - break; - case BUTTON_OFF: - dead=1; - return; - case BUTTON_PLAY: - game_pause(); - break; - } - } -} - -void game_init(void) { - short x,y; - char plevel[10],phscore[20]; - - for (x=0; x<28; x++) { - for (y=0; y<16; y++) { - board[x][y]=0; - } - } - dead=0; - apple=0; - snakelength=4; - score=0; - board[11][7]=1; - - - lcd_clear_display(); - snprintf(plevel,sizeof(plevel),str(LANG_SNAKE_LEVEL),level); - snprintf(phscore,sizeof(phscore),str(LANG_SNAKE_HISCORE),hiscore); - lcd_putsxy(3,2, plevel,0); - lcd_putsxy(3,12, str(LANG_SNAKE_RANGE),0); - lcd_putsxy(3,22, str(LANG_SNAKE_QUIT),0); - lcd_putsxy(3,32, str(LANG_SNAKE_START),0); - lcd_putsxy(3,42, phscore,0); - lcd_update(); - - while (1) { - switch (button_get(true)) { - case BUTTON_RIGHT: - case BUTTON_UP: - if (level<9) - level++; - break; - case BUTTON_LEFT: - case BUTTON_DOWN: - if (level>1) - level--; - break; - case BUTTON_OFF: - dead=1; - return; - break; - case BUTTON_PLAY: - return; - break; - } - snprintf(plevel,sizeof(plevel),str(LANG_SNAKE_LEVEL),level); - lcd_putsxy(3,2, plevel,0); - lcd_update(); - } - -} - -bool snake(void) { - game_init(); - lcd_clear_display(); - game(); - return false; -} - |