|
|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T p
Length: 19087 (0x4a8f)
Types: TextFile
Names: »puzzletool.c«
└─⟦b20c6495f⟧ Bits:30007238 EUUGD18: Wien-båndet, efterår 1987
└─⟦this⟧ »EUUGD18/Sun/Puzzle/puzzletool.c«
#include "puzzletool.h"
void canvas_proc() ;
Canvas canvas, rcanvas ;
Cursor main_cursor ;
Event event ;
Frame frame ;
Icon puzzletool_icon ;
Panel panel ;
Panel_item display_item ;
struct Pixfont *nfont ;
Pixwin *cpw ;
short piece0_image[] = {
/* Format_version=1, Width=64, Height=64, Depth=1, Valid_bits_per_item=16
*/
0x0000,0x0000,0x0000,0x0000,0x7FFF,0xFFFE,0x0000,0x0000,
0x7BBB,0xBBBA,0x0000,0x0000,0x6EEE,0xEEEE,0x0000,0x0000,
0x7777,0x7776,0x0000,0x0000,0x5DDD,0xDDDE,0x0000,0x0000,
0x7BBB,0xBBBA,0x0000,0x0000,0x6EEE,0xEEEE,0x0000,0x0000,
0x7777,0x7776,0x0000,0x0000,0x5DDD,0xDDDE,0x0000,0x0000,
0x7BBB,0xBBBA,0x0000,0x0000,0x6EEE,0xEEEE,0x0000,0x0000,
0x7777,0x7776,0x0000,0x0000,0x5DDD,0xDDDE,0x0000,0x0000,
0x7BBB,0xBBBA,0x0000,0x0000,0x6EEE,0xEEEE,0x0000,0x0000,
0x7777,0x7776,0x0000,0x0000,0x5DDD,0xDDDE,0x0000,0x0000,
0x7BBB,0xBBBA,0x0000,0x0000,0x6EEE,0xEEEE,0x0000,0x0000,
0x7777,0x7776,0x0000,0x0000,0x5DDD,0xDDDE,0x0000,0x0000,
0x7BBB,0xBBBA,0x0000,0x0000,0x6EEE,0xEEEE,0x0000,0x0000,
0x7777,0x7776,0x0000,0x0000,0x5DDD,0xDDDE,0x0000,0x0000,
0x7BBB,0xBBBA,0x0000,0x0000,0x6EEE,0xEEEE,0x0000,0x0000,
0x7777,0x7776,0x0000,0x0000,0x5DDD,0xDDDE,0x0000,0x0000,
0x7FFF,0xFFFE,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000
} ;
mpr_static(piece0_pr,64,64,1,piece0_image) ;
short piece1_image[] = {
/* Format_version=1, Width=64, Height=64, Depth=1, Valid_bits_per_item=16
*/
0x0000,0x0000,0x0000,0x0000,0x7FFF,0xFFFE,0x0000,0x0000,
0x6AAA,0xAAAA,0x0000,0x0000,0x5555,0x5556,0x0000,0x0000,
0x6AAA,0xAAAA,0x0000,0x0000,0x5555,0x5556,0x0000,0x0000,
0x6AAA,0xAAAA,0x0000,0x0000,0x5555,0x5556,0x0000,0x0000,
0x6AAA,0xAAAA,0x0000,0x0000,0x5555,0x5556,0x0000,0x0000,
0x6AAA,0xAAAA,0x0000,0x0000,0x5555,0x5556,0x0000,0x0000,
0x6AAA,0xAAAA,0x0000,0x0000,0x5555,0x5556,0x0000,0x0000,
0x6AAA,0xAAAA,0x0000,0x0000,0x5555,0x5556,0x0000,0x0000,
0x6AAA,0xAAAA,0x0000,0x0000,0x5555,0x5556,0x0000,0x0000,
0x6AAA,0xAAAA,0x0000,0x0000,0x5555,0x5556,0x0000,0x0000,
0x6AAA,0xAAAA,0x0000,0x0000,0x5555,0x5556,0x0000,0x0000,
0x6AAA,0xAAAA,0x0000,0x0000,0x5555,0x5556,0x0000,0x0000,
0x6AAA,0xAAAA,0x0000,0x0000,0x5555,0x5556,0x0000,0x0000,
0x6AAA,0xAAAA,0x0000,0x0000,0x5555,0x5556,0x0000,0x0000,
0x6AAA,0xAAAA,0x0000,0x0000,0x5555,0x5556,0x0000,0x0000,
0x6AAA,0xAAAA,0x0000,0x0000,0x5555,0x5556,0x0000,0x0000,
0x6AAA,0xAAAA,0x0000,0x0000,0x5555,0x5556,0x0000,0x0000,
0x6AAA,0xAAAA,0x0000,0x0000,0x5555,0x5556,0x0000,0x0000,
0x6AAA,0xAAAA,0x0000,0x0000,0x5555,0x5556,0x0000,0x0000,
0x6AAA,0xAAAA,0x0000,0x0000,0x5555,0x5556,0x0000,0x0000,
0x6AAA,0xAAAA,0x0000,0x0000,0x5555,0x5556,0x0000,0x0000,
0x6AAA,0xAAAA,0x0000,0x0000,0x5555,0x5556,0x0000,0x0000,
0x6AAA,0xAAAA,0x0000,0x0000,0x5555,0x5556,0x0000,0x0000,
0x6AAA,0xAAAA,0x0000,0x0000,0x5555,0x5556,0x0000,0x0000,
0x6AAA,0xAAAA,0x0000,0x0000,0x5555,0x5556,0x0000,0x0000,
0x6AAA,0xAAAA,0x0000,0x0000,0x5555,0x5556,0x0000,0x0000,
0x6AAA,0xAAAA,0x0000,0x0000,0x5555,0x5556,0x0000,0x0000,
0x6AAA,0xAAAA,0x0000,0x0000,0x5555,0x5556,0x0000,0x0000,
0x6AAA,0xAAAA,0x0000,0x0000,0x5555,0x5556,0x0000,0x0000,
0x6AAA,0xAAAA,0x0000,0x0000,0x5555,0x5556,0x0000,0x0000,
0x6AAA,0xAAAA,0x0000,0x0000,0x5555,0x5556,0x0000,0x0000,
0x7FFF,0xFFFE,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000
} ;
mpr_static(piece1_pr,64,64,1,piece1_image) ;
short piece2_image[] = {
/* Format_version=1, Width=64, Height=64, Depth=1, Valid_bits_per_item=16
*/
0x0000,0x0000,0x0000,0x0000,0x7FFF,0xFFFF,0xFFFF,0xFFFE,
0x6AAA,0xAAAA,0xAAAA,0xAAAA,0x5555,0x5555,0x5555,0x5556,
0x6AAA,0xAAAA,0xAAAA,0xAAAA,0x5555,0x5555,0x5555,0x5556,
0x6AAA,0xAAAA,0xAAAA,0xAAAA,0x5555,0x5555,0x5555,0x5556,
0x6AAA,0xAAAA,0xAAAA,0xAAAA,0x5555,0x5555,0x5555,0x5556,
0x6AAA,0xAAAA,0xAAAA,0xAAAA,0x5555,0x5555,0x5555,0x5556,
0x6AAA,0xAAAA,0xAAAA,0xAAAA,0x5555,0x5555,0x5555,0x5556,
0x6AAA,0xAAAA,0xAAAA,0xAAAA,0x5555,0x5555,0x5555,0x5556,
0x6AAA,0xAAAA,0xAAAA,0xAAAA,0x5555,0x5555,0x5555,0x5556,
0x6AAA,0xAAAA,0xAAAA,0xAAAA,0x5555,0x5555,0x5555,0x5556,
0x6AAA,0xAAAA,0xAAAA,0xAAAA,0x5555,0x5555,0x5555,0x5556,
0x6AAA,0xAAAA,0xAAAA,0xAAAA,0x5555,0x5555,0x5555,0x5556,
0x6AAA,0xAAAA,0xAAAA,0xAAAA,0x5555,0x5555,0x5555,0x5556,
0x6AAA,0xAAAA,0xAAAA,0xAAAA,0x5555,0x5555,0x5555,0x5556,
0x6AAA,0xAAAA,0xAAAA,0xAAAA,0x5555,0x5555,0x5555,0x5556,
0x7FFF,0xFFFF,0xFFFF,0xFFFE,0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000
} ;
mpr_static(piece2_pr,64,64,1,piece2_image) ;
short piece3_image[] = {
/* Format_version=1, Width=64, Height=64, Depth=1, Valid_bits_per_item=16
*/
0x0000,0x0000,0x0000,0x0000,0x7FFF,0xFFFF,0xFFFF,0xFFFE,
0x4444,0x4444,0x4444,0x4446,0x5111,0x1111,0x1111,0x1112,
0x4888,0x8888,0x8888,0x888A,0x6222,0x2222,0x2222,0x2222,
0x4444,0x4444,0x4444,0x4446,0x5111,0x1111,0x1111,0x1112,
0x4888,0x8888,0x8888,0x888A,0x6222,0x2222,0x2222,0x2222,
0x4444,0x4444,0x4444,0x4446,0x5111,0x1111,0x1111,0x1112,
0x4888,0x8888,0x8888,0x888A,0x6222,0x2222,0x2222,0x2222,
0x4444,0x4444,0x4444,0x4446,0x5111,0x1111,0x1111,0x1112,
0x4888,0x8888,0x8888,0x888A,0x6222,0x2222,0x2222,0x2222,
0x4444,0x4444,0x4444,0x4446,0x5111,0x1111,0x1111,0x1112,
0x4888,0x8888,0x8888,0x888A,0x6222,0x2222,0x2222,0x2222,
0x4444,0x4444,0x4444,0x4446,0x5111,0x1111,0x1111,0x1112,
0x4888,0x8888,0x8888,0x888A,0x6222,0x2222,0x2222,0x2222,
0x4444,0x4444,0x4444,0x4446,0x5111,0x1111,0x1111,0x1112,
0x4888,0x8888,0x8888,0x888A,0x6222,0x2222,0x2222,0x2222,
0x4444,0x4444,0x4444,0x4446,0x5111,0x1111,0x1111,0x1112,
0x4888,0x8888,0x8888,0x888A,0x6222,0x2222,0x2222,0x2222,
0x4444,0x4444,0x4444,0x4446,0x5111,0x1111,0x1111,0x1112,
0x4888,0x8888,0x8888,0x888A,0x6222,0x2222,0x2222,0x2222,
0x4444,0x4444,0x4444,0x4446,0x5111,0x1111,0x1111,0x1112,
0x4888,0x8888,0x8888,0x888A,0x6222,0x2222,0x2222,0x2222,
0x4444,0x4444,0x4444,0x4446,0x5111,0x1111,0x1111,0x1112,
0x4888,0x8888,0x8888,0x888A,0x6222,0x2222,0x2222,0x2222,
0x4444,0x4444,0x4444,0x4446,0x5111,0x1111,0x1111,0x1112,
0x4888,0x8888,0x8888,0x888A,0x6222,0x2222,0x2222,0x2222,
0x4444,0x4444,0x4444,0x4446,0x5111,0x1111,0x1111,0x1112,
0x4888,0x8888,0x8888,0x888A,0x6222,0x2222,0x2222,0x2222,
0x4444,0x4444,0x4444,0x4446,0x5111,0x1111,0x1111,0x1112,
0x4888,0x8888,0x8888,0x888A,0x6222,0x2222,0x2222,0x2222,
0x4444,0x4444,0x4444,0x4446,0x5111,0x1111,0x1111,0x1112,
0x4888,0x8888,0x8888,0x888A,0x6222,0x2222,0x2222,0x2222,
0x7FFF,0xFFFF,0xFFFF,0xFFFE,0x0000,0x0000,0x0000,0x0000
} ;
mpr_static(piece3_pr,64,64,1,piece3_image) ;
short icon_image[] = {
/* Format_version=1, Width=64, Height=64, Depth=1, Valid_bits_per_item=16
*/
0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,
0xC000,0x0000,0x0000,0x0003,0xC000,0x0000,0x0000,0x0003,
0xC000,0x0000,0x0000,0x0003,0xC000,0x0000,0x0000,0x0003,
0xC000,0x0000,0x0000,0x0003,0xC000,0x0000,0x0000,0x0003,
0xC000,0xFF00,0x0007,0xC003,0xC003,0xFF80,0x000F,0xE003,
0xC007,0x83C0,0x001F,0xF003,0xC00E,0x00E0,0x003F,0xF803,
0xC018,0x0070,0x003F,0xF803,0xC038,0x0038,0x003F,0xF803,
0xC030,0x0018,0x003F,0xF803,0xC070,0x001C,0x003F,0xF803,
0xC060,0x000C,0x001F,0xF003,0xC000,0x000C,0x001F,0xF003,
0xC000,0x000C,0x001F,0xF003,0xC000,0x000C,0x001F,0xE003,
0xC000,0x000C,0x001F,0xE003,0xC000,0x001C,0x000F,0xE003,
0xC000,0x0018,0x000F,0xE003,0xC000,0x0038,0x000F,0xE003,
0xC000,0x0070,0x000F,0xC003,0xC000,0x00E0,0x000F,0xC003,
0xC000,0x03C0,0x000F,0xC003,0xC000,0x3F80,0x000F,0xC003,
0xC000,0x3E00,0x000F,0xC003,0xC000,0x3000,0x0007,0x8003,
0xC000,0x3000,0x0007,0x8003,0xC000,0x3000,0x0007,0x8003,
0xC000,0x3000,0x0007,0x8003,0xC000,0x3000,0x0007,0x8003,
0xC000,0x3000,0x0007,0x0003,0xC000,0x3000,0x0007,0x0003,
0xC000,0x3000,0x0007,0x0003,0xC000,0x3000,0x0003,0x0003,
0xC000,0x3000,0x0003,0x0003,0xC000,0x3000,0x0002,0x0003,
0xC000,0x3000,0x0002,0x0003,0xC000,0x3000,0x0002,0x0003,
0xC000,0x0000,0x0000,0x0003,0xC000,0x0000,0x0000,0x0003,
0xC000,0x0000,0x0000,0x0003,0xC000,0x3800,0x0007,0x0003,
0xC000,0x7C00,0x001F,0xC003,0xC000,0xFE00,0x001F,0xC003,
0xC000,0xFE00,0x003F,0xE003,0xC000,0xFE00,0x003F,0xE003,
0xC000,0x7C00,0x003F,0xE003,0xC000,0x3800,0x001F,0xC003,
0xC000,0x0000,0x001F,0xC003,0xC000,0x0000,0x0007,0x0003,
0xC000,0x0000,0x0000,0x0003,0xC000,0x0000,0x0000,0x0003,
0xC000,0x0000,0x0000,0x0003,0xC000,0x0000,0x0000,0x0003,
0xC000,0x0000,0x0000,0x0003,0xC000,0x0000,0x0000,0x0003,
0xC000,0x0000,0x0000,0x0003,0xC000,0x0000,0x0000,0x0003,
0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF
} ;
mpr_static(icon_pixrect,64,64,1,icon_image) ;
int ncolumn,column ; /* Column number of key pressed. */
int m,n ; /* mouse and index */
int nrow,row ; /* Row number of key pressed. */
int step=0;
int board[7][6]= {
{-2,-2,-2,-2,-2,-2}, {-2,4,9,9,5,-2}, {-2,4,9,9,5,-2},
{-2,6,8,8,7,-2}, {-2,6,0,1,7,-2},
{-2,-1,2,3,-1,-2}, {-2,-2,-2,-2,-2,-2}
};
int pieces[10][5] = {
{0,2,4,1,1}, {0,3,4,1,1}, {0,2,5,1,1}, {0,3,5,1,1},
{1,1,1,1,2}, {1,4,1,1,2}, {1,1,3,1,2}, {1,4,3,1,2},
{2,2,3,2,1},{3,2,1,2,2}
} ;
char display[MAXLINE] ; /* Current calculator display. */
main(argc,argv)
int argc ;
char *argv[] ;
{
nfont = pf_open(NORMALFONT) ; /* Open normal sized font. */
puzzletool_icon = icon_create(ICON_WIDTH,64,
ICON_IMAGE,&icon_pixrect,
0) ;
frame = window_create((Window) 0, FRAME,
FRAME_ICON, puzzletool_icon,
FRAME_SHOW_LABEL, FALSE,
FRAME_SUBWINDOWS_ADJUSTABLE, FALSE,
FRAME_NO_CONFIRM, FALSE,
WIN_TOP_MARGIN, DISPLAY,
WIN_ROW_HEIGHT, PIECE_H,
WIN_COLUMN_WIDTH, PIECE_W,
WIN_ROWS, PIECE_ROWS,
WIN_COLUMNS, PIECE_COLS,
FRAME_ARGS, argc,argv,
0) ;
panel = window_create(frame, PANEL,
WIN_CONSUME_KBD_EVENTS, WIN_ASCII_EVENTS, 0,
WIN_HEIGHT, DISPLAY,
0) ;
canvas = window_create(frame,CANVAS,
WIN_BELOW,panel,
WIN_WIDTH,TOTAL_WIDTH,
WIN_HEIGHT,TOTAL_HEIGHT,
WIN_FONT,nfont,
WIN_EVENT_PROC,canvas_proc,
0) ;
WINDOW_SET(canvas,WIN_CONSUME_KBD_EVENT,WIN_ASCII_EVENTS,0) ;
display_item = panel_create_item(panel,PANEL_MESSAGE,
PANEL_LABEL_X,10,
PANEL_LABEL_Y,DISPLAY-15,
PANEL_LABEL_FONT,nfont,
PANEL_LABEL_STRING,"",
0) ;
cpw = canvas_pixwin(canvas) ;
main_cursor = window_get(canvas,WIN_CURSOR) ;
make_canvas() ; /* Draw the calculators pieces. */
window_fit(frame) ;
window_main_loop(frame) ;
exit(0) ;
}
/*ARGSUSED*/
static void
canvas_proc(win,event,arg)
Canvas win ;
Event *event ;
caddr_t arg ;
{
if (event_is_button(event) && event_is_down(event))
{
switch (event_id(event))
{
case MS_LEFT : column = event_x(event) / PIECE_W ;
row = event_y(event) / PIECE_H ;
n = board[row+1][column+1] ; m=0;
return;
case MS_MIDDLE : WINDOW_SET(frame,FRAME_CLOSED,TRUE,0);
return;
case MS_RIGHT : WINDOW_DESTROY(frame);
default: return ;
}
}
if (event_is_button(event) && event_is_up(event) && n>=0)
{
switch (event_id(event))
{
case MS_LEFT : ncolumn = event_x(event) / PIECE_W;
nrow = event_y(event) / PIECE_H ;
if(board[nrow+1][ncolumn+1]!=-1)return ;
if(ncolumn>column) m=0;
if(nrow<row)m=1;
if(ncolumn<column) m=2;
if(nrow>row)m=3;
do_move();
case MS_MIDDLE :
case MS_RIGHT :
default: return ;
}
}
return ;
}
display_test(display) /* Output result to calculator display. */
char display[MAXLINE];
{
PANEL_SET(display_item,PANEL_LABEL_STRING,display,0) ;
}
make_canvas()
{
int n,x ;
char pstr[10] ;
pw_writebackground(cpw,0,0,TOTAL_WIDTH,TOTAL_HEIGHT,PIX_CLR) ;
for(n=0;n<4;++n)
pw_write(cpw,(pieces[n][PX]-1)*PIECE_W, (pieces[n][PY]-1)*PIECE_H, pieces[n][PDX]*PIECE_W,pieces[n][PDY]*PIECE_H,PIX_SRC,&piece0_pr,0,0) ;
for(n=4;n<8;++n)
pw_write(cpw,(pieces[n][PX]-1)*PIECE_W, (pieces[n][PY]-1)*PIECE_H, pieces[n][PDX]*PIECE_W,pieces[n][PDY]*PIECE_H,PIX_SRC,&piece1_pr,0,0) ;
n=8;
pw_write(cpw,(pieces[n][PX]-1)*PIECE_W, (pieces[n][PY]-1)*PIECE_H, pieces[n][PDX]*PIECE_W,pieces[n][PDY]*PIECE_H,PIX_SRC,&piece2_pr,0,0) ;
n=9;
pw_write(cpw,(pieces[n][PX]-1)*PIECE_W, (pieces[n][PY]-1)*PIECE_H, pieces[n][PDX]*PIECE_W,pieces[n][PDY]*PIECE_H,PIX_SRC,&piece3_pr,0,0) ;
}
do_move()
{
int ox,oy,nx,ny;
ox=pieces[n][PX];
oy=pieces[n][PY];
switch(n){
case 0:
case 1:
case 2:
case 3: switch(m){
case 0: if(board[ny=oy][nx=ox+1]==-1)break;
return;
case 1: if(board[ny=oy-1][nx=ox]==-1)break;
return;
case 2: if(board[ny=oy][nx=ox-1]==-1)break;
return;
case 3: if(board[ny=oy+1][nx=ox]==-1)break;
return;
}
break;
case 4:
case 5:
case 6:
case 7: switch(m){
case 0: if(board[oy][ox+1]==-1&&board[oy+1][ox+1]==-1){nx=ox+1;ny=oy;break;}
return;
case 1: if(board[oy-1][ox]==-1){nx=ox;ny=oy-1;break;}
return;
case 2: if(board[oy][ox-1]==-1&&board[oy+1][ox-1]==-1){nx=ox-1;ny=oy;break;}
return;
case 3: if(board[oy+2][ox]==-1){nx=ox;ny=oy+1;break;}
return;
}
break;
case 8: switch(m){
case 0: if(board[oy][ox+2]==-1){nx=ox+1;ny=oy;break;}
return;
case 1: if(board[oy-1][ox]==-1&&board[oy-1][ox+1]==-1){nx=ox;ny=oy-1;break;}
return;
case 2: if(board[oy][ox-1]==-1){nx=ox-1;ny=oy;break;}
return;
case 3: if(board[oy+1][ox]==-1&&board[oy+1][ox+1]==-1){nx=ox;ny=oy+1;break;}
return;
}
break;
case 9: switch(m){
case 0: if(board[oy][ox+2]==-1&&board[oy+1][ox+2]==-1){nx=ox+1;ny=oy;break;}
return;
case 1: if(board[oy-1][ox]==-1&&board[oy-1][ox+1]==-1){nx=ox;ny=oy-1;break;}
return;
case 2: if(board[oy][ox-1]==-1&&board[oy+1][ox-1]==-1){nx=ox-1;ny=oy;break;}
return;
case 3: if(board[oy+2][ox]==-1&&board[oy+2][ox+1]==-1){nx=ox;ny=oy+1;break;}
return;
}
break;
}
itos(++step,display);
display_test(display);
pieces[n][PX]=nx;pieces[n][PY]=ny;
switch(n){
case 0:
case 1:
case 2:
case 3: board[oy][ox]= -1;
board[ny][nx]=n;
pw_writebackground(cpw,(ox-1)*PIECE_W,(oy-1)*PIECE_H,pieces[n][PDX]*PIECE_W,pieces[n][PDY]*PIECE_H,PIX_CLR);
pw_write(cpw,(nx-1)*PIECE_W, (ny-1)*PIECE_H, pieces[n][PDX]*PIECE_W,pieces[n][PDY]*PIECE_H,PIX_SRC,&piece0_pr,0,0) ;
break;
case 4:
case 5:
case 6:
case 7: board[oy][ox]=board[oy+1][ox]= -1;
board[ny][nx]=board[ny+1][nx]=n;
pw_writebackground(cpw,(ox-1)*PIECE_W,(oy-1)*PIECE_H,pieces[n][PDX]*PIECE_W,pieces[n][PDY]*PIECE_H,PIX_CLR);
pw_write(cpw,(nx-1)*PIECE_W, (ny-1)*PIECE_H, pieces[n][PDX]*PIECE_W,pieces[n][PDY]*PIECE_H,PIX_SRC,&piece1_pr,0,0) ;
break;
case 8: board[oy][ox]=board[oy][ox+1]= -1;
board[ny][nx]=board[ny][nx+1]=n;
pw_writebackground(cpw,(ox-1)*PIECE_W,(oy-1)*PIECE_H,pieces[n][PDX]*PIECE_W,pieces[n][PDY]*PIECE_H,PIX_CLR);
pw_write(cpw,(nx-1)*PIECE_W, (ny-1)*PIECE_H, pieces[n][PDX]*PIECE_W,pieces[n][PDY]*PIECE_H,PIX_SRC,&piece2_pr,0,0) ;
break;
case 9: board[oy][ox]=board[oy][ox+1]=board[oy+1][ox]=board[oy+1][ox+1]= -1;
board[ny][nx]=board[ny][nx+1]=board[ny+1][nx]=board[ny+1][nx+1]=n;
pw_writebackground(cpw,(ox-1)*PIECE_W,(oy-1)*PIECE_H,pieces[n][PDX]*PIECE_W,pieces[n][PDY]*PIECE_H,PIX_CLR);
pw_write(cpw,(nx-1)*PIECE_W, (ny-1)*PIECE_H, pieces[n][PDX]*PIECE_W,pieces[n][PDY]*PIECE_H,PIX_SRC,&piece3_pr,0,0) ;
break;
}
}
itos(i,c)
int i;
char *c;
{ int j;
char t;
c[0]='\0';
for(j=1;i>0;j++){
c[j]=i%10+'0';
i/=10;
}
for(i=0;i<j/2;++i){
t=c[i];
c[i]=c[j-1-i];
c[j-1-i]=t;
}
}