This program computes a Chess Knight Trip covering the entire board, without landing twice in the same square.
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