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
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);
|
1124
apps/plugins/sudoku/sudoku.c
Normal file
1124
apps/plugins/sudoku/sudoku.c
Normal file
File diff suppressed because it is too large
Load diff
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