== Salto del Caballo (Chess Knight Trip)== Este programa crea una tabla de todos los recorridos del salto del caballo de ajedrez que cubran el tablero entero sin aterrizar dos veces en la misma casilla. Lo usé para crear un juego en javascript. 10 rem Salto del Caballo 20 dim tablero(8,8) 30 type xy 40 x as integer 50 y as integer 60 end type 70 dim caballo(8) as xy 80 dim pilamov(8*8) 85 dim pilapos(8*8) as xy 90 dim mejormv(8*8) 95 ppilamov = 0 : pmejormv = 0 : mvmejor = 0 100 rem movimientos del caballo 105 gosub 9000 110 m1 = 1 : m2 = 1 120 for f = 0 to 1 130 for g = 0 to 1 140 caballo(f*4+g*2).x = 2*m1 : caballo(f*4+g*2).y = m2 150 caballo(f*4+g*2+1).x = m2 : caballo(f*4+g*2+1).y = 2*m1 160 gotoxy 4+caballo(f*4+g*2).x*2,4+caballo(f*4+g*2).y 170 print format$(f*4+g*2,"##"); 180 gotoxy 4+caballo(f*4+g*2+1).x*2,4+caballo(f*4+g*2+1).y 190 print format$(f*4+g*2+1,"##"); 200 m2 = -m2 : next g 210 m1 = -m1 : next f 220 gotoxy 4,4 : print "@@"; 230 gotoxy 0,20 500 pilapos(0).x = 0 : pilapos(0).y = 0 999 end 1000 rem Ejecutar movimiento 1010 salida: resultm(0 = bien;-1 : fuera;resto = ocupado) 1020 rem usa: ppilamov para obtener x e y 1030 rem usa: pilamov para obtener mov actual 1040 rem usa: pilapos (xy) para obtener x e y 1045 rem para obtener el movimiento usa un valor recién introducido en pila 1050 xmov = caballo(ppilamov).x 1060 ymov = caballo(ppilamov).y 1065 rem el x del movimiento anterior se mete con el puntero del movimiento siguiente 1070 xmov = xmov+pilapos(ppilamov).x 1080 ymov = ymov+pilapos(ppilamov).y 1090 if xmov > 7 or xmov < 0 then result = -1 : return 1100 if ymov > 7 or ymov < 0 then result = -1 : return 1110 if tablero(xmov,ymov) <> 0 then result = tablero(xmov,ymov) : return 1120 tablero(xmov,ymov) = ppilamov 1130 ppilamov = ppilamov+1 1140 pilapos(ppilamov).x = xmov 1150 pilapos(ppilamov).y = ymov 1160 return 8000 rem Dibujar en Tablero 8010 gotoxy xdib*2,ydib 8020 print format$(ndib,"##"); 8030 return 8500 rem Borrar Tablero 8510 gotoxy xdib*2,ydib 8520 if ((xdib+ydib) mod 2) then print "xx"; : else print " "; 8530 return 9000 rem Tablero cutre 9005 stp = 1 9010 for g = 0 to 7 9020 for f = 0 to 7 9030 gotoxy f*2,g 9040 if ((f+g) mod 2) then print "xx"; : else print " "; 9050 stp = -stp 9060 next f : stp = -stp 9070 next g 9080 return