forked from len0rd/rockbox
fixed comments, added linefeeds to chop some of the longest lines
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@5000 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
parent
8fb336148f
commit
f50bbce438
2 changed files with 475 additions and 424 deletions
|
@ -45,8 +45,8 @@ use F3 to see how many mines are left (supposing all your flags are correct)
|
|||
static struct plugin_api* rb;
|
||||
|
||||
|
||||
//define how numbers are displayed (that way we don't have to
|
||||
//worry about fonts)
|
||||
/* define how numbers are displayed (that way we don't have to */
|
||||
/* worry about fonts) */
|
||||
static unsigned char num[9][8] = {
|
||||
/*reading the sprites:
|
||||
on screen f123
|
||||
|
@ -60,87 +60,87 @@ static unsigned char num[9][8] = {
|
|||
ea73
|
||||
*/
|
||||
|
||||
//0
|
||||
{0x00, //........
|
||||
0x00, //........
|
||||
0x00, //........
|
||||
0x00, //........
|
||||
0x00, //........
|
||||
0x00, //........
|
||||
0x00, //........
|
||||
0x00},//........
|
||||
//1
|
||||
{0x00, //........
|
||||
0x00, //........
|
||||
0x00, //...OO...
|
||||
0x44, //....O...
|
||||
0x7c, //....O...
|
||||
0x40, //....O...
|
||||
0x00, //...OOO..
|
||||
0x00},//........
|
||||
//2
|
||||
{0x00, //........
|
||||
0x00, //........
|
||||
0x48, //...OO...
|
||||
0x64, //..O..O..
|
||||
0x54, //....O...
|
||||
0x48, //...O....
|
||||
0x00, //..OOOO..
|
||||
0x00},//........
|
||||
//3
|
||||
{0x00, //........
|
||||
0x00, //........
|
||||
0x44, //..OOO...
|
||||
0x54, //.....O..
|
||||
0x54, //...OO...
|
||||
0x28, //.....O..
|
||||
0x00, //..OOO...
|
||||
0x00},//........
|
||||
//4
|
||||
{0x00, //........
|
||||
0x00, //........
|
||||
0x1c, //..O.....
|
||||
0x10, //..O.....
|
||||
0x70, //..OOOO..
|
||||
0x10, //....O...
|
||||
0x00, //....O...
|
||||
0x00},//........
|
||||
//5
|
||||
{0x00, //........
|
||||
0x00, //........
|
||||
0x5c, //..OOOO..
|
||||
0x54, //..O.....
|
||||
0x54, //..OOO...
|
||||
0x24, //.....O..
|
||||
0x00, //..OOO...
|
||||
0x00},//........
|
||||
//6
|
||||
{0x00, //........
|
||||
0x00, //........
|
||||
0x38, //...OOO..
|
||||
0x54, //..O.....
|
||||
0x54, //..OOO...
|
||||
0x24, //..O..O..
|
||||
0x00, //...OO...
|
||||
0x00},//........
|
||||
//7
|
||||
{0x00, //........
|
||||
0x00, //........
|
||||
0x44, //..OOOO..
|
||||
0x24, //.....O..
|
||||
0x14, //....O...
|
||||
0x0c, //...O....
|
||||
0x00, //..O.....
|
||||
0x00},//........
|
||||
//8
|
||||
{0x00, //........
|
||||
0x00, //........
|
||||
0x28, //...OO...
|
||||
0x54, //..O..O..
|
||||
0x54, //...OO...
|
||||
0x28, //..O..O..
|
||||
0x00, //...OO...
|
||||
0x00},//........
|
||||
/* 0 */
|
||||
{0x00, /* ........ */
|
||||
0x00, /* ........ */
|
||||
0x00, /* ........ */
|
||||
0x00, /* ........ */
|
||||
0x00, /* ........ */
|
||||
0x00, /* ........ */
|
||||
0x00, /* ........ */
|
||||
0x00},/* ........ */
|
||||
/* 1 */
|
||||
{0x00, /* ........ */
|
||||
0x00, /* ........ */
|
||||
0x00, /* ...OO... */
|
||||
0x44, /* ....O... */
|
||||
0x7c, /* ....O... */
|
||||
0x40, /* ....O... */
|
||||
0x00, /* ...OOO.. */
|
||||
0x00},/* ........ */
|
||||
/* 2 */
|
||||
{0x00, /* ........ */
|
||||
0x00, /* ........ */
|
||||
0x48, /* ...OO... */
|
||||
0x64, /* ..O..O.. */
|
||||
0x54, /* ....O... */
|
||||
0x48, /* ...O.... */
|
||||
0x00, /* ..OOOO.. */
|
||||
0x00},/* ........ */
|
||||
/* 3 */
|
||||
{0x00, /* ........ */
|
||||
0x00, /* ........ */
|
||||
0x44, /* ..OOO... */
|
||||
0x54, /* .....O.. */
|
||||
0x54, /* ...OO... */
|
||||
0x28, /* .....O.. */
|
||||
0x00, /* ..OOO... */
|
||||
0x00},/* ........ */
|
||||
/* 4 */
|
||||
{0x00, /* ........ */
|
||||
0x00, /* ........ */
|
||||
0x1c, /* ..O..... */
|
||||
0x10, /* ..O..... */
|
||||
0x70, /* ..OOOO.. */
|
||||
0x10, /* ....O... */
|
||||
0x00, /* ....O... */
|
||||
0x00},/* ........ */
|
||||
/* 5 */
|
||||
{0x00, /* ........ */
|
||||
0x00, /* ........ */
|
||||
0x5c, /* ..OOOO.. */
|
||||
0x54, /* ..O..... */
|
||||
0x54, /* ..OOO... */
|
||||
0x24, /* .....O.. */
|
||||
0x00, /* ..OOO... */
|
||||
0x00},/* ........ */
|
||||
/* 6 */
|
||||
{0x00, /* ........ */
|
||||
0x00, /* ........ */
|
||||
0x38, /* ...OOO.. */
|
||||
0x54, /* ..O..... */
|
||||
0x54, /* ..OOO... */
|
||||
0x24, /* ..O..O.. */
|
||||
0x00, /* ...OO... */
|
||||
0x00},/* ........ */
|
||||
/* 7 */
|
||||
{0x00, /* ........ */
|
||||
0x00, /* ........ */
|
||||
0x44, /* ..OOOO.. */
|
||||
0x24, /* .....O.. */
|
||||
0x14, /* ....O... */
|
||||
0x0c, /* ...O.... */
|
||||
0x00, /* ..O..... */
|
||||
0x00},/* ........ */
|
||||
/* 8 */
|
||||
{0x00, /* ........ */
|
||||
0x00, /* ........ */
|
||||
0x28, /* ...OO... */
|
||||
0x54, /* ..O..O.. */
|
||||
0x54, /* ...OO... */
|
||||
0x28, /* ..O..O.. */
|
||||
0x00, /* ...OO... */
|
||||
0x00},/* ........ */
|
||||
};
|
||||
|
||||
/* the tile struct
|
||||
|
@ -156,20 +156,20 @@ typedef struct tile {
|
|||
unsigned char neighbors : 4;
|
||||
} tile;
|
||||
|
||||
//the height and width of the field
|
||||
//could be variable if malloc worked in the API :)
|
||||
/* the height and width of the field */
|
||||
/* could be variable if malloc worked in the API :) */
|
||||
const int height = LCD_HEIGHT/8;
|
||||
const int width = LCD_WIDTH/8;
|
||||
|
||||
//the minefield
|
||||
/* the minefield */
|
||||
tile minefield[LCD_HEIGHT/8][LCD_WIDTH/8];
|
||||
|
||||
//total number of mines on the game
|
||||
/* total number of mines on the game */
|
||||
int mine_num = 0;
|
||||
|
||||
//discovers the tile when player clears one of them
|
||||
//a chain reaction (of discovery) occurs if tile has no mines
|
||||
//as neighbors
|
||||
/* discovers the tile when player clears one of them */
|
||||
/* a chain reaction (of discovery) occurs if tile has no mines */
|
||||
/* as neighbors */
|
||||
void discover(int, int);
|
||||
void discover(int x, int y){
|
||||
|
||||
|
@ -194,7 +194,7 @@ void discover(int x, int y){
|
|||
}
|
||||
|
||||
|
||||
//init not mine related elements of the mine field
|
||||
/* init not mine related elements of the mine field */
|
||||
void minesweeper_init(void){
|
||||
int i,j;
|
||||
|
||||
|
@ -207,9 +207,9 @@ void minesweeper_init(void){
|
|||
}
|
||||
|
||||
|
||||
//put mines on the mine field
|
||||
//there is p% chance that a tile is a mine
|
||||
//if the tile has coordinates (x,y), then it can't be a mine
|
||||
/* put mines on the mine field */
|
||||
/* there is p% chance that a tile is a mine */
|
||||
/* if the tile has coordinates (x,y), then it can't be a mine */
|
||||
void minesweeper_putmines(int p, int x, int y){
|
||||
int i,j;
|
||||
|
||||
|
@ -225,44 +225,49 @@ void minesweeper_putmines(int p, int x, int y){
|
|||
}
|
||||
}
|
||||
|
||||
//we need to compute the neighbor element for each tile
|
||||
/* we need to compute the neighbor element for each tile */
|
||||
for(i=0;i<height;i++){
|
||||
for(j=0;j<width;j++){
|
||||
if(i>0){
|
||||
if(j>0) minefield[i][j].neighbors += minefield[i-1][j-1].mine;
|
||||
if(j>0)
|
||||
minefield[i][j].neighbors += minefield[i-1][j-1].mine;
|
||||
minefield[i][j].neighbors += minefield[i-1][j].mine;
|
||||
if(j<width-1) minefield[i][j].neighbors += minefield[i-1][j+1].mine;
|
||||
if(j<width-1)
|
||||
minefield[i][j].neighbors += minefield[i-1][j+1].mine;
|
||||
}
|
||||
if(j>0) minefield[i][j].neighbors += minefield[i][j-1].mine;
|
||||
if(j<width-1) minefield[i][j].neighbors += minefield[i][j+1].mine;
|
||||
if(j>0)
|
||||
minefield[i][j].neighbors += minefield[i][j-1].mine;
|
||||
if(j<width-1)
|
||||
minefield[i][j].neighbors += minefield[i][j+1].mine;
|
||||
if(i<height-1){
|
||||
if(j>0) minefield[i][j].neighbors += minefield[i+1][j-1].mine;
|
||||
if(j>0)
|
||||
minefield[i][j].neighbors += minefield[i+1][j-1].mine;
|
||||
minefield[i][j].neighbors += minefield[i+1][j].mine;
|
||||
if(j<width-1) minefield[i][j].neighbors += minefield[i+1][j+1].mine;
|
||||
if(j<width-1)
|
||||
minefield[i][j].neighbors += minefield[i+1][j+1].mine;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//the big and ugly function that is the game
|
||||
int minesweeper(void){
|
||||
|
||||
|
||||
/* the big and ugly function that is the game */
|
||||
int minesweeper(void)
|
||||
{
|
||||
int i,j;
|
||||
|
||||
//the cursor coordinates
|
||||
/* the cursor coordinates */
|
||||
int x=0,y=0;
|
||||
|
||||
//number of tiles left on the game
|
||||
/* number of tiles left on the game */
|
||||
int tiles_left=width*height;
|
||||
|
||||
//percentage of mines on minefield used durring generation
|
||||
/* percentage of mines on minefield used durring generation */
|
||||
int p=16;
|
||||
|
||||
//a usefull string for snprintf
|
||||
/* a usefull string for snprintf */
|
||||
char str[30];
|
||||
|
||||
//welcome screen where player can chose mine percentage
|
||||
/* welcome screen where player can chose mine percentage */
|
||||
i = 0;
|
||||
while(true){
|
||||
rb->lcd_clear_display();
|
||||
|
@ -288,14 +293,15 @@ int minesweeper(void){
|
|||
p = (p + 2)%100;
|
||||
break;
|
||||
|
||||
case BUTTON_ON://start playing
|
||||
case BUTTON_ON:/* start playing */
|
||||
i = 1;
|
||||
break;
|
||||
|
||||
case BUTTON_OFF://quit program
|
||||
case BUTTON_OFF:/* quit program */
|
||||
return MINESWEEPER_QUIT;
|
||||
}
|
||||
if(i==1) break;
|
||||
if(i==1)
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
|
@ -333,43 +339,43 @@ int minesweeper(void){
|
|||
}
|
||||
}
|
||||
|
||||
//display the cursor
|
||||
/* display the cursor */
|
||||
rb->lcd_invertrect(x*8,y*8,8,8);
|
||||
|
||||
//update the screen
|
||||
/* update the screen */
|
||||
rb->lcd_update();
|
||||
|
||||
switch(rb->button_get(true)){
|
||||
//quit minesweeper (you really shouldn't use this button ...)
|
||||
/* quit minesweeper (you really shouldn't use this button ...) */
|
||||
case BUTTON_OFF:
|
||||
return MINESWEEPER_QUIT;
|
||||
|
||||
//move cursor left
|
||||
/* move cursor left */
|
||||
case BUTTON_LEFT:
|
||||
x = (x + width - 1)%width;
|
||||
break;
|
||||
|
||||
//move cursor right
|
||||
/* move cursor right */
|
||||
case BUTTON_RIGHT:
|
||||
x = (x + 1)%width;
|
||||
break;
|
||||
|
||||
//move cursor down
|
||||
/* move cursor down */
|
||||
case BUTTON_DOWN:
|
||||
y = (y + 1)%height;
|
||||
break;
|
||||
|
||||
//move cursor up
|
||||
/* move cursor up */
|
||||
case BUTTON_UP:
|
||||
y = (y + height - 1)%height;
|
||||
break;
|
||||
|
||||
//discover a tile (and it's neighbors if .neighbors == 0)
|
||||
/* discover a tile (and it's neighbors if .neighbors == 0) */
|
||||
case BUTTON_ON:
|
||||
case BUTTON_F2:
|
||||
if(minefield[y][x].flag) break;
|
||||
//we put the mines on the first "click" so that you don't
|
||||
//lose on the first "click"
|
||||
/* we put the mines on the first "click" so that you don't */
|
||||
/* lose on the first "click" */
|
||||
if(tiles_left == width*height) minesweeper_putmines(p,x,y);
|
||||
discover(x,y);
|
||||
if(minefield[y][x].mine){
|
||||
|
@ -386,14 +392,14 @@ int minesweeper(void){
|
|||
}
|
||||
break;
|
||||
|
||||
//toggle flag under cursor
|
||||
/* toggle flag under cursor */
|
||||
case BUTTON_PLAY:
|
||||
case BUTTON_F1:
|
||||
minefield[y][x].flag = (minefield[y][x].flag + 1)%2;
|
||||
break;
|
||||
|
||||
//show how many mines you think you have found and how many
|
||||
//there really are on the game
|
||||
/* show how many mines you think you have found and how many */
|
||||
/* there really are on the game */
|
||||
case BUTTON_F3:
|
||||
tiles_left = 0;
|
||||
for(i=0;i<height;i++){
|
||||
|
@ -408,14 +414,14 @@ int minesweeper(void){
|
|||
|
||||
}
|
||||
|
||||
//plugin entry point
|
||||
/* plugin entry point */
|
||||
enum plugin_status plugin_start(struct plugin_api* api, void* parameter)
|
||||
{
|
||||
//plugin init
|
||||
/* plugin init */
|
||||
TEST_PLUGIN_API(api);
|
||||
(void)parameter;
|
||||
rb = api;
|
||||
//end of plugin init
|
||||
/* end of plugin init */
|
||||
|
||||
switch(minesweeper()){
|
||||
case MINESWEEPER_WIN:
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue