Nautilus
Nas profundezas dos mares de um distante país vaga silenciosamente, espreitando e espionando, um submarino nuclear: o NÁUTILUS !
Teste o programa no WebMSX – The Online MSX Emulator
A única forma de acabar com a ameaça que ele representa é destruí-lo, e isso caberá a você, um importante almirante comandando pessoalmente o ataque a bordo de um destroyer.
O Náutilus está confinado pela topografia do relevo submarino a uma região de 10 km de largura, 10 km de comprimento e 10 km de profundidade (um cubo!). Seu destroyer encontra-se num dos vértices desse cubo.
Você dispõe de dez cargas de profundidade e, para lançá-las, basta digitar as coordenadas das posições em que elas devem explodir, em relação à sua posição!
A coordenada X representa a distância ao longo da direção Norte-Sul.
A coordenada Y representa a distância ao longo da direção Leste-Oeste.
A coordenada Z representa a profundidade da explosão!
Cada vez que uma carga explode, devido à turbulência das águas, o Náutilus é forçado a ligar seus motores para estabilizar-se. Seus pequenos movimentos permitem que ele seja detectado por um sonar remoto lançado junto com a carga e que resiste à explosão.
Através dos dados enviados pelo sonar remoto, você pode saber a que distância (D) a carga explodiu do Náutilus. Sendo um almirante sábio, inteligente, astuto, lobo-do-mar mesmo, você não terá dificuldade em acertar o Náutilus depois de uns 6 ou 7 lançamentos.
Se por algum motivo um total de dez lançamentos forem feitos e o Náutilus não tiver sido destruído, você o será!!!
Nesse caso, um outro destroyer será designado para a tarefa!
Se o Náutilus for destruído, outro submarino será enviado para suas águas territoriais e nova batalha terá que ser travada.
Para reiniciar a batalha ou chamar outro destroyer, digite a barra de espaços.
Boa sorte, almirante!!!
Fonte: Livro Coleção de Programas para MSX Volume 1
Editora: Aleph
Ano: 1986
Autores: Renato da Silva Oliveira e Aldo Barduco Jr.
Digitação: Renato Faria Lopes
Código fonte
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 |
10 ' N A U T I L U S 20 INTERVALON:ONINTERVAL=90GOSUB870 30 SCREEN2:OPEN"GRP:"FOR OUTPUTAS#1 40 LINE(0,0)-(255,70),4,BF 50 LINE(0,70)-(255,191),7,BF 60 FOR F=0 TO 15 70 C1=256*RND(1):C2=256*RND(1) 80 L=121*RND(-TIME)+70 90 LINE(C1,L)-(C2,L),3 100 NEXT F 110 FORG=1TO8:S$="":FORF=1TO8:READA$ 120 S$=S$+CHR$(VAL("&H"+A$)):NEXTF 130 SPRITE$(G)=S$:NEXTG 140 PUT SPRITE 0,(40,63),1,1 150 PUT SPRITE 1,(48,63),1,2 160 PUT SPRITE 2,(98,170),4,3 170 PUT SPRITE 3,(106,170),4,4 180 PUT SPRITE 20,(210,25),11,5 190 PUT SPRITE 4,(190,120),8,6 200 PUT SPRITE 5,(150,10),15,7 210 PUT SPRITE 6,(158,10),15,8 220 PUT SPRITE 7,(110,12),15,7 230 PUT SPRITE 8,(118,12),15,8 240 PUT SPRITE 9,(180,20),15,7 250 PUT SPRITE 10,(188,20),15,8 260 PUT SPRITE 11,(200,5),15,7 270 PUT SPRITE 12,(208,5),15,8 280 G=98:FOR F=40 TO 210 290 PUT SPRITE 0,(F,63),1,1 300 PUT SPRITE 1,(F+8,63),1,2 310 IFF/2=F\2THEN G=G+1:PUTSPRITE 2,(G,170),4,3:PUTSPRITE 3,(G+8,170),4,4 320 NEXT F 330 G1=150:G2=110:G3=180:G4=200 340 FOR F=100 TO -100 STEP -1 350 G1=G1-1:PUT SPRITE 5,(G1,10),15,7:PUT SPRITE 6,(G1+7,10),15,8 360 G2=G2-1:PUT SPRITE 7,(G2,12),15,7:PUT SPRITE 8,(G2+7,12),15,8 370 G3=G3-1:PUT SPRITE 9,(G3,20),15,7:PUT SPRITE 10,(G3+7,20),15,8 380 G4=G4-1:PUT SPRITE 11,(G4,5),15,7:PUT SPRITE 12,(G4+7,5),15,8 390 NEXT 400 COLOR1,5,5:SOUND8,10:SOUND9,9 410 LINE(0,42)-(154,191),5,BF 420 LINE(6,65)-(148,190),1,B 430 PRESET(30,52):PRINT#1,"NAUTILUS" 440 X0=INT(RND(-TIME)*10) 450 Y0=INT(RND(-TIME)*10) 460 Z0=INT(RND(-TIME)*10) 470 FOR T=1 TO 10:KK=70+T*10 480 PRESET(10,70):PRINT#1,"TIRO X Y Z D":PRESET(14,KK):PRINT#1,T 490 X$=INKEY$:IFX$<"0"ORX$>"9"THEN490 500 X1=VAL(X$):PRESET(42,KK) 510 PRINT#1,X1 520 Y$=INKEY$:IFY$<"0"ORY$>"9"THEN520 530 Y1=VAL(Y$):PRESET(58,KK) 540 PRINT#1,Y1 550 Z$=INKEY$:IFZ$<"0"ORZ$>"9"THEN550 560 Z1=VAL(Z$):PRESET(74,KK) 570 PRINT#1,Z1 580 DX=X1-X0:DY=Y1-Y0:DZ=Z1-Z0 590 RESTORE860:INTERVALOFF:FORF=6TO13:READX:SOUNDF,X:NEXTF 600 D=INT(.5+100*SQR(DX*DX+DY*DY+DZ*DZ))/100 610 PRESET(96,KK):PRINT#1,D 620 IF D=0 THEN 690 630 FORF=1TO30:NEXTF:INTERVALON:NEXTT 640 PRESET(20,2):PRINT#1,"Submarino se aproximando!":LINE(20,30)-(130,40),4,BF 650 PRESET(10,30):PRINT#1,"Torpedo em nossa direcao!" 660 INTERVALOFF:FORF=1TO20:PLAY"O5L36F","O5L36F":NEXTF: 670 FORG=0TO60:NEXTG:RESTORE850:FORF=6TO13:READX:SOUNDF,X:NEXTF:FORF=1TO15:COLORF,F,F:PUTSPRITE0,(212,63),F,1:PUTSPRITE1,(220,63),F,2:NEXTF:COLOR1,5,5 680 IF STRIG(0)=0 THEN 670 ELSE CLOSE#1:RESTORE 770:GOTO 10 690 IF 10-T>R THEN R=10-T 700 LINE(20,30)-(130,40),4,BF 710 PRESET(30,30):PRINT#1,"RECORDE:";R 720 LINE(26,44)-(120,62),1,BF:COLOR15,1 730 PRESET(40,54):PRINT#1,"PONTOS:";10-T 740 FORG=0TO60:NEXTG:RESTORE850:FORF=6TO13:READX:SOUNDF,X:NEXTF:FORF=1TO15:COLORF,F,F:PUTSPRITE2,(182,170),F,3:PUTSPRITE3,(190,170),F,4:NEXTF:COLOR1,5,5 750 PUTSPRITE2,(182,70),4,3:PUTSPRITE3,(190,170),4,4 760 IFSTRIG(0)=0THEN740:ELSESOUND10,0:INTERVALON:GOTO400 770 DATA 00,00,00,03,0F,83,FF,3F 780 DATA 00,00,00,00,F0,FF,FE,FC 790 DATA 00,00,01,BF,7F,BF,00,00 800 DATA C0,80,E0,FE,FF,FC,00,00 810 DATA 3C,7E,FF,FF,FF,FF,7E,3C 820 DATA 18,3C,3C,18,36,59,A9,A5 830 DATA 1C,2B,DF,3F,FF,7D,1A,06 840 DATA 40,F8,34,FE,6F,FB,BC,78 850 DATA 20,220,0,0,15,100,60,0 860 DATA 20,220,15,15,15,100,60,0 870 PLAY"v10l12o5ao6l3g","v9l13o5ao6l3g":RETURN |