!*! Updated on 03-Jan-94 at 3:50 PM by Tim; edit time: 0:01:00 !*************************** AMUS Program Label ****************************** ! Filename: BATTL3.BAS Date: 1/3/94 ! Category: GAME Hash Code: Version: 3.0(1) ! Initials: TRON/AM Name: Tim Shoemaker ! Company: Datatronics Telephone #: 9099287704 ! Related Files: NONE ! Min. Op. Sys.: DBASIC Expertise Level: ! Special: must have DBASIC or DRUN to execute this. may be modified for other ! Description: a Multi terminal battleship game based on BATTL2.BAS. This one ! allows for easier placement of pieces, and faster game play. ! !***************************************************************************! ! ! ! BATTL3.BAS ! ! Battleship for the Alpha Micro ! ! WITH "GRAPHIC" INTERFACE AND MODS FOR DBASIC ! ! !***************************************************************************! !Copyright (C) 1986 by UltraSoft. All Rights Reserved. !FreeWare from UltraSoft. May be distributed free of charge. ! !Written by: David Pallmann ! !Edit History: !1.0 29-Mar-86 created. /DFP !2.0 01-May-86 Two-user version of BATTLE.BAS /RPW (CENTAURI) (512) 631-9141 !3.0 03-Jan 94 changed to a graphic screen by Tim Shoemaker (714) 455-3493 PROGRAM BATTL3,3.0 MAP1 OPP'RECORD MAP2 OPP'ROW,F,6 MAP2 OPP'COL,F,6 MAP1 XXX,S,1 R'MARGIN = 1 T'MARGIN = 3 OLD'OPP'ROW = 2 :OLD'OPP'COL = 2 MAP1 PIECE'MARKER,S,5 MAP1 PROMPT,S,20 MAP1 ENTRY,S,30 MAP1 HCHAR,S,1,"7" !Hit marker. MAP1 MCHAR,S,1,"-" !Missed marker. MAP1 CCHAR,S,1,"." !Coordinate marker. MAP1 DELAY,F,6,2000 !Delay loop for error mess. MAP1 CNAM,S,6 !Opponent's job name. MAP1 PNAM,S,6 !This player's job name. MAP1 CBRD(10,10),B,1 !COMPUTER BOARD MAP1 PBRD(10,10),B,1 !PLAYER BOARD MAP1 PIMG(10,10),B,1 !PLAYER IMAGE OF COMPUTER BOARD MAP1 CSHIP(5),F !SHIP COUNTS MAP1 PSHIP(5),F !SHIP COUNTS MAP1 NAME(5),S,20 !SHIP NAMES MAP1 LENGTH(5),F !SHIP LENGTHS MAP1 CDOWN,F !COMPUTER SHIPS SANK MAP1 PDOWN,F !PLAYER SHIPS SANK MAP1 HR,F !HIT ROW MAP1 HC,F !HIT COLUMN MAP1 SR,F !SAVED HIT ROW MAP1 SC,F !SAVED HIT COLUMN MAP1 HFLAG,F !HIT FLAG MAP1 I,F !LOOP INDEX MAP1 J,F !LOOP INDEX MAP1 K,F !LOOP INDEX MAP1 R,F !ROW MAP1 C,F !COLUMN MAP1 R1,F !ROW MAP1 C1,F !COLUMN MAP1 D,F !DIRECTION MAP1 VD,F !VERTICAL DIRECTION MAP1 HD,F !HORIZONTAL DIRECTION MAP1 L,F !LENGTH OF CURRENT SHIP MAP1 TEXT,S,10 !INPUT STRING MAP1 HITS,F !PLAYER HITS MAP1 CHITS,F !COMPUTER HITS MAP1 FLAG,F !FLAG MAP1 USR'BUF !Borrowed from A.B. USRBUF.CPY MAP2 UB'RCN,B,2 MAP2 UB'UID,S,6 MAP2 UB'NAME,S,30 MAP2 UB'FIL,X,62 MAP1 CNAME,S,30 MAP1 ANSWER,S,1 ?TAB(-1,0);" *+*+*+*+BATTLESHIP*+*+*+*+*+" ! ?TAB(10,1);"1. PLAY AGAINST THE COMPUTER." ! ?TAB(11,1);"2. PLAY AGAINST ANOTHER USER." WHICH: ! ?TAB(15,1);"_ <-- Enter your choice.";TAB(15,1); ! INPUT "",WHICH ! IF WHICH=1 CHAIN "BATTLE" ! IF WHICH<>2 GOTO WHICH ?TAB(20,1);"______ <-- Enter name of job to play against.";TAB(20,1); INPUT "",CNAM CNAM = RTRIM(CNAM) XCALL STRIP,CNAM IF LEN(CNAM)<1 GOTO WHICH SND'MSG: ?TAB(21,1);"_ <-- Send message to "+CNAM+"? (Y/N)";TAB(21,1); INPUT "",ANSWER IF UCS(ANSWER)<>"Y" GOTO INIT1 ?TAB(22,1); RUNDOS "SEND "+CNAM+" " GOTO SND'MSG INIT1: ! LOOKUP "MEM:GINDTA.SV",ABF ! IF ABF THEN & ! XCALL DB,14,USR'BUF : & ! PNAM=UB'UID ! IF ABF=0 THEN XCALL JOBNAM,PNAM ! XCALL STRIP,PNAM PNAM = .JOBNAME LOOKUP PNAM+".OPP",B WHEN B = 0 ALLOCATE PNAM+".OPP",1 WEND OPEN #34,PNAM+".OPP",RANDOM,12,OPP'RECNO OPP'RECNO = 0 OPP'ROW = 1 OPP'COL = 1 WRITE #34,OPP'RECORD CLOSE #34 OPEN #34,PNAM+".OPP",RANDOM,12,OPP'RECNO INIT: RANDOMIZE FOR I=1 TO 5 READ NAME(I),LENGTH(I) CSHIP(I)=LENGTH(I) PSHIP(I)=LENGTH(I) NEXT DATA BATTLESHIP,5 DATA DESTROYER,4 DATA CRUISER,3 DATA SUBMARINE,3 DATA PT BOAT,2 NEWGAM: PRINT TAB(-1,0); TAB(-1,11); CALL PLACE'SQUARES ! FOR I=1 TO 10 ! PRINT TAB(1,I*2+2); STR(I); ! PRINT TAB(13,I*2+2); STR(I); ! PRINT TAB(I+1,1); CHR(I+64); ! PRINT TAB(I+13,1); CHR(I+64); ! FOR J=1 TO 10 ! CBRD(I,J)=0 : PBRD(I,J)=0 : PIMG(I,J)=0 ! PRINT TAB(I+1,J*2+2); CCHAR; ! PRINT TAB(I+13,J*2+2); CCHAR; ! NEXT ! NEXT ! PRINT TAB(6,25); "OPPONENT'S"; ! PRINT TAB(7,25); "FIELD"; ! PRINT TAB(17,25);"YOUR"; ! PRINT TAB(18,25);"FIELD"; ! PRINT TAB(-1,12); ! IF ABF=0 PROMPT="YOUR NAME? " : CALL INPUT : UB'NAME=ENTRY UB'NAME = .USERNAME ! PRINT TAB(19,25);PNAM;" (";UB'NAME;")"; PRINT TAB(1,50); "** BATTLESHIP **"; LOOKUP PNAM+".BAT",FOUND IF FOUND CALL LOAD'OLD'BOARD : GOTO START'PLAY PRINT TAB(-1,11); PRINT TAB(2,40); "POSITION PIECE USING NUMBER PAD... HIT '5' TO PLACE PIECE, HIT '0' TO ROTATE" FOR I=1 TO 5 GETPOS:! PRINT TAB(-1,11); ! PRINT TAB(I+7,40); NAME(I); " ("; STR(LENGTH(I)); ")? "; TAB(-1,9); ! PRINT TAB(-1,12); ! PROMPT="" ! CALL INPUT PIECE'LENGTH = LENGTH(I) CALL PLACE'THE'PIECES TEXT=ENTRY CALL COORD : IF FLAG THEN GOTO GETPOS CALL CHOP R1=R : C1=C CALL COORD : IF FLAG THEN GOTO GETPOS VD=0 : HD=0 IF R>R1 THEN VD=1 IF RC1 THEN HD=1 IF C10 OR C>10 GOTO GETPOS !Watch for subscript out of range. IF PBRD(R,C)#0 THEN FLAG=-1 NEXT J IF FLAG THEN GOTO GETPOS FOR J=1 TO LENGTH(I) PBRD(R1,C1)=I ! PRINT TAB(R1+13,C1*2+2); CHR(I+96); THIS'ROW = R1 :THIS'COL = C1 PIECE'MARKER = CHR(I+96)+CHR(I+96)+CHR(I+96)+CHR(I+96)+CHR(I+96) CALL PLACE'PIECE R1=R1+VD : C1=C1+HD NEXT NEXT PRINT TAB(2,1);TAB(-1,9); ! FOR I=5 TO 12 ! PRINT TAB(I,40); TAB(-1,9); ! NEXT CALL SAVE'BOARD START'PLAY: CALL LOAD'BOARD LOOKUP PNAM+".MOV",FOUND IF FOUND KILL PNAM+".MOV" ! PRINT TAB(-1,11); ! PRINT TAB(5,40); "YOUR GUESS"; ! PRINT TAB(1,40); CNAME+"'S GUESS"; ! PRINT TAB(-1,12); PLAYER: !PRINT TAB(5,65); TAB(-1,9); ! PROMPT="" ! CALL INPUT CALL PLACE'YOUR'TORPEDO TEXT=ENTRY CALL COORD : IF FLAG THEN GOTO PLAYER IF R<1 OR R>10 OR C<1 OR C>10 THEN GOTO PLAYER IF PIMG(R,C)#0 THEN GOTO PLAYER CALL SAVE'MOVE CALL WAIT'FOR'MOVE IF CBRD(R,C)=0 THEN GOTO MISS HIT: PIMG(R,C)=1 ! PRINT TAB(R+1,C*2+2); HCHAR; BOARD = 1 THIS'ROW = R :THIS'COL = C PIECE'MARKER = HCHAR+HCHAR+HCHAR+HCHAR+HCHAR PRINT TAB(-1,23); CALL PLACE'PIECE PRINT TAB(-1,24); PRINT TAB(1,20); "HIT "; CHR(7); HITS=HITS+1 I=CBRD(R,C) CSHIP(I)=CSHIP(I)-1 IF CSHIP(I)=0 THEN CDOWN=CDOWN+1 : & PRINT TAB(3,20); STR(CDOWN); " OF "+CNAME+"'S SHIPS SANK"; IF HITS<17 THEN GOTO COMP PRINT TAB(2,45); "CONGRATULATIONS, YOU WIN "; CALL DELAY : CALL DELAY CALL LOAD'MOVE GOTO QUIT MISS: PIMG(R,C)=-1 ! PRINT TAB(R+1,C*2+2); MCHAR; BOARD = 1 THIS'ROW = R :THIS'COL = C PIECE'MARKER = MCHAR+MCHAR+MCHAR+MCHAR+MCHAR CALL PLACE'PIECE PRINT TAB(1,20); "MISS"; COMP: CALL LOAD'MOVE ! PRINT TAB(1,65); CHR(R+64); STR(C); " "; IF PBRD(R,C)#0 THEN GOTO CHIT CMISS: ! PRINT TAB(R+13,C*2+2); MCHAR; BOARD = 2 THIS'ROW = R :THIS'COL = C PIECE'MARKER = MCHAR+MCHAR+MCHAR+MCHAR+MCHAR CALL PLACE'PIECE PRINT TAB(1,90); "MISS"; GOTO PLAYER CHIT: ! PRINT TAB(R+13,C*2+2); HCHAR; BOARD = 2 THIS'ROW = R :THIS'COL = C PIECE'MARKER = HCHAR+HCHAR+HCHAR+HCHAR+HCHAR PRINT TAB(-1,23); CALL PLACE'PIECE PRINT TAB(-1,24); PRINT TAB(1,90); "HIT "; CHR(7); CHITS=CHITS+1 I=PBRD(R,C) PSHIP(I)=PSHIP(I)-1 IF PSHIP(I)=0 THEN PDOWN=PDOWN+1 : & PRINT TAB(3,90); STR(PDOWN); " OF YOUR SHIPS SANK"; IF CHITS<17 THEN GOTO PLAYER PRINT TAB(2,45); "SORRY, YOU HAVE LOST. "; QUIT: IF HITS<17 PRINT TAB(2,68); "WIMP!"; PRINT TAB(3,45); "EFFICIENCY RATING = ";(HITS/TRIES)*100 USING "###";"%"; FOR I=1 TO 10 FOR J=1 TO 10 ! IF CBRD(I,J)#0 AND PIMG(I,J)=0 THEN PRINT TAB(I+1,J*2+2); CHR(96+CBRD(I,J)); WHEN CBRD(I,J) <> 0 AND PIMG(I,J)=0 BOARD = 1 THIS'ROW = I :THIS'COL = J X=CBRD(I,J) PIECE'MARKER = CHR(X+96)+CHR(X+96)+CHR(X+96)+CHR(X+96)+CHR(X+96) CALL PLACE'PIECE WEND NEXT NEXT PRINT TAB(2,75); CALL DELAY : CALL DELAY END COORD: FLAG=0 R=ASC(LEFT(TEXT,1))-64 CALL CHOP C=LEFT(TEXT,1) CALL CHOP IF LEFT(TEXT,1)="0" THEN C=10 : CALL CHOP IF R<1 OR R>10 THEN FLAG=-1 IF C<1 OR C>10 THEN FLAG=-1 RETURN CHOP: TEXT=RIGHT(TEXT,LEN(TEXT)-1) RETURN LOAD'MOVE: LOOKUP CNAM+".MOV",FOUND IF FOUND=0 ?TAB(2,40);TAB(-1,9); : CALL DELAY : & ?"Waiting for "+CNAME+" to move..."; :& CALL DELAY : CALL DELAY : GOTO LOAD'MOVE ?TAB(3,40);TAB(-1,9); OPEN #1,CNAM+".MOV",INPUT INPUT #1,R,C CLOSE #1 KILL CNAM+".MOV" RETURN WAIT'FOR'MOVE: CALL UPDATE'OPPONENT LOOKUP CNAM+".MOV",FOUND IF FOUND=0 ?TAB(3,40);TAB(-1,9); : CALL DELAY : & ?"Waiting for "+CNAME+" to move..."; :& CALL DELAY : CALL DELAY : GOTO WAIT'FOR'MOVE RETURN SAVE'MOVE: LOOKUP PNAM+".MOV",FOUND IF FOUND ?TAB(3,40);TAB(-1,9); : CALL DELAY : & ?"Waiting for "+CNAME+" to get your move..."; :& CALL DELAY : CALL DELAY : GOTO SAVE'MOVE ?TAB(3,40);TAB(-1,9); OPEN #1,PNAM+".MOV",OUTPUT PRINT #1,STR(R);",";STR(C) CLOSE #1 TRIES=TRIES+1 RETURN LOAD'BOARD: IF ABF PROMPT="OPPONENT'S ID " : CALL INPUT : CNAM=ENTRY LOOKUP CNAM+".BAT",FOUND IF FOUND=0 ?TAB(3,40);TAB(-1,9); : CALL DELAY : & ?"Waiting for "+CNAM+" to set up board..."; :& CALL DELAY : CALL DELAY : GOTO LOAD'BOARD ?TAB(3,40);TAB(-1,9); OPEN #1,CNAM+".BAT",INPUT INPUT LINE #1,CNAME FOR X = 1 TO 10 FOR Y = 1 TO 10 INPUT #1,CBRD(X,Y) NEXT NEXT CLOSE #1 KILL CNAM+".BAT" ! PRINT TAB(5,40);TAB(-1,9); ! PRINT TAB(8,25);CNAM;" (";CNAME;")"; OPEN #35,CNAM+".OPP",RANDOM,12,OPP'RECNO OPP'RECNO = 0 RETURN SAVE'BOARD: OPEN #1,PNAM+".BAT",OUTPUT PRINT #1,UB'NAME FOR X = 1 TO 10 FOR Y = 1 TO 10 PRINT #1,STR(PBRD(X,Y)) NEXT NEXT CLOSE #1 RETURN LOAD'OLD'BOARD: OPEN #1,PNAM+".BAT",INPUT INPUT LINE #1,TEXT TEXT="" FOR X = 1 TO 10 FOR Y = 1 TO 10 INPUT #1,PBRD(X,Y) ! IF PBRD(X,Y)<>0 & ! PRINT TAB(X+13,Y*2+2); CHR(PBRD(X,Y)+96); WHEN PBRD(X,Y) <> 0 THIS'ROW = X :THIS'COL = Y I=PBRD(X,Y) PIECE'MARKER = CHR(I+96)+CHR(I+96)+CHR(I+96)+CHR(I+96)+CHR(I+96) CALL PLACE'PIECE WEND NEXT NEXT CLOSE #1 RETURN INPUT: IF LEN(PROMPT)>0 & PRINT TAB(-1,11);TAB(5,40);TAB(-1,9);PROMPT;TAB(-1,12); INPUT LINE ENTRY ENTRY = UCS(RTRIM(ENTRY)) !XCALL STRIP,ENTRY !ENTRY=UCS(ENTRY) IF ENTRY[1,1]="Q" OR ENTRY="END" OR ENTRY="BYE" GOTO QUIT RETURN DELAY: SLEEP 500 RETURN !@@@@ PRINT TAB(-1,0);TAB(-1,80); CALL PLACE'SQUARES PRINT TAB(1,1);"HIT 'Q' TO QUIT, OR NUMBER PAD TO MOVE... "5" TO PLACE PIECE" BOARD = 1 PRINT TAB(1,1); THIS'ROW = 1 :THIS'COL = 1 PLACE'THE'PIECES: THIS'PIECE'COL = 1 THIS'PIECE'ROW = 1 PIECE'HORZ = 1 ! PIECE'LENGTH = 3 BOARD = 2 PLACE'PIECE'LOOP: ROW'MIN = 1 :ROW'MAX = 10 :COL'MIN = 1 :COL'MAX = 10 IF PIECE'HORZ = 1 OR PIECE'HORZ = 2 ROW'MAX = 11- PIECE'LENGTH IF PIECE'HORZ = 2 OR PIECE'HORZ = 3 OR PIECE'HORZ = 4 COL'MAX = 11-PIECE'LENGTH IF PIECE'HORZ = 4 ROW'MIN = 0 + PIECE'LENGTH THIS'PIECE'COL = (THIS'PIECE'COL MIN COL'MAX) MAX COL'MIN THIS'PIECE'ROW = (THIS'PIECE'ROW MIN ROW'MAX) MAX ROW'MIN FOR ADJUSTER=0 TO PIECE'LENGTH - 1 CALL ADJUST'POSITION CALL PLACE'BIG'CURSOR NEXT ADJUSTER X=GETKEY(-1) IF CHR(X) = "Q" PRINT TAB(-1,0); :END XXX = CHR(X) FOR ADJUSTER=0 TO PIECE'LENGTH - 1 CALL ADJUST'POSITION CALL UNPLACE'BIG'CURSOR NEXT ADJUSTER THIS'COL = THIS'PIECE'COL :THIS'ROW = THIS'PIECE'ROW CALL FIGURE'NEW'LOCATION THIS'PIECE'COL = THIS'COL THIS'PIECE'ROW = THIS'ROW WHEN XXX = 5 ENTRY = "" ENTRY = "ABCDEFGHIJ"[THIS'ROW;1]+THIS'COL+"," ADJUSTER = 1 CALL ADJUST'POSITION ENTRY += "ABCDEFGHIJ"[THIS'ROW;1]+THIS'COL RETURN WEND WHEN XXX = "R" OR XXX = "." OR XXX = "0" PIECE'HORZ += 1 IF PIECE'HORZ > 4 PIECE'HORZ = 1 WEND goto PLACE'PIECE'LOOP ADJUST'POSITION: THIS'COL = THIS'PIECE'COL :THIS'ROW = THIS'PIECE'ROW IF PIECE'HORZ = 1 OR PIECE'HORZ = 2 THIS'ROW = THIS'ROW + ADJUSTER IF PIECE'HORZ = 4 THIS'ROW = THIS'ROW - ADJUSTER IF PIECE'HORZ = 2 OR PIECE'HORZ = 3 OR PIECE'HORZ = 4 THIS'COL = THIS'COL + ADJUSTER RETURN PLACE'YOUR'TORPEDO: BOARD = 1 THIS'ROW = (YOUR'ROW MIN 10) MAX 1 THIS'COL = (YOUR'COL MIN 10) MAX 1 CALL PLACE'BIG'CURSOR PYT1: CALL UPDATE'OPPONENT X=GETKEY(0) WHEN X = -1 SLEEP 500 GOTO PYT1 WEND IF CHR(X) = "Q" PRINT TAB(-1,0); :END XXX = CHR(X) CALL UNPLACE'BIG'CURSOR CALL FIGURE'NEW'LOCATION YOUR'ROW = THIS'ROW :YOUR'COL = THIS'COL WHEN XXX = 5 ENTRY = "" ENTRY = "ABCDEFGHIJ"[THIS'ROW;1]+THIS'COL RETURN WEND WHEN XXX = "B" IF BOARD = 1 BOARD = 2 ELSE BOARD = 1 WEND goto PLACE'YOUR'TORPEDO UPDATE'OPPONENT: ! WHEN OLD'THIS'ROW <> THIS'ROW OR OLD'THIS'COL <> THIS'COL OPP'ROW = THIS'ROW :OPP'COL = THIS'COL WRITE #34,OPP'RECORD CLOSE #34 OPEN #34,PNAM+".OPP",RANDOM,12,OPP'RECNO ! PRINT TAB(1,1);"WRITING: ";OPP'ROW;OPP'COL; ! WEND UO2: CLOSE #35 OPEN #35,CNAM+".OPP",RANDOM,12,OPP'RECNO READ #35,OPP'RECORD ! PRINT TAB(2,1);"READING: ";OPP'ROW;OPP'COL; IF OPP'ROW = OLD'OPP'ROW AND OPP'COL = OLD'OPP'COL RETURN SAVE'THIS'ROW = THIS'ROW :SAVE'THIS'COL = THIS'COL :SAVE'BOARD = BOARD BOARD = 2 THIS'ROW = OLD'OPP'ROW :THIS'COL = OLD'OPP'COL :CALL UNPLACE'BIG'CURSOR THIS'ROW = OPP'ROW :THIS'COL = OPP'COL :CALL PLACE'BIG'CURSOR ! THIS'ROW= R :OPP'COL = C :CALL PLACE'BIG'CURSOR OLD'OPP'ROW = OPP'ROW :OLD'OPP'COL = OPP'COL THIS'ROW = SAVE'THIS'ROW :THIS'COL = SAVE'THIS'COL :BOARD = SAVE'BOARD RETURN FIGURE'NEW'LOCATION: IF XXX = 3 OR XXX = 6 OR XXX = 9 THIS'COL = (THIS'COL + 1) MIN 10 IF XXX = 1 OR XXX = 4 OR XXX = 7 THIS'COL = (THIS'COL - 1) MAX 1 IF XXX = 7 OR XXX = 8 OR XXX = 9 THIS'ROW = (THIS'ROW - 1) MAX 1 IF XXX = 1 OR XXX = 2 OR XXX = 3 THIS'ROW = (THIS'ROW + 1) MIN 10 RETURN PLACE'PIECE: CALL CALC'PLACE'XY PRINT TAB(-1,12); PRINT TAB(PLACE'X,PLACE'Y);PIECE'MARKER; PRINT TAB(-1,11); RETURN CALC'PLACE'XY: IF BOARD=1 R'MARGIN = 1 ELSE R'MARGIN = 71 PLACE'X = T'MARGIN+2+(THIS'ROW-1)*2 PLACE'Y = R'MARGIN+1+(THIS'COL-1)*6 RETURN PLACE'BIG'CURSOR: CALL CALC'PLACE'XY PRINT TAB(-1,23); PRINT TAB(PLACE'X-1,PLACE'Y-1); TAB(-1,49);TAB(-1,49);TAB(-1,49);TAB(-1,49);TAB(-1,49);TAB(-1,49);TAB(-1,49); PRINT TAB(PLACE'X,PLACE'Y-1); TAB(-1,49); PRINT TAB(PLACE'X,PLACE'Y+5); TAB(-1,49); PRINT TAB(PLACE'X+1,PLACE'Y-1); TAB(-1,49);TAB(-1,49);TAB(-1,49);TAB(-1,49);TAB(-1,49);TAB(-1,49);TAB(-1,49); PRINT TAB(-1,24); RETURN UNPLACE'BIG'CURSOR: CALL CALC'PLACE'XY PRINT TAB(-1,23); PRINT TAB(PLACE'X-1,PLACE'Y-1); TAB(-1,48); PRINT TAB(-1,46);TAB(-1,46);TAB(-1,46);TAB(-1,46);TAB(-1,46); PRINT TAB(-1,48); PRINT TAB(PLACE'X,PLACE'Y-1); TAB(-1,47); PRINT TAB(PLACE'X,PLACE'Y+5); TAB(-1,47); PRINT TAB(PLACE'X+1,PLACE'Y-1); TAB(-1,48); PRINT TAB(-1,46);TAB(-1,46);TAB(-1,46);TAB(-1,46);TAB(-1,46); PRINT TAB(-1,48); PRINT TAB(-1,24); RETURN PLACE'SQUARES: PRINT TAB(-1,80);TAB(-1,0); FOR BOARD = 1 TO 2 FOR THIS'ROW = 1 TO 10 FOR THIS'COL = 1 TO 10 CALL UNPLACE'BIG'CURSOR NEXT THIS'COL NEXT THIS'ROW NEXT BOARD PRINT TAB(1,1); RETURN