From f742c35db2e201d7bcd0c6154f5fceb5f3407d3d Mon Sep 17 00:00:00 2001 From: Jens Arnold Date: Wed, 9 Aug 2006 20:31:38 +0000 Subject: [PATCH] Sudoku: * Changed the LCD size ifdef magic to ease adding of new LCD resolutions. * Added vertical layout option with the scratchpad at the bottom (Gigabeat). * New Bitmaps for iPod Mini, iPod Video and Gigabeat, and slightly modified bitmaps for Archos, by Marianne Arnold. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@10504 a1c6a512-1295-4272-9138-f99709370657 --- apps/plugins/SUBDIRS | 3 - apps/plugins/bitmaps/native/SOURCES | 18 +- .../native/sudoku_inverse.112x64x1.bmp | Bin 382 -> 302 bytes .../native/sudoku_inverse.138x110x2.bmp | Bin 0 -> 462 bytes .../native/sudoku_inverse.320x240x16.bmp | Bin 0 -> 8078 bytes .../bitmaps/native/sudoku_normal.112x64x1.bmp | Bin 382 -> 302 bytes .../native/sudoku_normal.138x110x2.bmp | Bin 0 -> 462 bytes .../native/sudoku_normal.320x240x16.bmp | Bin 0 -> 8078 bytes .../bitmaps/native/sudoku_start.112x64x1.bmp | Bin 382 -> 302 bytes .../bitmaps/native/sudoku_start.138x110x2.bmp | Bin 0 -> 1266 bytes .../native/sudoku_start.320x240x16.bmp | Bin 0 -> 8078 bytes apps/plugins/sudoku/Makefile | 3 +- apps/plugins/sudoku/sudoku.c | 251 +++++++++++------- 13 files changed, 177 insertions(+), 98 deletions(-) create mode 100755 apps/plugins/bitmaps/native/sudoku_inverse.138x110x2.bmp create mode 100755 apps/plugins/bitmaps/native/sudoku_inverse.320x240x16.bmp create mode 100755 apps/plugins/bitmaps/native/sudoku_normal.138x110x2.bmp create mode 100755 apps/plugins/bitmaps/native/sudoku_normal.320x240x16.bmp create mode 100755 apps/plugins/bitmaps/native/sudoku_start.138x110x2.bmp create mode 100755 apps/plugins/bitmaps/native/sudoku_start.320x240x16.bmp diff --git a/apps/plugins/SUBDIRS b/apps/plugins/SUBDIRS index d45283c1d5..73771713bd 100644 --- a/apps/plugins/SUBDIRS +++ b/apps/plugins/SUBDIRS @@ -16,11 +16,8 @@ rockboy /* For all targets with a bitmap display */ #ifdef HAVE_LCD_BITMAP chessbox -#if (LCD_WIDTH != 138) -/* This needs adjusting for the iPod Mini */ sudoku #endif -#endif /* For all the colour targets and iriver H1x0 */ #if defined(HAVE_LCD_COLOR) || defined(IRIVER_H100_SERIES) diff --git a/apps/plugins/bitmaps/native/SOURCES b/apps/plugins/bitmaps/native/SOURCES index 54cd6fd569..98c3eef443 100644 --- a/apps/plugins/bitmaps/native/SOURCES +++ b/apps/plugins/bitmaps/native/SOURCES @@ -175,19 +175,35 @@ solitaire_suitsi.15x16x1.bmp #endif /* Sudoku */ +#if LCD_WIDTH >= LCD_HEIGHT #if (LCD_WIDTH == 112) && (LCD_HEIGHT==64) && (LCD_DEPTH == 1) sudoku_start.112x64x1.bmp sudoku_normal.112x64x1.bmp sudoku_inverse.112x64x1.bmp +#elif (LCD_WIDTH == 138) && (LCD_HEIGHT == 110) && (LCD_DEPTH >= 2) +sudoku_start.138x110x2.bmp +sudoku_normal.138x110x2.bmp +sudoku_inverse.138x110x2.bmp #elif ((LCD_WIDTH == 160) && (LCD_HEIGHT == 128) && (LCD_DEPTH >= 2)) || \ ((LCD_WIDTH == 176) && (LCD_HEIGHT == 132) && (LCD_DEPTH >= 2)) sudoku_start.160x128x2.bmp sudoku_normal.160x128x2.bmp sudoku_inverse.160x128x2.bmp -#elif (LCD_WIDTH >= 220) && (LCD_HEIGHT >= 176) && (LCD_DEPTH == 16) +#elif (LCD_WIDTH == 220) && (LCD_HEIGHT == 176) && (LCD_DEPTH == 16) sudoku_start.220x176x16.bmp sudoku_normal.220x176x16.bmp sudoku_inverse.220x176x16.bmp +#elif (LCD_WIDTH >= 320) && (LCD_HEIGHT >= 240) && (LCD_DEPTH == 16) +sudoku_start.320x240x16.bmp +sudoku_normal.320x240x16.bmp +sudoku_inverse.320x240x16.bmp +#endif +#else +#if (LCD_WIDTH >= 240) && (LCD_HEIGHT >= 320) && (LCD_DEPTH == 16) +sudoku_start.320x240x16.bmp +sudoku_normal.320x240x16.bmp +sudoku_inverse.320x240x16.bmp +#endif #endif /* Brickmania */ diff --git a/apps/plugins/bitmaps/native/sudoku_inverse.112x64x1.bmp b/apps/plugins/bitmaps/native/sudoku_inverse.112x64x1.bmp index 161a43e78cc88c119401172d36f5df6e7e453f6c..f5e89779048053759f55f1ed4280c751b40d7b63 100644 GIT binary patch literal 302 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 diff --git a/apps/plugins/bitmaps/native/sudoku_normal.138x110x2.bmp b/apps/plugins/bitmaps/native/sudoku_normal.138x110x2.bmp new file mode 100755 index 0000000000000000000000000000000000000000..2bce01b5bddd50f5e5fdc8f5078875529e97f3a6 GIT binary patch literal 462 zcma)&I}XAy5Ct7d=r{$ZprGd#9Ec-@p3e;+2q9`jfe-{Ulf;r0frO*++PjX3FA@ApvkmTj4{MAgd@D*4Hc|m-$iToq`rR5z2tot_IJ3!6CO~5 z9wq$JTTwf}4st!$dU!rHQlGuKo*rUu182BG^6&d5J@q}SeYu`%?~-bIe|wjTy!XsG Lb^n=5zW>AzOUSJ6 literal 0 HcmV?d00001 diff --git a/apps/plugins/bitmaps/native/sudoku_normal.320x240x16.bmp b/apps/plugins/bitmaps/native/sudoku_normal.320x240x16.bmp new file mode 100755 index 0000000000000000000000000000000000000000..6f888cb86ce56d3f3ce3d79b9494fbe0576e0e68 GIT binary patch literal 8078 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 diff --git a/apps/plugins/bitmaps/native/sudoku_start.138x110x2.bmp b/apps/plugins/bitmaps/native/sudoku_start.138x110x2.bmp new file mode 100755 index 0000000000000000000000000000000000000000..2d5aa768704ea4ec8d89cd443e66d14cea95439a GIT binary patch literal 1266 zcmc&z+YQ1n5KDj$1bH5!hS{^ z5LZMkd+ep$@ceYN*s4;>vMgnuXJs`P-l=tig+o|r!xaybo~LtclBpY(n3FR z*LSVvz+c~&7Tk{}2&}|?4wy;!A21S|-G&KH(uYVlpO>15_$Glhm-p2@1_w!S=%!&=d(m+_S!b?Zy?=&=+IiIn~yQW%&e*Z4pqW-V- E06)_V;s5{u literal 0 HcmV?d00001 diff --git a/apps/plugins/bitmaps/native/sudoku_start.320x240x16.bmp b/apps/plugins/bitmaps/native/sudoku_start.320x240x16.bmp new file mode 100755 index 0000000000000000000000000000000000000000..bd4d7c4ee2272c8c2ae6a785ca26721bb6be9e02 GIT binary patch literal 8078 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 z*39G=176) && (LCD_WIDTH>=220) -/* iriver h300 */ - -/* Internal dimensions of a cell */ -#define CELL_WIDTH 16 +#define CELL_WIDTH 16 #define CELL_HEIGHT 16 -#define BOARD_WIDTH (CELL_WIDTH*9+10+4) -#define BOARD_HEIGHT (CELL_HEIGHT*9+10+4) +#elif (LCD_HEIGHT>=240) && (LCD_WIDTH>=320) +/* iPod Video - 320x240, 9 cells @ 25x25 with 14 border lines */ -#define XOFS (((LCD_WIDTH-BOARD_WIDTH)/2)+15) -#define YOFS ((LCD_HEIGHT-BOARD_HEIGHT)/2) - -#define XOFSSCRATCHPAD 10 - -/* Locations of each cell */ -static unsigned char cellxpos[9]={ 2, 19, 36, 54, 71, 88, 106, 123, 140 }; -static unsigned char cellypos[9]={ 2, 19, 36, 54, 71, 88, 106, 123, 140 }; - -/* The height of one cell in the bitmap */ -#define BITMAP_HEIGHT 16 -#define BITMAP_STRIDE 16 +/* Internal dimensions of a cell */ +#define CELL_WIDTH 25 +#define CELL_HEIGHT 25 #else #error SUDOKU: Unsupported LCD size #endif +#else /* Vertical layout, scratchpad at the bottom */ +#define VERTICAL_LAYOUT + +#if (LCD_HEIGHT>=320) && (LCD_WIDTH>=240) +/* Gigabeat - 240x320, 9 cells @ 16x16 with 14 border lines */ + +/* Internal dimensions of a cell */ +#define CELL_WIDTH 25 +#define CELL_HEIGHT 25 + +#else + #error SUDOKU: Unsupported LCD size +#endif + +#endif /* Layout */ + +/* Size dependent build-time calculations */ +#ifdef SMALL_BOARD +#define BOARD_WIDTH (CELL_WIDTH*9+10) +#define BOARD_HEIGHT (CELL_HEIGHT*9+10) +static unsigned char cellxpos[9]={ + 1, (CELL_WIDTH+2), (2*CELL_WIDTH+3), + (3*CELL_WIDTH+4), (4*CELL_WIDTH+5), (5*CELL_WIDTH+6), + (6*CELL_WIDTH+7), (7*CELL_WIDTH+8), (8*CELL_WIDTH+9) +}; +static unsigned char cellypos[9]={ + 1, (CELL_HEIGHT+2), (2*CELL_HEIGHT+3), + (3*CELL_HEIGHT+4), (4*CELL_HEIGHT+5), (5*CELL_HEIGHT+6), + (6*CELL_HEIGHT+7), (7*CELL_HEIGHT+8), (8*CELL_HEIGHT+9) +}; +#else /* !SMALL_BOARD */ +#define BOARD_WIDTH (CELL_WIDTH*9+10+4) +#define BOARD_HEIGHT (CELL_HEIGHT*9+10+4) +static unsigned char cellxpos[9]={ + 2, (CELL_WIDTH +3), (2*CELL_WIDTH +4), + (3*CELL_WIDTH +6), (4*CELL_WIDTH +7), (5*CELL_WIDTH +8), + (6*CELL_WIDTH+10), (7*CELL_WIDTH+11), (8*CELL_WIDTH+12) +}; +static unsigned char cellypos[9]={ + 2, (CELL_HEIGHT +3), (2*CELL_HEIGHT +4), + (3*CELL_HEIGHT +6), (4*CELL_HEIGHT +7), (5*CELL_HEIGHT +8), + (6*CELL_HEIGHT+10), (7*CELL_HEIGHT+11), (8*CELL_HEIGHT+12) +}; +#endif + +#ifdef VERTICAL_LAYOUT +#define XOFS ((LCD_WIDTH-BOARD_WIDTH)/2) +#define YOFS ((LCD_HEIGHT-(BOARD_HEIGHT+CELL_HEIGHT*2+2))/2) +#define YOFSSCRATCHPAD (YOFS+BOARD_HEIGHT+CELL_WIDTH) +#else +#define XOFSSCRATCHPAD ((LCD_WIDTH-(BOARD_WIDTH+CELL_WIDTH*2+2))/2) +#define XOFS (XOFSSCRATCHPAD+CELL_WIDTH*2+2) +#define YOFS ((LCD_HEIGHT-BOARD_HEIGHT)/2) +#endif + /****** Solver routine by Tom Shackell Downloaded from: @@ -760,21 +786,7 @@ void display_board(struct sudoku_state_t* state) /* Draw the gridlines - differently for different targets */ -#if LCD_HEIGHT > 64 - /* Large targets - draw single/double lines */ - for (r=0;r<9;r++) { - rb->lcd_hline(XOFS,XOFS+BOARD_WIDTH-1,YOFS+cellypos[r]-1); - rb->lcd_vline(XOFS+cellxpos[r]-1,YOFS,YOFS+BOARD_HEIGHT-1); - if ((r % 3)==0) { - rb->lcd_hline(XOFS,XOFS+BOARD_WIDTH-1,YOFS+cellypos[r]-2); - rb->lcd_vline(XOFS+cellxpos[r]-2,YOFS,YOFS+BOARD_HEIGHT-1); - } - } - rb->lcd_hline(XOFS,XOFS+BOARD_WIDTH-1,YOFS+cellypos[8]+CELL_HEIGHT); - rb->lcd_hline(XOFS,XOFS+BOARD_WIDTH-1,YOFS+cellypos[8]+CELL_HEIGHT+1); - rb->lcd_vline(XOFS+cellxpos[8]+CELL_WIDTH,YOFS,YOFS+BOARD_HEIGHT-1); - rb->lcd_vline(XOFS+cellxpos[8]+CELL_WIDTH+1,YOFS,YOFS+BOARD_HEIGHT-1); -#elif (LCD_HEIGHT==64) +#ifdef SMALL_BOARD /* Small targets - draw dotted/single lines */ for (r=0;r<9;r++) { if ((r % 3)==0) { @@ -794,21 +806,66 @@ void display_board(struct sudoku_state_t* state) rb->lcd_hline(XOFS,XOFS+BOARD_WIDTH-1,YOFS+cellypos[8]+CELL_HEIGHT); rb->lcd_vline(XOFS+cellxpos[8]+CELL_WIDTH,YOFS,YOFS+BOARD_HEIGHT-1); #else -#error SUDOKU: Unsupported LCD height + /* Large targets - draw single/double lines */ + for (r=0;r<9;r++) { + rb->lcd_hline(XOFS,XOFS+BOARD_WIDTH-1,YOFS+cellypos[r]-1); + rb->lcd_vline(XOFS+cellxpos[r]-1,YOFS,YOFS+BOARD_HEIGHT-1); + if ((r % 3)==0) { + rb->lcd_hline(XOFS,XOFS+BOARD_WIDTH-1,YOFS+cellypos[r]-2); + rb->lcd_vline(XOFS+cellxpos[r]-2,YOFS,YOFS+BOARD_HEIGHT-1); + } + } + rb->lcd_hline(XOFS,XOFS+BOARD_WIDTH-1,YOFS+cellypos[8]+CELL_HEIGHT); + rb->lcd_hline(XOFS,XOFS+BOARD_WIDTH-1,YOFS+cellypos[8]+CELL_HEIGHT+1); + rb->lcd_vline(XOFS+cellxpos[8]+CELL_WIDTH,YOFS,YOFS+BOARD_HEIGHT-1); + rb->lcd_vline(XOFS+cellxpos[8]+CELL_WIDTH+1,YOFS,YOFS+BOARD_HEIGHT-1); #endif #ifdef SUDOKU_BUTTON_POSSIBLE +#ifdef VERTICAL_LAYOUT + rb->lcd_hline(XOFS,XOFS+BOARD_WIDTH-1,YOFSSCRATCHPAD); + rb->lcd_hline(XOFS,XOFS+BOARD_WIDTH-1,YOFSSCRATCHPAD+CELL_HEIGHT+1); + for (r=0;r<9;r++) { +#ifdef SMALL_BOARD + /* Small targets - draw dotted/single lines */ + if ((r % 3)==0) { + /* Solid Line */ + rb->lcd_vline(XOFS+cellxpos[r]-1,YOFSSCRATCHPAD, + YOFSSCRATCHPAD+CELL_HEIGHT+1); + } else { + /* Dotted line */ + for (c=YOFSSCRATCHPAD;clcd_drawpixel(XOFS+cellxpos[r]-1,c); + } + } +#else + /* Large targets - draw single/double lines */ + rb->lcd_vline(XOFS+cellxpos[r]-1,YOFSSCRATCHPAD, + YOFSSCRATCHPAD+CELL_HEIGHT+1); + if ((r % 3)==0) + rb->lcd_vline(XOFS+cellxpos[r]-2,YOFSSCRATCHPAD, + YOFSSCRATCHPAD+CELL_HEIGHT+1); +#endif + if ((r>0) && state->possiblevals[state->y][state->x]&(1<<(r))) + rb->lcd_bitmap_part(sudoku_normal,0,BITMAP_HEIGHT*r,BITMAP_STRIDE, + XOFS+cellxpos[r-1],YOFSSCRATCHPAD+1, + CELL_WIDTH,CELL_HEIGHT); + } + rb->lcd_vline(XOFS+cellxpos[8]+CELL_WIDTH,YOFSSCRATCHPAD, + YOFSSCRATCHPAD+CELL_HEIGHT+1); +#ifndef SMALL_BOARD + rb->lcd_vline(XOFS+cellxpos[8]+CELL_WIDTH+1,YOFSSCRATCHPAD, + YOFSSCRATCHPAD+CELL_HEIGHT+1); +#endif + if (state->possiblevals[state->y][state->x]&(1<<(r))) + rb->lcd_bitmap_part(sudoku_normal,0,BITMAP_HEIGHT*r,BITMAP_STRIDE, + XOFS+cellxpos[8],YOFSSCRATCHPAD+1, + CELL_WIDTH,CELL_HEIGHT); +#else /* Horizontal layout */ rb->lcd_vline(XOFSSCRATCHPAD,YOFS,YOFS+BOARD_HEIGHT-1); rb->lcd_vline(XOFSSCRATCHPAD+CELL_WIDTH+1,YOFS,YOFS+BOARD_HEIGHT-1); for (r=0;r<9;r++) { -#if LCD_HEIGHT > 64 - /* Large targets - draw single/double lines */ - rb->lcd_hline(XOFSSCRATCHPAD,XOFSSCRATCHPAD+CELL_WIDTH+1, - YOFS+cellypos[r]-1); - if ((r % 3)==0) - rb->lcd_hline(XOFSSCRATCHPAD,XOFSSCRATCHPAD+CELL_WIDTH+1, - YOFS+cellypos[r]-2); -#elif LCD_HEIGHT == 64 +#ifdef SMALL_BOARD /* Small targets - draw dotted/single lines */ if ((r % 3)==0) { /* Solid Line */ @@ -820,6 +877,13 @@ void display_board(struct sudoku_state_t* state) rb->lcd_drawpixel(c,YOFS+cellypos[r]-1); } } +#else + /* Large targets - draw single/double lines */ + rb->lcd_hline(XOFSSCRATCHPAD,XOFSSCRATCHPAD+CELL_WIDTH+1, + YOFS+cellypos[r]-1); + if ((r % 3)==0) + rb->lcd_hline(XOFSSCRATCHPAD,XOFSSCRATCHPAD+CELL_WIDTH+1, + YOFS+cellypos[r]-2); #endif if ((r>0) && state->possiblevals[state->y][state->x]&(1<<(r))) rb->lcd_bitmap_part(sudoku_normal,0,BITMAP_HEIGHT*r,BITMAP_STRIDE, @@ -828,7 +892,7 @@ void display_board(struct sudoku_state_t* state) } rb->lcd_hline(XOFSSCRATCHPAD,XOFSSCRATCHPAD+CELL_WIDTH+1, YOFS+cellypos[8]+CELL_HEIGHT); -#if LCD_HEIGHT > 64 +#ifndef SMALL_BOARD rb->lcd_hline(XOFSSCRATCHPAD,XOFSSCRATCHPAD+CELL_WIDTH+1, YOFS+cellypos[8]+CELL_HEIGHT+1); #endif @@ -836,7 +900,8 @@ void display_board(struct sudoku_state_t* state) rb->lcd_bitmap_part(sudoku_normal,0,BITMAP_HEIGHT*r,BITMAP_STRIDE, XOFSSCRATCHPAD+1,YOFS+cellypos[8], CELL_WIDTH,CELL_HEIGHT); -#endif +#endif /* Layout */ +#endif /* SUDOKU_BUTTON_POSSIBLE */ /* Draw the numbers */ for (r=0;r<9;r++) {