#!/usr/local/bin/yabasic rem programmed by Hermang Mansilla,1998 released under GNU Public License rem version 0.5, graphic version in development :-) difficulty=775 dim board(7,7) input "Size of the Board [3,4,5]" size blank =size*size gosub InitBoard : rem this put the board in order print "Press q to quit, arrows to move a letter to the empty space" print "The goal of the game is to arrange the board this way :" gosub PrintBoard input "Press Enter key to continue" dummy$ print "Wait, mixing the puzzle ..." gosub MixBoard Label Playit clear screen gosub PrintBoard gosub KeyEvent if board(blankrow+dy ,blankcol+dx)<> -1 then gosub Slide fi goto Playit end label InitBoard for row=1 to 7 for col=1 to 7 board(row,col)=-1 next col next row for i= 1 to blank row=int((i-1)/size)+2 col=mod(i-1,size)+2 board(row,col)=i if i=blank then blankrow=row blankcol=col fi next i return Label PrintBoard print "\n" for row=1 to size+2 for col=1 to size+2 if board(row,col)=-1 then print " * "; else if row=blankrow and col=blankcol then print " "; else print " ",chr$(64+board(row,col))," "; rem print str$(board(row,col),"%2.0f")," "; fi fi next col print "\n" next row print "\n" return Label KeyEvent label eventloop dx=0:dy=0 k$=inkey$ if k$="q" then end fi opt=instr("udlr",mid$(k$,1,1)) if k$="up" then dy=1 fi if k$="down" then dy=-1 fi if k$="left" then dx=1 fi if k$="right" then dx=-1 fi if opt<1 then goto eventloop fi return Label Slide tmp = board(blankrow+dy ,blankcol+dx) board(blankrow+dy ,blankcol+dx)=blank board(blankrow ,blankcol)=tmp blankrow=blankrow+dy blankcol=blankcol+dx return Label MixBoard for k=1 to difficulty*size dx=0:dy=0 opt=ran(2) if opt>0.4 then if ran(2)>0.5 then dx=-1 else dx=1 fi else if ran(2)>0.5 then dy=-1 else dy=1 fi fi rem for diagnostics :-) print dx,dy; if board(blankrow+dy ,blankcol+dx)<> -1 then gosub Slide fi next k return