Apagada docs

Aprendiendo a programar el pasado

Herramientas de usuario

Herramientas del sitio


es:basic:sinclair:cavernas_de_hitkna

Cavernas de hitkna

Recuperé este juego de un listado escrito probablemente en el verano de 1986, a 300 kilómetros del Spectrum de mi familia (o de lo que quedase de él). Sin embargo, casi todos los errores sintácticos que he tenido que corregir posteriormente estaban en lo que he añadido a la hora de convertirlo en un archivo .TAP de emulador: las rutinas de las líneas 1000 y siguientes, donde me ha costado hacerme al BASIC del Spectrum – irónicamente, lo contrario de lo que me pasó al comenzar a programar en GWBasic para PC.

Todos los REM son adiciones de la versión moderna, y en ocasiones muestran cambios realizados a la versión original.


0 REM CAVERNAS DE HITKNA -- CREADO EN 2014 DESDE LISTADO A MANO DE HACIA 1986
1 PRINT INVERSE 1;AT 21,0; "ESPERE UN MOMENTO, POR FAVOR": GO SUB 1000:REM INICIACION
10 PRINT "HUNT THE WUMPUS!!"
20 PRINT AT 0,0; "Encuentra los diversos wumpii que se mueven por las cavernas de Hitkna"'"Los Wumpii son:"
30 PRINT "Wumpus No", "Nombre":FOR A=1 TO 5: PRINT A,A$(a):NEXT A:PRINT "PULSA UNA TECLA "; "EN MAYUSCULAS"
40 IF INKEY$<"]" THEN GO TO 60
50 LET A=A+1:IF A=65536 THEN GO TO 30
60 RANDOMIZE A: LET B=INT(RND*8)+1
70 REM ERA PRINT AT 0,0;
80 GO SUB 2000:CLS
81 REM ERA GO SUB 2000
90 FOR U=1 TO 5
100 LET X(U)=INT (RND*3)-1
110 LET Y(U)=INT (RND*3)-1
120 LET E=X(U)+C(U)
130 LET F=Y(U)+D(U):LET P=T(U)
140 IF F<10 AND F>0 THEN IF E>0 THEN GO TO 160
150 GO TO 100
160 IF B$(E,F,P)>"2" THEN LET C(U)=E:LET D(U)=F
170 IF B$(E,F,P)>"2" THEN IF INT (RND+0.5)=1 THEN LET T(U)=T(U)+1
180 IF B$(E,F,P)="4" AND P>1 THEN LET T(U)=T(U)-1
190 IF B$(E,F,P)="8" THEN IF INT(RND+0.5)=1 THEN LET T(U)=T(U)-1
200 IF B$(E,F,P)="B" THEN LET R(U)=R(U)+10:LET B$(E,F,P)="5"
210 NEXT U:GO TO 220
211 REM ERA RETURN
220 REM LET A=0
230 IF B$(N,O,H)="9" THEN PRINT "AQUI HAY UN TRASGO"
240 FOR U=1 TO 5: LET E=C(U):LET F=D(U):LET P=T(U)
250 IF N=E AND O=F THEN GO SUB 400
260 IF N=E AND H=P THEN GO SUB 440
270 IF O=F AND H=P THEN GO SUB 480
280 IF N<10 THEN IF B$(N+1,O,H)="9" THEN PRINT "TRASGO AL N"
290 IF N>1 THEN IF B$(N-1,O,H)="9" THEN PRINT "TRASGO AL S"
300 IF O<10 THEN IF B$(N,O+1,H)="9" THEN PRINT "TRASGO AL E"
310 IF O>1 THEN IF B$(N,O-1,H)="9" THEN PRINT "TRASGO AL W"
320 IF B$(N,O,H)="A" OR B$(N,O,H)="B" THEN PRINT "AQUI HAY UNA POCIMA":GO SUB 600: REM 520?
330 IF N<10 THEN PRINT "NORTE: ";("AGUJERO" AND B$(N+1,O,H)="4")+("PARED" AND B$(N+1,O,H)="1")+("ABIERTO" AND B$(N+1,O,H)>"1")
340 IF N>1 THEN PRINT "SUR: ";("AGUJERO" AND B$(N-1,O,H)="4")+("PARED" AND B$(N-1,O,H)="1")+("ABIERTO" AND B$(N-1,O,H)>"1")
350 IF O<10 THEN PRINT "ESTE: ";("AGUJERO" AND B$(N,O+1,H)="4")+("PARED" AND B$(N,O+1,H)="1")+("ABIERTO" AND B$(N,O+1,H)>"1")
360 IF O>1 THEN PRINT "OESTE: ";("AGUJERO" AND B$(N,O-1,H)="4")+("PARED" AND B$(N,O-1,H)="1")+("ABIERTO" AND B$(N,O-1,H)>"1")
370 IF B$(N,O,H)="C" THEN PRINT "CARCAJ":GO SUB 590
380 IF B$(N,O,H)="D" THEN PRINT "AQUI HAY UNA ESPADA":GO SUB 650
390 IF B$(N,O,H)="4" THEN PRINT "HAS CAIDO POR UN AGUJERO...":LET H=H(-1 AND H>0):PRINT ("NO TIENE FONDO, MORIRAS..." AND H>0)+("PIERDES UN PUNTO DE CARISMA" AND H=H): LET RR=RR-1: PRINT "CARISMA ";RR: GO TO (390 AND H>0) + (3000 AND RR<=0)
395 GO TO 70
396 REM ERA NEXT U  + RETURN
400 IF H=P THEN PRINT "AQUI HAY UN ";A$(U)
410 IF H+1=P THEN PRINT "SUENAN PISADAS DE "; A$(U); "EN EL TECHO"
420 IF H-1=P THEN PRINT "SUENAN PISADAS DE "; A$(U); "EN EL SUELO"
430 RETURN
440 IF O=F THEN PRINT "AQUI HAY UN ";A$(U)
450 IF O+1=F THEN PRINT "AL OESTE HAY UN ";A$(U)
460 IF O-1=F THEN PRINT "AL ESTE HAY UN ";A$(U)
470 RETURN
480 IF N=E THEN PRINT "AQUI HAY UN ";A$(U)
490 IF N+1=E THEN PRINT "HAY UN ";A$(U);"AL NORTE"
500 IF N-1=E THEN PRINT "HAY UN ";A$(U);"AL SUR"
510 RETURN
520 PRINT "LA TOMAS?";: INPUT C$
530 IF C$="N" THEN RETURN
540 LET X$=A$(N,O,H)
543 IF X$="A" THEN LET RES=-10:LET RR=RR-10
547 IF X$="B" THEN LET RES=10:LET RR=RR+10
550 PRINT "LA POCIMA TIENE UN EFECTO ";RES;" EN TU CARISMA": PRINT "TU CARISMA ES DE ";RR
560 IF RR<1 THEN PRINT "ESTAS MUERTO": IF INT(RND*3)+1=3 THEN PRINT "BUENO, TIENES OTRA OPORTUNIDAD": LET RR=RR+10:RETURN
570 IF RR<1 THEN GO TO 3000
580 RETURN
590 PRINT "TIENE ";A(H);" FLECHAS"
600 PRINT "A TI TE FALTAN ";25-AA;" FLECHAS"
610 PRINT "CUANTAS COGES?":INPUT C$
620 IF VAL(C$)>(25-AA) OR VAL(C$)>A(H) THEN PRINT "NO PUEDES COGER TANTAS":GO TO 590
640 LET AA=AA+VAL(C$):RETURN
641 REM ERA LET AA=AA+A(H)
650 PRINT "AQUI HAY UNA ESPADA":INPUT "LA COGES?";C$
660 IF C$="S" THEN LET EB=BB:LET BB=B(H):LET B(H)=EB
670 RETURN
680 REM ***LUCHAR***
690 REM ***LUCHAR*CON*EL*TRASGO***
700 IF BB<>0 THEN INPUT "USAS LA ESPADA?";C$: IF C$="S" THEN PRINT "TU ESPADA";BB:LET RT=RT-INT(RND*(5+BB))
710 PRINT RT;"<RESISTENCIA TRASGO"
720 IF RT<0 THEN LET B$(N,O,H)="5":RETURN
730 IF AA>0 THEN PRINT "DISPARAS FLECHAS?";C$:IF C$="S" THEN LET AA=AA-1:IF INT (RND+0.5)>1 THEN PRINT "ACIERTAS": LET RT=RT-INT(RND*4+1):PRINT RT;"<RESISTENCIA TRASGO"
740 LET RR=RR +(-1 AND RT>0)
750 PRINT "TU CARISMA ";RR:GO TO 700
760 REM LUCHA CONTRA WUMPUS
770 IF BB<>0 THEN INPUT "USAS LA ESPADA?";C$:IF C$="S" THEN PRINT "TU ESPADA";BB:LET R(U)=R(U)-INT(RND*5+BB)
780 PRINT R(U);"<RESISTENCIA";A$(U)
790 IF R(U)<0 THEN PRINT A$;" CONQUISTADO": RETURN
800 IF AA>0 THEN INPUT "DISPARAS FLECHAS?";C$:IF C$="S" THEN LET AA=AA-1:IF INT(RND+0.5)=1 THEN PRINT "ACIERTAS":LET R(U)=R(U)-INT(RND*4+1):PRINT "RESISTENCIA ";A$(U)
801 REM ERA ... LET AA=AA-1 ... IF ...
810 LET RR=RR + (-1 AND RT>0)
820 PRINT "TU CARISMA":GO TO 770
830 REM DATAS DE LOS WUMPII
840 DATA "UNICORNIO","AVE FENIX","GRIFO", "PEGASO","DRAGON DORADO":REM NOMBRE
850 DATA 10,20,25,15,30
860 REM DATAS DEL MAPEADO
870 DATA "1111111111","1555115551","1651551551", "1551451551","1515555151","1551551551","1555555551","1515555151","1551551551","1111111111"
880 DATA "1111111111","12456789B1","1555555551","1511111151","1515555151","1515115151","1555115551","1813115151","1515115151","1111111111"
890 DATA "1111111111","1A1B583151","1511511151","1551555551","1551551151","1551554151","1591191151","1358151591","1555555551","1111111111"
1000 REM ESTO FALTABA EN EL ORIGINAL
1010 DIM X(5):DIM Y(5):REM MOVIMIENTO WUMPUS
1020 DIM C(5):DIM D(5):DIM T(5):REM COORDENADAS WUMPUS
1030 DIM B$(10,10,10):REM MAPA
1040 DIM R(5): REM RESISTENCIA WUMPUS
1050 DIM A$(5,20):REM NOMBRE WUMPUS
1060 DIM A(10):REM CARCAJ
1070 DIM B(10):REM ESPADAS
1080 RESTORE 840: FOR F=1 TO 5:READ A$(F):NEXT F
1090 RESTORE 850:FOR F=1 TO 5:READ R(F):NEXT F
1100 RESTORE 870:LET UU=1:REM WUMPUS ACTUAL
1105 LET H=1+INT(RND*3):LET N=1+INT(RND*9):LET O=1+INT(RND*9):REM COORDENADAS JUGADOR
1110 FOR I=1 TO 3:REM PISOS
1120 FOR J=1 TO 10:REM NORTE-SUR
1150 READ M$:REM MAPA
1160 FOR K=1 TO 10:REM ESTE-OESTE
1170 LET B$(J,K,I)=M$(K)
1180 IF B$(J,K,I)="9" THEN LET C(UU)=J:LET D(UU)=K:LET T(UU)=I:LET UU=UU+1:LET R(UU)=INT(RND*5+2):REM WUMPUS
1190 NEXT K:NEXT J:NEXT I
1194 REM (MONSTRUOS INSUFICIENTES EN MAPA?) 
1195 FOR F=UU TO 5:LET C(F)=C(1+F-UU):LET D(F)=D(1+F-UU):LET T(F)=T(F-UU+1): NEXT F
1200 LET RR=INT(5+RND*5):REM CARISMA INICIAL
1210 RETURN
2000 REM ESTO FALTABA EN EL ORIGINAL
2010 INPUT "MOVIMIENTO? (N-S-E-W)";C$
2020 IF C$="S" AND N>1 THEN IF B$(N-1,O,H)>"1" THEN LET N=N-1
2030 IF C$="N" AND N<10 THEN IF B$(N+1,O,H)>"1" THEN LET N=N+1
2040 IF C$="W" AND N>1 THEN IF B$(N,O-1,H)>"1" THEN LET O=O-1
2050 IF C$="E" AND N<10 THEN IF B$(N,O+1,H)>"1" THEN LET O=O+1
2060 RETURN

Volver a Sinclair Basic

Original file listing

Este sitio web utiliza cookies. Al utilizar el sitio web, usted acepta almacenar cookies en su computadora. También reconoce que ha leído y entendido nuestra Política de privacidad. Si no está de acuerdo abandone el sitio web.Más información
es/basic/sinclair/cavernas_de_hitkna.txt · Última modificación: 2014/03/01 14:30 por nepenthes