|
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; } }