es:office_battleships
¡Esta es una revisión vieja del documento!
Tabla de Contenidos
OFFICE BATTLESHIPS
Ficha
Autor | John Filsak |
---|---|
Computadora | Amstrad PCW 8256 / 8512 / 9512 |
Año | 1988 |
Género | Tablero |
Controles | Teclado |
Lenguajes | Inglés |
Estado | Preservado |
Capturas
Descripción
Listado
- Listado - OFFICEBA.BAS
10 REM Office Battleships 20 REM by John Filsak 30 REM (c) Computing with the Amstrad 40 REM ------------ PCW ------------- 50 RANDOMIZE PEEK(64504!):e$=CHR$(27):cls$=e$+"E"+e$+"H":ron$=e$+"p":rof$=e$+"q" 60 uon$=e$+"r":DEFINT a-z:uof$=e$+"u" 70 cof$=e$+"f":con$=e$+"e" 80 DEF FNat$(x,y)=e$+"Y"+CHR$(x+32)+CHR$(y+32) 90 DIM h(6),h1(6),a$(6),p0$(9,9),p1$(9,9),p2$(9,9),p3$(9,9),na$(6) 100 GOSUB 1740:PRINT cof$:k=1:WHILE k=1 110 PRINT cls$;ron$;" OFFICE-BATTLESHIPS "rof$;" Please wait while I arrange my furniture." 120 GOSUB 1790:GOSUB 180:GOSUB 630 130 GOSUB 350:GOSUB 840:GOSUB 1860 140 PRINT FNat$(30,0);"Play again? Y/N" 150 ans$="YN":GOSUB 1840 160 WEND:PRINT cls$;con$:END 170 REM Opponent's furniture 180 FOR a=6 TO 0 STEP-1:z=(RND*2)+1 190 ON z GOSUB 210,280:NEXT:RETURN 200 REM Vertical 210 x=(RND*10)-a:IF x<0 THEN 210 220 y=(RND*9):b=0 230 IF x+b>9 THEN 210 240 IF p0$(x+b,y)="L" OR p0$(x+b,y)="P" OR p0$(x+b,y)="D" OR p0$(x+b,y)="T" OR p0$(x+b,y)="F" OR p0$(x+b,y)="C" THEN 210 250 b=b+1:IF b<=a THEN 230 260 FOR c=0 TO a:p0$(x+c,y)=a$(a):NEXT:RETURN 270 REM Horizontal 280 y=(RND*10)-a:IF y<0 THEN 280 290 x=(RND*9):b=0 300 IF y+b>9 THEN 280 310 IF p0$(x,y+b)="L" OR p0$(x,y+b)="P" OR p0$(x,y+b)="D" OR p0$(x,y+b)="T" OR p0$(x,y+b)="F" OR p0$(x,y+b)="C" THEN 280 320 b=b+1:IF b<=a THEN 300 330 FOR c=0 TO a:p0$(x,y+c)=a$(a):NEXT:RETURN 340 REM Players furniture 350 PRINT FNat$(17,0);"My furniture is in position." 360 PRINT:PRINT"Now you position yours." 370 PRINT:PRINT"Press a key to continue.":WHILE INKEY$="":WEND 380 FOR a=6 TO 0 STEP-1:GOSUB 1820 390 PRINT FNat$(17,0);"Where would you like to position your ";na$(a);" ("; 400 FOR z=0 TO a:PRINT a$(a);:NEXT:PRINT")?":PRINT "X co-ordinate (0 to 9) ?"; 410 GOSUB 1830:x=k-1:PRINT x 420 PRINT"Y co-ordinate (0 to 9) ?"; 430 GOSUB 1830:y=k-1:PRINT y 440 IF a>0 THEN PRINT"Horizontal or Vertical ?";:ans$="HV":GOSUB 1840:PRINT MID$(ans$,k,1) 450 IF k=1 THEN 520 460 REM Vertical 470 b=0:IF x+a>9 THEN GOSUB 600:GOTO 390 480 IF p1$(x+b,y)="L" OR p1$(x+b,y)="S" OR p1$(x+b,y)="D" OR p1$(x+b,y)="T" OR p1$(x+b,y)="F" OR p1$(x+b,y)="C" THEN GOSUB 600:GOTO 390 490 b=b+1:IF b<=a THEN 480 500 FOR c=0 TO a:p1$(x+c,y)=a$(a):NEXT:GOTO 560 510 REM Horizontal 520 b=0:IF y+a>9 THEN GOSUB 600:GOTO 390 530 IF p1$(x,y+b)="L" OR p1$(x,y+b)="S" OR p1$(x,y+b)="D" OR p1$(x,y+b)="T" OR p1$(x,y+b)="F" OR p1$(x,y+b)="C" THEN GOSUB 600:GOTO 390 540 b=b+1:IF b<=a THEN 530 550 FOR c=0 TO a:p1$(x,y+c)=a$(a):NEXT 560 FOR p=0 TO 9:FOR q=0 TO 9 570 IF p1$(p,q)<>"" THEN PRINT FNat$(13-p,4+q*2);p1$(p,q) 580 NEXT:NEXT:NEXT:GOSUB 1820 590 d$="Your":x=2:y=27:GOSUB 810:RETURN 600 GOSUB 1820:PRINT FNat$(17,0);CHR$(7);"It won't fit there." 610 GOSUB 1860:RETURN 620 REM Draw grids 630 PRINT FNat$(0,0);ron$;SPC(89);rof$ 640 title$="* * * O F F I C E - B A T T L E S H I P S * * *" 650 PRINT FNat$(0,(89-LEN(title$))/2);ron$;title$;rof$ 660 PRINT FNat$(2,7);ron$;" YOUR OFFICE "rof$; 670 PRINT FNat$(8,0);"X";FNat$(15,13);"Y" 680 FOR a=0 TO 9:PRINT FNat$(13-a,1);a 690 PRINT FNat$(13-a,46);a 700 PRINT FNat$(14,3+a*2);a 710 PRINT FNat$(14,48+a*2);a 720 FOR b=0 TO 9 730 PRINT FNat$(13-a,4+b*2);":" 740 PRINT FNat$(13-a,49+b*2);":":NEXT:NEXT 750 PRINT FNat$(2,53);ron$;" MY OFFICE ";rof$ 760 PRINT FNat$(8,45);"X";FNat$(15,58);"Y" 770 d$="My":x=2:y=72:GOSUB 810:RETURN 780 FOR a=0 TO 9:FOR b=0 TO 9 790 IF p0$(a,b)="" THEN PRINT FNat$(13-a,49+b*2);":" ELSE PRINT FNat$(13-a,49+b*2);p0$(a,b) 800 NEXT:NEXT:RETURN 810 PRINT FNat$(x,y);uon$;d$;" objects";uof$;FN at$(x+1,y);uon$;"not destroyed:";uof$ 820 FOR g=0 TO 6:n$=na$(g):n$=UPPER$(LEFT$(n$,1))+RIGHT$(n$,LEN(n$)-1) 830 PRINT FNat$(x+g+4,y);n$:NEXT:RETURN 840 REM Your go or opponent's go? 850 PRINT FNat$(16,0); 860 PRINT"Press a key":WHILE INKEY$="":WEND 870 go=0:empty=0:empty1=0:WHILE empty=0 AND empty1=0 880 go=go+1:IF go/2<>INT(go/2) THEN GOSUB 1190 ELSE GOSUB 950 890 WEND 900 IF empty=1 THEN PRINT FNat$(17,0);CHR$(7);"You have destroyed all my furniture. I surrender" 910 IF empty1=1 THEN PRINT FNat$(17,0);CHR$(7);"I have destroyed all your furniture. You have lost.":GOSUB 1860 920 PRINT:PRINT"Would you like to see where all furniture was ? (Y/N)":ans$="YN":GOSUB 1840:IF k=1 THEN GOSUB 780 930 RETURN 940 REM Your go 950 PRINT:PRINT"Type the co-ordinates of the spot you want to blast." 960 PRINT"X co-ordinate (0-9) ?";:GOSUB 1830:x=k-1:PRINT x 970 PRINT"Y co-ordinate (0-9) ?";:GOSUB 1830:y=k-1:PRINT y 980 GOSUB 1820:empty$="":hit$="" 990 IF p2$(x,y)<>"" THEN PRINT FNat$(17,0);CHR$(7);"You have already tried that postion. Pick another.":GOTO 950 1000 p2$(x,y)=p0$(x,y) 1010 IF p2$(x,y)="" THEN p2$(x,y)="*":PRINT FNat$(17,0);"Missed!" 1020 FOR z=6 TO 0 STEP-1 1030 IF p2$(x,y)=a$(z) THEN hit$=na$(z):h(z)=h(z)-1 1040 NEXT 1050 IF hit$<>"" THEN PRINT FNat$(17,0);"You hit my ";hit$;".":GOSUB 1850 1060 FOR z=6 TO 0 STEP-1 1070 IF hit$=na$(z) AND h(z)=0 THEN PRINT CHR$(7):PRINT"You have destroyed my ";hit$".":empty$=UPPER$(LEFT$(hit$,1)):GOSUB 1850 1080 NEXT 1090 FOR i=0 TO 9:FOR j=0 TO 9 1100 IF empty$<>"" THEN IF p0$(i,j)=empty$ THEN p2$(i,j)="$" 1110 NEXT:NEXT 1120 IF empty$<>"" THEN PRINT FNat$(6+INSTR(initial$,empty$)-1,72);SPACE$(16) 1130 FOR i=0 TO 9:FOR j=0 TO 9 1140 IF p2$(i,j)<>"" THEN PRINT FNat$(13-i,49+j*2);p2$(i,j) 1150 NEXT:NEXT 1160 IF h(6)=0 AND h(5)=0 AND h(4)=0 AND h(3)=0 AND h(2)=0 AND h(1)=0 AND h(0)=0 THEN GOSUB 1820:empty=1:RETURN 1170 GOSUB 1820:PRINT FNat$(17,0);"Now is my turn.":RETURN 1180 REM Opponent's go 1190 check=0:GOSUB 1580 1200 IF check=1 THEN GOSUB 1620:GOTO 1220 1210 xx=INT(RND*10):yy=INT(RND*10):IF p3$(xx,yy)<>"" THEN 1210 1220 PRINT:PRINT"I am aiming a shot at your grid position X";xx;", Y;yy 1230 PRINT:PRINT"Is it a hit or a miss? (H/M)" 1240 k=0:k$="":WHILE k=0 OR k$="" 1250 IF p1$(xx,yy)="" THEN PRINT FNat$(13-xx,4+yy*2);":":GOSUB 1850 ELSE PRINT FNat$(13-xx,4+yy*2);p1$(xx,yy):GOSUB 1850 1260 IF p1$(xx,yy)="" THEN PRINT FNat$(13-xx,4+yy*2);ron$;":";rof$:GOSUB 1850 ELSE PRINT FNat$(13-xx,4+yy*2);ron$;p1$(xx,yy);rof$:GOSUB 1850 1270 k$=UPPER$(INKEY$):k=INSTR("HM",k$):WEND:GOSUB 1820 1280 IF k=2 THEN c$="":PRINT"Please confirm: I have missed. (Y/N)":ans$="YN":GOSUB 1840:IF k=2 THEN GOSUB 1820:GOTO 1230 ELSE 1350 1290 IF k=1 THEN GOSUB 1380 1300 IF k=11 AND k1=7 THEN c$="":GOTO 1350 1310 IF k=11 THEN h1(k1)=h1(k1)-1 1320 IF k=12 THEN PRINT:PRINT"Have I hit or missed? (H/M)":GOTO 1240 1330 IF c$="hit" THEN p3$(xx,yy)="#" :GOSUB 1480 1340 IF h1(k1)=0 THEN GOSUB 1510 1350 IF c$="" THEN p3$(xx,yy)="*":GOSUB 1480 1360 GOSUB 1820:IF empty1=0 THEN PRINT FNat$(17,0);"Now its your turn." 1370 RETURN 1380 c$="hit":PRINT"What have I hit?" 1390 FOR g=0 TO 7:IF g=7 THEN n$="nothing" ELSE n$=na$(g) 1400 n$=UPPER$(LEFT$(n$,1))+RIGHT$(n$,LEN(n$)-1) 1410 PRINT TAB(4)g+1;") ";n$:NEXT 1420 PRINT "Type the number corresponding to the vessel I have hit. "; 1430 ans$="12345678":GOSUB 1840:k1=k-1:GOSUB 1820 1440 IF k=8 THEN PRINT FNat$(17,0);"Please confirm: I have missed. (Y/N)" 1450 IF k<8 THEN IF h1(k1)=0 THEN PRINT CHRS(7)"Don't be daft. Your ";na$(k1);" is at the bottom of the sea!":GOSUB 1860:GOSUB 1820:GOTO 1380 1460 IF k<8 THEN PRINT FNat$(17,0);"Please confirm: I have hit your ";na$(k1)". (Y/N)" 1470 ans$="YN":GOSUB 1840:k=k+10:RETURN 1480 FOR p=0 TO 9:FOR q=0 TO 9 1490 IF p3$(p,q)<>"" THEN PRINT FNat$(13-p,4+q*2);p3$(p,q) 1500 NEXT:NEXT:RETURN 1510 PRINT FNat$(20,0);CHR$(7);"I have destroyed your ";na$(k1) 1520 down=0:FOR i=0 TO 9:FOR j=0 TO 9 1530 IF p1$(i,j)=a$(k1) THEN p3$(i,j)="$" 1540 NEXT:NEXT 1550 PRINT FNat$(6+k1,27);SPACE$(16):GOSUB 1480 1560 IF h1(0)=0 AND h1(1)=0 AND h1(2)=0 AND h1(3)=0 AND h1(4)=0 AND h1(5)=0 AND h1(6)=0 THEN GOSUB 1820:empty1=1 1570 RETURN 1580 FOR i=0 TO 9:FOR j=0 TO 9 1590 IF p3$(i,j)="#" THEN check=1:RETURN 1600 NEXT:NEXT:RETURN 1610 REM Calculate move after hit scored 1620 IF down=1 THEN 1700 1630 IF j+1<10 THEN xx=i:yy=j+1:IF p3$(xx,yy)="" THEN RETURN 1640 FOR t=2 TO 9:IF p3$(xx,yy)="#" AND xx=i THEN IF j+t<10 THEN yy=j+t:IF p3$(xx,yy)="" THEN RETURN 1650 NEXT 1660 IF j-1>=0 AND xx=i THEN yy=j-1:IF p3$(xx,yy)="" THEN RETURN 1670 IF i+1<10 THEN yy=j:xx=i+1:IF p3$(xx,yy)=""THEN RETURN 1680 FOR t=2 TO 9:IF p3$(xx,yy)="#" AND yy=j THEN IF i+t<10 THEN xx=i+t:IF p3$(xx,yy)="" THEN RETURN 1690 NEXT 1700 IF i-1>=0 THEN yy=j:xx=i-1:IF p3$(xx,yy)="" THEN down=1:RETURN 1710 PRINT FNat$(9,0);CHR$(7);ron$;"I can't find your furniture." 1720 PRINT " You must have made a mistake. Please start again.";rof$;con$:END 1730 REM Assorted subroutines 1740 FOR a=0 TO 6:READ na$(a):NEXT 1750 initial$="HCFTDPL":FOR a=0 TO 6:a$(a)=MID$(initial$,a+1,1):NEXT:RETURN 1760 DATA hat stand,chair,filing cabinet 1770 DATA telex machine,drinks cabinet 1780 DATA photocopier,large oak desk 1790 FOR a=0 TO 6:h(a)=a+1:h1(a)=a+1 1800 NEXT:FOR a=0 TO 9:FOR b=0 TO 9 1810 p0$(a,b)="":p1$(a,b)="":p2$(a,b)="":p3$(a,b)="":down=0:NEXT:NEXT:RETURN 1820 PRINT FNat$(17,0);e$+"J":RETURN 1830 ans$="0123456789" 1840 k=0:k$="":WHILE k=0 OR k$="":k$=UPPER$(INKEY$):k=INSTR(ans$,k$):WEND:RETURN 1850 FOR temp=1 TO 800:NEXT:RETURN 1860 FOR temp=0 TO 2500:NEXT:RETURN
Controles
A través de la información en pantalla.
Carga del programa
1.- Introducir el disco CP/M por la cara 2 2.- Escribir BASIC y esperar a que cargue 3.- Retirar el disco CP/M e introducir el disco que contiene el juego Office Battleships 4.- Teclear run "OFFICEBA" y pulsar la tecla "ENTER"
Extras
Descarga
- Office_Battleships (juego en formato dsk, comprimido con zip)
es/office_battleships.1656537604.txt.gz · Última modificación: 2022/06/30 00:20 por jevicac