forked from len0rd/rockbox
Move Sudoku plugin into its own subdirectory and add a random game generator.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@9407 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
parent
9fad701934
commit
0f619c65ba
10 changed files with 4254 additions and 89 deletions
|
@ -58,10 +58,6 @@ solitaire.c
|
||||||
sokoban.c
|
sokoban.c
|
||||||
star.c
|
star.c
|
||||||
starfield.c
|
starfield.c
|
||||||
#if (LCD_WIDTH != 176) && (LCD_WIDTH != 138)
|
|
||||||
/* These need adjusting for the iPod Nano and Mini */
|
|
||||||
sudoku.c
|
|
||||||
#endif
|
|
||||||
#if (LCD_WIDTH != 240) && (LCD_WIDTH != 138) && (LCD_WIDTH != 128)
|
#if (LCD_WIDTH != 240) && (LCD_WIDTH != 138) && (LCD_WIDTH != 128)
|
||||||
tetrox.c
|
tetrox.c
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -16,6 +16,10 @@ rockboy
|
||||||
/* For all targets with a bitmap display */
|
/* For all targets with a bitmap display */
|
||||||
#ifdef HAVE_LCD_BITMAP
|
#ifdef HAVE_LCD_BITMAP
|
||||||
chessbox
|
chessbox
|
||||||
|
#if (LCD_WIDTH != 176) && (LCD_WIDTH != 138)
|
||||||
|
/* This needs adjusting for the iPod Nano and Mini */
|
||||||
|
sudoku
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* For all the colour targets and iriver H1x0 */
|
/* For all the colour targets and iriver H1x0 */
|
||||||
|
|
117
apps/plugins/sudoku/Makefile
Normal file
117
apps/plugins/sudoku/Makefile
Normal file
|
@ -0,0 +1,117 @@
|
||||||
|
# __________ __ ___.
|
||||||
|
# Open \______ \ ____ ____ | | _\_ |__ _______ ___
|
||||||
|
# Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
|
||||||
|
# Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
|
||||||
|
# Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
|
||||||
|
# \/ \/ \/ \/ \/
|
||||||
|
# $Id$
|
||||||
|
#
|
||||||
|
|
||||||
|
INCLUDES = -I$(APPSDIR) -I.. -I. -I$(FIRMDIR)/include -I$(FIRMDIR)/export \
|
||||||
|
-I$(FIRMDIR)/common -I$(FIRMDIR)/drivers -I$(OUTDIR) -I$(BUILDDIR)
|
||||||
|
CFLAGS = $(GCCOPTS) $(INCLUDES) $(TARGET) $(EXTRA_DEFINES) \
|
||||||
|
-DTARGET_ID=$(TARGET_ID) -DMEM=${MEMORYSIZE} -DPLUGIN
|
||||||
|
|
||||||
|
ifdef APPEXTRA
|
||||||
|
INCLUDES += $(patsubst %,-I$(APPSDIR)/%,$(subst :, ,$(APPEXTRA)))
|
||||||
|
endif
|
||||||
|
|
||||||
|
LINKFILE := $(OBJDIR)/link.lds
|
||||||
|
DEPFILE = $(OBJDIR)/dep-sudoku
|
||||||
|
|
||||||
|
# This sets up 'SRC' based on the files mentioned in SOURCES
|
||||||
|
include $(TOOLSDIR)/makesrc.inc
|
||||||
|
|
||||||
|
SOURCES = $(SRC)
|
||||||
|
OBJS := $(SRC:%.c=$(OBJDIR)/%.o)
|
||||||
|
DIRS = .
|
||||||
|
|
||||||
|
ifndef SIMVER
|
||||||
|
LDS := ../plugin.lds
|
||||||
|
OUTPUT = $(OUTDIR)/sudoku.rock
|
||||||
|
else ## simulators
|
||||||
|
OUTPUT = $(OUTDIR)/sudoku.rock
|
||||||
|
endif
|
||||||
|
|
||||||
|
all: $(OUTPUT)
|
||||||
|
|
||||||
|
ifndef SIMVER
|
||||||
|
$(OBJDIR)/sudoku.elf: $(OBJS) $(LINKFILE) $(BITMAPLIBS)
|
||||||
|
@echo "LD "`basename $@`
|
||||||
|
@$(CC) $(GCCOPTS) -O -nostdlib -o $@ $(OBJS) -L$(BUILDDIR) -lplugin -lgcc \
|
||||||
|
$(LINKBITMAPS) -T$(LINKFILE) -Wl,-Map,$(OBJDIR)/sudoku.map
|
||||||
|
|
||||||
|
$(OUTPUT): $(OBJDIR)/sudoku.elf
|
||||||
|
@echo "OBJCOPY "`basename $@`
|
||||||
|
@$(OC) -O binary $< $@
|
||||||
|
else
|
||||||
|
|
||||||
|
ifeq ($(SIMVER), x11)
|
||||||
|
###################################################
|
||||||
|
# This is the X11 simulator version
|
||||||
|
|
||||||
|
$(OUTPUT): $(OBJS)
|
||||||
|
@echo "LD $<"
|
||||||
|
@$(CC) $(CFLAGS) -shared $(OBJS) -L$(BUILDDIR) -lplugin $(LINKBITMAPS) -o $@
|
||||||
|
ifeq ($(findstring CYGWIN,$(UNAME)),CYGWIN)
|
||||||
|
# 'x' must be kept or you'll have "Win32 error 5"
|
||||||
|
# $ fgrep 5 /usr/include/w32api/winerror.h | head -1
|
||||||
|
# #define ERROR_ACCESS_DENIED 5L
|
||||||
|
else
|
||||||
|
@chmod -x $@
|
||||||
|
endif
|
||||||
|
|
||||||
|
else # end of x11-simulator
|
||||||
|
ifeq ($(SIMVER), sdl)
|
||||||
|
###################################################
|
||||||
|
# This is the SDL simulator version
|
||||||
|
|
||||||
|
$(OUTPUT): $(OBJS)
|
||||||
|
@echo "LD $<"
|
||||||
|
@$(CC) $(CFLAGS) -shared $(OBJS) -L$(BUILDDIR) -lplugin $(LINKBITMAPS) -o $@
|
||||||
|
ifeq ($(findstring CYGWIN,$(UNAME)),CYGWIN)
|
||||||
|
# 'x' must be kept or you'll have "Win32 error 5"
|
||||||
|
# $ fgrep 5 /usr/include/w32api/winerror.h | head -1
|
||||||
|
# #define ERROR_ACCESS_DENIED 5L
|
||||||
|
else
|
||||||
|
@chmod -x $@
|
||||||
|
endif
|
||||||
|
|
||||||
|
else # end of sdl-simulator
|
||||||
|
###################################################
|
||||||
|
# This is the win32 simulator version
|
||||||
|
DLLTOOLFLAGS = --export-all
|
||||||
|
DLLWRAPFLAGS = -s --entry _DllMain@12 --target=i386-mingw32 -mno-cygwin
|
||||||
|
|
||||||
|
$(OUTPUT): $(OBJS)
|
||||||
|
@echo "DLL "`basename $@`
|
||||||
|
@$(DLLTOOL) $(DLLTOOLFLAGS) -z $(OBJDIR)/$*.def $(OBJS)
|
||||||
|
@$(DLLWRAP) $(DLLWRAPFLAGS) --def $(OBJDIR)/$*.def $(OBJS) \
|
||||||
|
$(BUILDDIR)/libplugin.a $(BITMAPLIBS) -o $@
|
||||||
|
ifeq ($(findstring CYGWIN,$(UNAME)),CYGWIN)
|
||||||
|
# 'x' must be kept or you'll have "Win32 error 5"
|
||||||
|
# $ fgrep 5 /usr/include/w32api/winerror.h | head -1
|
||||||
|
# #define ERROR_ACCESS_DENIED 5L
|
||||||
|
else
|
||||||
|
@chmod -x $@
|
||||||
|
endif
|
||||||
|
endif # end of win32-simulator
|
||||||
|
endif
|
||||||
|
endif # end of simulator section
|
||||||
|
|
||||||
|
|
||||||
|
include $(TOOLSDIR)/make.inc
|
||||||
|
|
||||||
|
# MEMORYSIZE should be passed on to this makefile with the chosen memory size
|
||||||
|
# given in number of MB
|
||||||
|
$(LINKFILE): $(LDS)
|
||||||
|
@echo "build "`basename $@`
|
||||||
|
@cat $< | $(CC) -DMEMORYSIZE=$(MEMORYSIZE) $(INCLUDES) $(TARGET) \
|
||||||
|
$(DEFINES) -E -P - >$@
|
||||||
|
|
||||||
|
clean:
|
||||||
|
@echo "cleaning sudoku"
|
||||||
|
@rm -rf $(OBJDIR)/sudoku
|
||||||
|
@rm -f $(OBJDIR)/sudoku.* $(DEPFILE)
|
||||||
|
|
||||||
|
-include $(DEPFILE)
|
3
apps/plugins/sudoku/SOURCES
Normal file
3
apps/plugins/sudoku/SOURCES
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
sudoku.c
|
||||||
|
generator.c
|
||||||
|
templates.c
|
1097
apps/plugins/sudoku/generator.c
Normal file
1097
apps/plugins/sudoku/generator.c
Normal file
File diff suppressed because it is too large
Load diff
1
apps/plugins/sudoku/generator.h
Normal file
1
apps/plugins/sudoku/generator.h
Normal file
|
@ -0,0 +1 @@
|
||||||
|
bool sudoku_generate_board(struct sudoku_state_t* state, char** difficulty);
|
|
@ -60,69 +60,12 @@ Example ".ss" file, and one with a saved state:
|
||||||
|
|
||||||
#ifdef HAVE_LCD_BITMAP
|
#ifdef HAVE_LCD_BITMAP
|
||||||
|
|
||||||
|
#include "sudoku.h"
|
||||||
|
#include "generator.h"
|
||||||
|
|
||||||
PLUGIN_HEADER
|
PLUGIN_HEADER
|
||||||
|
|
||||||
#define STATE_FILE PLUGIN_DIR "/sudoku.state"
|
struct plugin_api* rb;
|
||||||
#define GAMES_FILE PLUGIN_DIR "/sudoku.levels"
|
|
||||||
|
|
||||||
/* variable button definitions */
|
|
||||||
#if CONFIG_KEYPAD == RECORDER_PAD
|
|
||||||
#define SUDOKU_BUTTON_QUIT BUTTON_OFF
|
|
||||||
#define SUDOKU_BUTTON_UP BUTTON_UP
|
|
||||||
#define SUDOKU_BUTTON_DOWN BUTTON_DOWN
|
|
||||||
#define SUDOKU_BUTTON_TOGGLE BUTTON_PLAY
|
|
||||||
#define SUDOKU_BUTTON_MENU BUTTON_F1
|
|
||||||
#define SUDOKU_BUTTON_POSSIBLE BUTTON_F2
|
|
||||||
|
|
||||||
#elif CONFIG_KEYPAD == ONDIO_PAD
|
|
||||||
#define SUDOKU_BUTTON_QUIT BUTTON_OFF
|
|
||||||
#define SUDOKU_BUTTON_UP BUTTON_UP
|
|
||||||
#define SUDOKU_BUTTON_DOWN BUTTON_DOWN
|
|
||||||
#define SUDOKU_BUTTON_ALTTOGGLE (BUTTON_MENU | BUTTON_DOWN)
|
|
||||||
#define SUDOKU_BUTTON_TOGGLE_PRE BUTTON_MENU
|
|
||||||
#define SUDOKU_BUTTON_TOGGLE (BUTTON_MENU | BUTTON_REL)
|
|
||||||
#define SUDOKU_BUTTON_MENU_PRE BUTTON_MENU
|
|
||||||
#define SUDOKU_BUTTON_MENU (BUTTON_MENU | BUTTON_REPEAT)
|
|
||||||
#define SUDOKU_BUTTON_POSSIBLE (BUTTON_MENU | BUTTON_LEFT)
|
|
||||||
|
|
||||||
#elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || \
|
|
||||||
(CONFIG_KEYPAD == IRIVER_H300_PAD)
|
|
||||||
#define SUDOKU_BUTTON_QUIT BUTTON_OFF
|
|
||||||
#define SUDOKU_BUTTON_UP BUTTON_UP
|
|
||||||
#define SUDOKU_BUTTON_DOWN BUTTON_DOWN
|
|
||||||
#define SUDOKU_BUTTON_ALTTOGGLE BUTTON_ON
|
|
||||||
#define SUDOKU_BUTTON_TOGGLE BUTTON_SELECT
|
|
||||||
#define SUDOKU_BUTTON_MENU BUTTON_MODE
|
|
||||||
#define SUDOKU_BUTTON_POSSIBLE BUTTON_REC
|
|
||||||
|
|
||||||
#elif (CONFIG_KEYPAD == IPOD_4G_PAD) || \
|
|
||||||
(CONFIG_KEYPAD == IPOD_3G_PAD)
|
|
||||||
#define SUDOKU_BUTTON_QUIT (BUTTON_SELECT | BUTTON_MENU)
|
|
||||||
#define SUDOKU_BUTTON_UP BUTTON_SCROLL_BACK
|
|
||||||
#define SUDOKU_BUTTON_DOWN BUTTON_SCROLL_FWD
|
|
||||||
#define SUDOKU_BUTTON_TOGGLE BUTTON_SELECT
|
|
||||||
#define SUDOKU_BUTTON_MENU BUTTON_MENU
|
|
||||||
#define SUDOKU_BUTTON_POSSIBLE (BUTTON_SELECT | BUTTON_LEFT)
|
|
||||||
|
|
||||||
#elif (CONFIG_KEYPAD == IAUDIO_X5_PAD)
|
|
||||||
#define SUDOKU_BUTTON_QUIT BUTTON_POWER
|
|
||||||
#define SUDOKU_BUTTON_UP BUTTON_UP
|
|
||||||
#define SUDOKU_BUTTON_DOWN BUTTON_DOWN
|
|
||||||
#define SUDOKU_BUTTON_TOGGLE BUTTON_SELECT
|
|
||||||
#define SUDOKU_BUTTON_MENU BUTTON_PLAY
|
|
||||||
#define SUDOKU_BUTTON_POSSIBLE BUTTON_REC
|
|
||||||
|
|
||||||
#elif (CONFIG_KEYPAD == GIGABEAT_PAD)
|
|
||||||
#define SUDOKU_BUTTON_QUIT BUTTON_A
|
|
||||||
#define SUDOKU_BUTTON_UP BUTTON_UP
|
|
||||||
#define SUDOKU_BUTTON_DOWN BUTTON_DOWN
|
|
||||||
#define SUDOKU_BUTTON_TOGGLE BUTTON_SELECT
|
|
||||||
#define SUDOKU_BUTTON_MENU BUTTON_MENU
|
|
||||||
#define SUDOKU_BUTTON_POSSIBLE BUTTON_POWER
|
|
||||||
|
|
||||||
#elif
|
|
||||||
#error SUDOKU: Unsupported keypad
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* The bitmaps */
|
/* The bitmaps */
|
||||||
extern const fb_data sudoku_normal[];
|
extern const fb_data sudoku_normal[];
|
||||||
|
@ -204,23 +147,6 @@ static unsigned char cellypos[9]={ 2, 19, 36, 54, 71, 88, 106, 123, 140 };
|
||||||
#error SUDOKU: Unsupported LCD size
|
#error SUDOKU: Unsupported LCD size
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* here is a global api struct pointer. while not strictly necessary,
|
|
||||||
it's nice not to have to pass the api pointer in all function calls
|
|
||||||
in the plugin */
|
|
||||||
static struct plugin_api* rb;
|
|
||||||
|
|
||||||
struct sudoku_state_t {
|
|
||||||
char filename[MAX_PATH]; /* Filename */
|
|
||||||
char startboard[9][9]; /* The initial state of the game */
|
|
||||||
char currentboard[9][9]; /* The current state of the game */
|
|
||||||
char savedboard[9][9]; /* Cached copy of saved state */
|
|
||||||
int x,y; /* Cursor position */
|
|
||||||
int editmode; /* We are editing the start board */
|
|
||||||
#ifdef SUDOKU_BUTTON_POSSIBLE
|
|
||||||
short possiblevals[9][9]; /* possible values a cell could be, user sets them */
|
|
||||||
#endif
|
|
||||||
};
|
|
||||||
|
|
||||||
/****** Solver routine by Tom Shackell <shackell@cs.york.ac.uk>
|
/****** Solver routine by Tom Shackell <shackell@cs.york.ac.uk>
|
||||||
|
|
||||||
Downloaded from:
|
Downloaded from:
|
||||||
|
@ -541,7 +467,6 @@ bool load_sudoku(struct sudoku_state_t* state, char* filename)
|
||||||
|
|
||||||
fd=rb->open(filename, O_RDONLY);
|
fd=rb->open(filename, O_RDONLY);
|
||||||
if (fd < 0) {
|
if (fd < 0) {
|
||||||
rb->splash(HZ*2, true, "Can not open");
|
|
||||||
LOGF("Invalid sudoku file: %s\n",filename);
|
LOGF("Invalid sudoku file: %s\n",filename);
|
||||||
return(false);
|
return(false);
|
||||||
}
|
}
|
||||||
|
@ -617,8 +542,8 @@ bool save_sudoku(struct sudoku_state_t* state)
|
||||||
int fd;
|
int fd;
|
||||||
int r,c;
|
int r,c;
|
||||||
int i;
|
int i;
|
||||||
char line[16];
|
char line[13];
|
||||||
char sep[16];
|
char sep[13];
|
||||||
|
|
||||||
rb->memcpy(line,"...|...|...\r\n",13);
|
rb->memcpy(line,"...|...|...\r\n",13);
|
||||||
rb->memcpy(sep,"-----------\r\n",13);
|
rb->memcpy(sep,"-----------\r\n",13);
|
||||||
|
@ -644,9 +569,9 @@ bool save_sudoku(struct sudoku_state_t* state)
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
rb->write(fd,line,sizeof(line)-1);
|
rb->write(fd,line,sizeof(line));
|
||||||
if ((r==2) || (r==5)) {
|
if ((r==2) || (r==5)) {
|
||||||
rb->write(fd,sep,sizeof(sep)-1);
|
rb->write(fd,sep,sizeof(sep));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/* Add a blank line at end */
|
/* Add a blank line at end */
|
||||||
|
@ -899,6 +824,23 @@ bool check_status(struct sudoku_state_t* state)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void sudoku_generate(struct sudoku_state_t* state)
|
||||||
|
{
|
||||||
|
char* difficulty;
|
||||||
|
char str[80];
|
||||||
|
|
||||||
|
clear_state(state);
|
||||||
|
display_board(state);
|
||||||
|
rb->splash(0, true, "Generating...");
|
||||||
|
|
||||||
|
sudoku_generate_board(state,&difficulty);
|
||||||
|
|
||||||
|
rb->snprintf(str,sizeof(str),"Difficulty: %s",difficulty);
|
||||||
|
display_board(state);
|
||||||
|
rb->splash(3*HZ, true, str);
|
||||||
|
rb->strncpy(state->filename,GAME_FILE,MAX_PATH);
|
||||||
|
}
|
||||||
|
|
||||||
int sudoku_menu_cb(int key, int m)
|
int sudoku_menu_cb(int key, int m)
|
||||||
{
|
{
|
||||||
(void)m;
|
(void)m;
|
||||||
|
@ -932,7 +874,9 @@ bool sudoku_menu(struct sudoku_state_t* state)
|
||||||
{ "Reload", NULL },
|
{ "Reload", NULL },
|
||||||
{ "Clear", NULL },
|
{ "Clear", NULL },
|
||||||
{ "Solve", NULL },
|
{ "Solve", NULL },
|
||||||
|
{ "Generate", NULL },
|
||||||
{ "New", NULL },
|
{ "New", NULL },
|
||||||
|
{ "Quit", NULL },
|
||||||
};
|
};
|
||||||
|
|
||||||
m = rb->menu_init(items, sizeof(items) / sizeof(*items),
|
m = rb->menu_init(items, sizeof(items) / sizeof(*items),
|
||||||
|
@ -957,11 +901,21 @@ bool sudoku_menu(struct sudoku_state_t* state)
|
||||||
sudoku_solve(state);
|
sudoku_solve(state);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 4: /* Create a new game manually */
|
case 4: /* Generate Game */
|
||||||
|
sudoku_generate(state);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 5: /* Create a new game manually */
|
||||||
clear_state(state);
|
clear_state(state);
|
||||||
state->editmode=1;
|
state->editmode=1;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case 6: /* Quit */
|
||||||
|
save_sudoku(state);
|
||||||
|
rb->menu_exit(m);
|
||||||
|
return true;
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -1010,7 +964,11 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter)
|
||||||
clear_state(&state);
|
clear_state(&state);
|
||||||
|
|
||||||
if (parameter==NULL) {
|
if (parameter==NULL) {
|
||||||
state.editmode=1;
|
/* We have been started as a plugin - try default sudoku.ss */
|
||||||
|
if (!load_sudoku(&state,GAME_FILE)) {
|
||||||
|
/* No previous game saved, generate one */
|
||||||
|
sudoku_generate(&state);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
if (!load_sudoku(&state,(char*)parameter)) {
|
if (!load_sudoku(&state,(char*)parameter)) {
|
||||||
rb->splash(HZ*2, true, "Load error");
|
rb->splash(HZ*2, true, "Load error");
|
104
apps/plugins/sudoku/sudoku.h
Normal file
104
apps/plugins/sudoku/sudoku.h
Normal file
|
@ -0,0 +1,104 @@
|
||||||
|
/***************************************************************************
|
||||||
|
* __________ __ ___.
|
||||||
|
* Open \______ \ ____ ____ | | _\_ |__ _______ ___
|
||||||
|
* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
|
||||||
|
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
|
||||||
|
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
|
||||||
|
* \/ \/ \/ \/ \/
|
||||||
|
* $Id$
|
||||||
|
*
|
||||||
|
* Copyright (C) 2005 Dave Chapman
|
||||||
|
*
|
||||||
|
* All files in this archive are subject to the GNU General Public License.
|
||||||
|
* See the file COPYING in the source tree root for full license agreement.
|
||||||
|
*
|
||||||
|
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
||||||
|
* KIND, either express or implied.
|
||||||
|
*
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
#ifndef _SUDOKU_H
|
||||||
|
#define _SUDOKU_H
|
||||||
|
|
||||||
|
#include "plugin.h"
|
||||||
|
|
||||||
|
/* here is a global api struct pointer. while not strictly necessary,
|
||||||
|
it's nice not to have to pass the api pointer in all function calls
|
||||||
|
in the plugin */
|
||||||
|
|
||||||
|
#define STATE_FILE PLUGIN_DIR "/sudoku.state"
|
||||||
|
#define GAME_FILE PLUGIN_DIR "/sudoku.ss"
|
||||||
|
|
||||||
|
/* variable button definitions */
|
||||||
|
#if CONFIG_KEYPAD == RECORDER_PAD
|
||||||
|
#define SUDOKU_BUTTON_QUIT BUTTON_OFF
|
||||||
|
#define SUDOKU_BUTTON_UP BUTTON_UP
|
||||||
|
#define SUDOKU_BUTTON_DOWN BUTTON_DOWN
|
||||||
|
#define SUDOKU_BUTTON_TOGGLE BUTTON_PLAY
|
||||||
|
#define SUDOKU_BUTTON_MENU BUTTON_F1
|
||||||
|
#define SUDOKU_BUTTON_POSSIBLE BUTTON_F2
|
||||||
|
|
||||||
|
#elif CONFIG_KEYPAD == ONDIO_PAD
|
||||||
|
#define SUDOKU_BUTTON_QUIT BUTTON_OFF
|
||||||
|
#define SUDOKU_BUTTON_UP BUTTON_UP
|
||||||
|
#define SUDOKU_BUTTON_DOWN BUTTON_DOWN
|
||||||
|
#define SUDOKU_BUTTON_ALTTOGGLE (BUTTON_MENU | BUTTON_DOWN)
|
||||||
|
#define SUDOKU_BUTTON_TOGGLE_PRE BUTTON_MENU
|
||||||
|
#define SUDOKU_BUTTON_TOGGLE (BUTTON_MENU | BUTTON_REL)
|
||||||
|
#define SUDOKU_BUTTON_MENU_PRE BUTTON_MENU
|
||||||
|
#define SUDOKU_BUTTON_MENU (BUTTON_MENU | BUTTON_REPEAT)
|
||||||
|
#define SUDOKU_BUTTON_POSSIBLE (BUTTON_MENU | BUTTON_LEFT)
|
||||||
|
|
||||||
|
#elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || \
|
||||||
|
(CONFIG_KEYPAD == IRIVER_H300_PAD)
|
||||||
|
#define SUDOKU_BUTTON_QUIT BUTTON_OFF
|
||||||
|
#define SUDOKU_BUTTON_UP BUTTON_UP
|
||||||
|
#define SUDOKU_BUTTON_DOWN BUTTON_DOWN
|
||||||
|
#define SUDOKU_BUTTON_ALTTOGGLE BUTTON_ON
|
||||||
|
#define SUDOKU_BUTTON_TOGGLE BUTTON_SELECT
|
||||||
|
#define SUDOKU_BUTTON_MENU BUTTON_MODE
|
||||||
|
#define SUDOKU_BUTTON_POSSIBLE BUTTON_REC
|
||||||
|
|
||||||
|
#elif (CONFIG_KEYPAD == IPOD_4G_PAD) || \
|
||||||
|
(CONFIG_KEYPAD == IPOD_3G_PAD)
|
||||||
|
#define SUDOKU_BUTTON_QUIT (BUTTON_SELECT | BUTTON_MENU)
|
||||||
|
#define SUDOKU_BUTTON_UP BUTTON_SCROLL_BACK
|
||||||
|
#define SUDOKU_BUTTON_DOWN BUTTON_SCROLL_FWD
|
||||||
|
#define SUDOKU_BUTTON_TOGGLE BUTTON_SELECT
|
||||||
|
#define SUDOKU_BUTTON_MENU BUTTON_MENU
|
||||||
|
#define SUDOKU_BUTTON_POSSIBLE (BUTTON_SELECT | BUTTON_LEFT)
|
||||||
|
|
||||||
|
#elif (CONFIG_KEYPAD == IAUDIO_X5_PAD)
|
||||||
|
#define SUDOKU_BUTTON_QUIT BUTTON_POWER
|
||||||
|
#define SUDOKU_BUTTON_UP BUTTON_UP
|
||||||
|
#define SUDOKU_BUTTON_DOWN BUTTON_DOWN
|
||||||
|
#define SUDOKU_BUTTON_TOGGLE BUTTON_SELECT
|
||||||
|
#define SUDOKU_BUTTON_MENU BUTTON_PLAY
|
||||||
|
#define SUDOKU_BUTTON_POSSIBLE BUTTON_REC
|
||||||
|
|
||||||
|
#elif (CONFIG_KEYPAD == GIGABEAT_PAD)
|
||||||
|
#define SUDOKU_BUTTON_QUIT BUTTON_A
|
||||||
|
#define SUDOKU_BUTTON_UP BUTTON_UP
|
||||||
|
#define SUDOKU_BUTTON_DOWN BUTTON_DOWN
|
||||||
|
#define SUDOKU_BUTTON_TOGGLE BUTTON_SELECT
|
||||||
|
#define SUDOKU_BUTTON_MENU BUTTON_MENU
|
||||||
|
#define SUDOKU_BUTTON_POSSIBLE BUTTON_POWER
|
||||||
|
|
||||||
|
#elif
|
||||||
|
#error SUDOKU: Unsupported keypad
|
||||||
|
#endif
|
||||||
|
|
||||||
|
struct sudoku_state_t {
|
||||||
|
char filename[MAX_PATH]; /* Filename */
|
||||||
|
char startboard[9][9]; /* The initial state of the game */
|
||||||
|
char currentboard[9][9]; /* The current state of the game */
|
||||||
|
char savedboard[9][9]; /* Cached copy of saved state */
|
||||||
|
int x,y; /* Cursor position */
|
||||||
|
int editmode; /* We are editing the start board */
|
||||||
|
#ifdef SUDOKU_BUTTON_POSSIBLE
|
||||||
|
short possiblevals[9][9]; /* possible values a cell could be, user sets them */
|
||||||
|
#endif
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
2877
apps/plugins/sudoku/templates.c
Normal file
2877
apps/plugins/sudoku/templates.c
Normal file
File diff suppressed because it is too large
Load diff
8
apps/plugins/sudoku/templates.h
Normal file
8
apps/plugins/sudoku/templates.h
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
|
||||||
|
#ifndef _TEMPLATES_H
|
||||||
|
#define _TEMPLATES_H
|
||||||
|
|
||||||
|
#define NUM_TEMPLATES 261
|
||||||
|
extern const unsigned short templates[NUM_TEMPLATES][9];
|
||||||
|
|
||||||
|
#endif
|
Loading…
Add table
Add a link
Reference in a new issue