home *** CD-ROM | disk | FTP | other *** search
- REM THIS IS THE PROGRAM 'CASPGAME.BAS'
- REM (COMPUTER AIDED SEARCH AND RESCUE PLANNING GAME)
- REM
- REM WRITTEN BY MAJOR BOB GREGOIRE,OPERATIONS OFFICER,GROUP 30,
- REM PENNSYLVANIA WING,CIVIL AIR PATROL
- REM
- REM THIS PROGRAM IS ESSENTIALLY IDENTICAL TO THE WORKING PROGRAM 'BITCASP'
- REM AND WAS WRITTEN TO DEMONSTRATE THAT PROGRAM. TO USE THIS PROGRAM A SCENARIO
- REM MUST BE WRITTEN FOR A TYPICAL SAR SITUATION AND THEN THE INSTRUCTOR
- REM MUST RUN THIS GAME TO THE EXTENT OF INPUTING ALL POT'S FOR THAT SCENNARIO.
- REM THE USER THEN ATTEMPTS TO RECONSTRUCT THAT POT MAP FROM THE SCENNARIO AND
- REM FIND THE TARGET (WHICH HAS BEEN RANDOMLY PLACED ON THE MAP WITH RESPECT TO
- REM THE INITIAL POT MAP) USING POD'S.
- REM
- REM THE PURPOSE OF THIS PROGRAM IS TO RECORD AND CALCULATE THE VARIOUS
- REM PROBABILITIES OF A SEARCH TARGET BASED UPON THE ESTIMATED TRACK, AREA
- REM AND SEARCH RESULTS. THIS PROGRAM INTERFACES WITH A DIGITIZER IN ORDER
- REM TO REDUCE MAP TRACKS, AREAS AND GRID POINTS TO MANAGEABLE FORM. THE
- REM OUTPUT FROM THIS PROGRAM IS TABULAR SUMMARY OF THE PROBABILITY OF
- REM TARGET OF ALL GRIDS WITHIN THE MAP AREA. WITH THESE RESULTS THE MISSION
- REM COORDINATOR IS ABLE TO MORE EFFECTIVELY DISTRIBUTE HIS SEARCH FORCES.
- REM
- REM THIS PROGRAM REQUIRES A 35K CP/M SYSTEM AND USES THE 'CBASIC' COMPILER
- REM SPECIAL EQUIPMENT IS A SUMMAGRAPHICS 'BITPAD' WITH THE I/O DRIVER
- REM FOR ITS PORT MODIFIED TO CHANGE ANY 'LINE FEED' CHARACTER TO 'SPACE'.
- REM THIS WAS DONE BECAUSE 'CARRIAGE RETURN' IS THE OUTPUT DELIMITER IN
- REM CBASIC AND BASIC-E. THEREFORE THE 'LINEFEED' IS STORED IN THE UART
- REM AND ADDED AS THE FIRST CHARACTER OF THE NEXT BITPAD DATA SEQUENCE. THIS
- REM CAUSES THE FIRST COORDINATE (IE XXXX) TO BE IGNORED BY THE COMPILER.
- REM THE SYSTEM IS CONFIGURED WITH THE BIT PAD AT 'IOBYTE'=DECIMAL '3'
- REM THE CONSOLE AND PRINTER ARE AT 'IOBYTE'=DECIMAL '129'
- REM AN ADM-3 TERMINAL HAS BEEN MODIFIED TO CLEAR SCREEN WITH 'CHR$(25)'.
- REM THE LINE "OUT 0,184" CHANGES MY 3P+S I/O FROM THE NORMAL 110 BAUD TO
- REM THE ALTERNATE 9600 BAUD. THE LINE "POKE 35513,201" INSERTS 'RET (IE.C9)
- REM AS THE FIRST INSTRUCTION OF THE 3P+S OUTPUT DRIVER IN BIOS. THE LINE
- REM "POKE 35501,0" ACTIVATES A LINE-FEED CHARACTER TO SPACE CHARACTER
- REM CONVERSION ROUTINE IN THE 3P+S INPUT ROUTINE.
- REM
- REM THE BITPAD USED HAD AN RS232 OUTPUT OF 13 ASCII DIGITS (XXXX,YYYY,ZCL)
- REM WHERE XXXX IS THE NUMBER OF INCHES FROM THE LOWER LEFT TIMES 200
- REM YYYY=Y COORD, Z=PEN DOWN FLAG, C=CARRIAGE RETURN, L=LINE FEED
- REM A SERIOUS PROBLEM IS THAT THE BIOS ATTEMPTS TO ECHO ALL BITPAD INPUT
- REM TO THE BITPAD OUTPUT PORT. THIS CUTS THE THROUGHPUT CONSIDERABLY.
- REM AT TIMES THE INPUT DATA WILL OVERRUN THE PROCESSING TIME AND WILL
- REM CAUSE THE COMPILER TO OUTPUT AN ERROR MESSAGE TO THE BITPAD OUTPUT
- REM PORT. TIMEWISE THIS WILL MESS UP THE INPUT OF THE NEXT DATA POINT
- REM (WHICH CAUSES ANOTHER MESSAGE ETC ETC). AT RATE 4 (8 DATA POINTS PER
- REM SECOND)THE THROUGHPUT IS ABOUT 3 DATA POINTS PER SECOND.IF THE CALLING
- REM ADDRESS OF THE BITPAD OUTPUT DRIVER HAS 'C9' (RETURN) PATCHED TO IT,
- REM RATES 4,5 WILL GIVE AN HONEST THROUGHPUT OF 6 OR 12.5 DATA POINTS
- REM PER SECOND (IE. 16 OR 8 SECONDS PER TRACK). THE BITPAD BAUD RATE WAS
- REM SET TO 9600 (1 STOP BIT).
- REM
- REM THIS PROGRAM HAS BEEN DESIGNED TO USE A PENNSYLVANIA MAP WHICH IS
- REM GRIDDED ON 15 MINUTE (LAT+LONGITUDE) CENTERS. THERE ARE THEREFORE
- REM 9(NORTH-SOUTH) BY 23(EAST-WEST) GRIDS. FOR PRINTING CONVENIENCE
- REM THE PENNSYVANIA MAP WAS ORIENTED WITH EAST AT THE TOP OF THE BITPAD.
- REM FOR OTHER MAPS CHANGE THE VARIABLES 'NX' AND 'NY'.
- REM **********************************************************************
- REM VARIABLES:
- REM NY=THE NUMBER OF HORIZONTAL ROWS
- REM NX=THE NUMBER OF VERTICAL ROWS
- REM AX,AY=UPPER LEFT MAP COORDINATE
- REM BX,BY=UPPER RIGHT MAP COORDINATE
- REM CX,CY=LOWER LEFT MAP COORDINATE
- REM NUMPTS=THE NUMBER OF DATA POINTS PER TRACK LINE
- REM POT=PROBABILITY OF TARGET FOR A SINGLE TRACK OR GRID
- REM SPOT=THE SUM OF POT'S FOR ALL GRIDS IN THE IPOT( ) MATRIX
- REM TPOF=THE TOTAL PROBABILITY OF FAILURE FOR THE MAP AREA
- REM POD=PROBABILITY OF DETECTION
- REM ANS$=DUMMY STRING VARIABLE
- REM TX,TY,Z=DUMMY VARIABLES
- REM TEMP( )=MATRIX HOLDING TEMPORARY ONE TRACK POT'S
- REM IPOT( )=MATRIX HOLDING THE INITIAL POT FOR ALL TRACKS/POT AREAS
- REM COVF( )=MATRIX HOLDING COVERAGE FACTORS
- REM APOT( )=MATRIX HOLDING THE POT'S ADJUSTED FOR POD
- REM XTARGET,YTARGET=X+Y COORDINATES OF THE SECRET TARGET
- REM TARGET=RANDOM NUMBER USED TO SELECT THE TARGET AND THEN USED AS MIN POD
- REM
- REM NOTE: GRID '0,0' IS AT LOWER LEFT; GRID 'NX-1,NY-1' IS AT THE UPPER RIGHT
- REM
- REM ************************************************************************
- REM
- REM LOAD INITIAL DATA
- REM
- OUT 0,184 REM COMMAND WORD TO BITPAD I/O PORT
- POKE 35513,201:POKE 35501,0 REM 35K SYSTEM PATCH
- PRINT CHR$(25) REM CLEAR SCREEN
- NY=23 : NX=9 : NUMPTS=100 REM MAP SIZE
- XTARGET=-1:YTARGET=-1:TPOF=1
- DIM DX(NUMPTS),DY(NUMPTS)
- DIM TEMP(NX-1,NY-1),IPOT(NX-1,NY-1),COVF(NX-1,NY-1),APOT(NX-1,NY-1)
- REM
- REM ****************************************************************
- REM
- REM PROPERLY ORIENT THE MAP ,LESS THAN .15 INCH TILT ALLOWED
- REM
- PRINT "SWITCH BITPAD TO MODE 3 AND PRESS 'CLEAR'"
- 105 PRINT "TOUCH PROBE TO UPPER LEFT CORNER,UPPER RIGHT,LOWER LEFT"
- POKE 3,3 REM BIT I/0 IS CONSOLE
- INPUT AX,AY,Z REM UPPER LEFT
- INPUT BX,BY,Z REM UPPER RIGHT
- INPUT CX,CY,Z REM LOWER LEFT
- POKE 3,129 REM VTR IS CONSOLE
- IF AX=0 THEN PRINT "TRY AGAIN":GOTO 105
- IF ABS(BY-AY)>30 THEN PRINT CHR$(7);"STRAIGHTEN THE MAP":GOTO 105
- PRINT "THE COORDINATES ARE ";AX/200;",";AY/200,BX/200;",";BY/200
- PRINT " ";CX/200;",";CY/200
- INPUT "OK? (Y/N)";ANS$
- IF LEFT$(ANS$,1)<>"Y" THEN GOTO 105
- TX=NX/(BX-AX) : TY=NY/(AY-CY) REM GRID WIDTH+HEIGHT
- REM
- REM **********************************************************************
- REM
- REM COMMAND MENUE
- REM
- 150 PRINT CHR$(25);FRE REM CLEAR SCREEN
- PRINT "CURRENT SEARCH EFFECTIVENESS=";INT(1000*(1-TPOF)+.5)/10;"%"
- PRINT "YOU HAVE THE FOLLOWING OPTIONS:":PRINT
- PRINT "1.ADD A NEW TRACK LINE POT";TAB(33);"4.ADD NEW POD"; \
- TAB(50);"5.LIST INITIAL POT MAP"
- PRINT "2.ADD A NEW GENERAL AREA POT";TAB(50);"6.LIST POD MAP"
- PRINT "3.ADD AN AREA OF EMPHASIS";TAB(50);"7.LIST ADJUSTED POT MAP"
- PRINT TAB(50);"8.IDENTIFY GRID POT'S":PRINT
- PRINT"9.START GAME";TAB(20);"10.SAVE SCENNARIO";TAB(50);"11.QUIT GAME"
- INPUT "WHICH ONE (1-11)?";COMMAND
- IF COMMAND<1 OR COMMAND>11 THEN GOTO 150
- ON COMMAND GOSUB 180,180,180,700,600,1000,900,1100,2000,3000,5000
- GOTO 150
- REM
- REM **********************************************************************
- REM
- REM INPUT GENERAL AREA OR TRACK LINE POT
- REM
- 180 GOSUB 475 REM ZERO TEMP( )
- GOSUB 200 REM INPUT DATA POINTS
- GOSUB 300 REM CHECK FOR OFF-MAP
- GOSUB 350 REM REM ASSIGN POT'S
- IF COMMAND=2 OR COMMAND=3 THEN GOSUB 550 REM ASSIGN AREA POT'S
- IF COMMAND<>3 THEN GOSUB 375 ELSE GRIDCOUNT=1 REM COUNT # OF GRIDS
- GOSUB 400 REM PRINT ROUTINE
- INPUT "ARE YOU SATISFIED WITH THIS AREA/TRACK?";ANS$
- IF LEFT$(ANS$,1)<>"Y" THEN GOTO 180 REM START AGAIN
- PRINT "WAIT"
- IF COMMAND<>3 THEN GOSUB 450 ELSE GOSUB 1200 REM LOAD IPOT( )
- GOSUB 500 REM DELPHI SCALE IPOT()
- INPUT "DO YOU HAVE ANOTHER AREA/TRACK TO ADD?";ANS$
- IF LEFT$(ANS$,1)="Y" THEN GOTO 180
- GOSUB 800 REM RECALCULATE APOT()
- RETURN
- REM
- REM ***********************************************************************
- REM
- REM INPUT THE TRACK POT OR AREA DATA POINTS
- REM
- 200 INPUT "WHAT IS THE POT?";POT REM IN %
- PRINT "SWITCH TO MODE '1' AND RATE '4'"
- PRINT "DRAW AT WRITING SPEED" REM SWITCH STREAM MODE
- POKE 3,3 REM XFER TO BITPAD
- FOR Q=1 TO NUMPTS REM FOR ALL DATA POINTS
- INPUT DX(Q),DY(Q),Z REM INPUT FROM BITPAD
- NEXT Q
- POKE 3,129:PRINT CHR$(7);"WAIT" REM 'BEEP'
- RETURN
- REM
- REM ***********************************************************************
- REM
- REM CHANGES OFF-MAP DATA POINTS TO ON-MAP POINTS AT THE BOUNDARIES
- REM
- 300 FOR Q=1 TO NUMPTS
- IF DX(Q)<=AX THEN DX(Q)=AX+1 REM LEFT SIDE
- IF DY(Q)<=CY THEN DY(Q)=CY+1 REM BOTTOM
- IF DX(Q)>=BX THEN DX(Q)=BX-1 REM RIGHT SIDE
- IF DY(Q)>=AY THEN DY(Q)=AY-1 REM TOP
- NEXT Q
- RETURN
- REM
- REM ***********************************************************************
- REM
- REM ASSIGN THE POT TO A GRID IF ANY DATA POINT IS WITHIN THAT GRID
- REM
- 350 FOR Q=1 TO NUMPTS REM FOR ALL DATA POINTS
- TEMP(INT((DX(Q)-AX)*TX),INT((DY(Q)-CY)*TY))=POT
- NEXT Q
- RETURN
- REM
- REM ***********************************************************************
- REM
- REM THIS ROUTINE COUNTS THE # OF GRIDS AFFECTED BY THE TRACK/AREA IN ORDER
- REM TO APPORTION POT TO THESE GRIDS IN THE 'XFER POT' ROUTINE
- REM
- 375 GRIDCOUNT=0 REM RESET
- FOR R=0 TO NY-1 REM FOR ALL GRIDS
- FOR S=0 TO NX-1
- IF TEMP(S,R)<>0 THEN GRIDCOUNT=GRIDCOUNT+1
- NEXT S
- NEXT R
- RETURN
- REM
- REM**********************************************************************
- REM
- REM PRINT THE GRID POT'S ASSIGNED BY THIS TRACK
- REM
- 400 FOR R=NY-1 TO 0 STEP -1 REM PRINT FROM TOP DOWN
- FOR S=0 TO NX-1 REM FOR ALL GRIDS
- IF TEMP(S,R)<>0 THEN \
- PRINT TAB(1+9*S);INT(10*TEMP(S,R)/GRIDCOUNT)/10;"%";\
- ELSE PRINT TAB(1+9*S);" *";
- NEXT S:PRINT
- NEXT R
- RETURN
- REM
- REM *********************************************************************
- REM
- REM TRANSFER TEMP( ) TO IPOT( ) TEMP() HOLDS THIS-TRACK/AREA POT
- REM NOTE:ALL TEMP( ) ENTRIES ARE SCALED DOWN BY 'GRIDCOUNT'
- REM
- 450 FOR R=0 TO NY-1
- FOR S=0 TO NX-1 REM 'SPOT' IS PRE-THIS-TRACK 'SPOT'
- IPOT(S,R)=SPOT*IPOT(S,R)+TEMP(S,R)/GRIDCOUNT
- NEXT S
- NEXT R
- RETURN
- REM
- REM *******************************************************************
- REM
- REM ZERO THE TEMP( ) MATRIX
- REM
- 475 PRINT "WAIT"
- FOR R=0 TO NY-1 REM FOR ALL GRIDS
- FOR S=0 TO NX-1
- TEMP(S,R)=0
- NEXT S
- NEXT R
- RETURN
- REM
- REM ***********************************************************************
- REM DELPHI EVALUATION -FOR ALL GRIDS, SUMS IPOT() THEN DIVIDES BY SUM
- REM
- 500 SPOT=0 REM RECALCULATE SPOT
- FOR R=0 TO NY-1 REM SUM ALL IPOT ENTRIES
- FOR S=0 TO NX-1 REM IN THE VARIABLE 'SPOT'
- SPOT=SPOT+IPOT(S,R)
- NEXT S
- NEXT R
- REM
- REM DELPHI SCALING ROUTINE
- REM
- FOR R=0 TO NY-1 REM SCALE DOWN ALL IPOT ENTRIES
- FOR S=0 TO NX-1 REM 0<=IPOT( )<=1.00
- IPOT(S,R)=IPOT(S,R)/SPOT
- NEXT S
- NEXT R
- RETURN
- REM
- REM **********************************************************************
- REM
- REM BILL LOWERY'S AREA POT TECHNIQUE -FILLS AN AREA BOUNDED BY DATA POINTS
- REM
- 550 FOR S=0 TO NX-1
- FIRST=-1:SECOND=-1
- FOR R=0 TO NY-1
- IF TEMP(S,R)=0 THEN GOTO 580
- IF FIRST=-1 THEN FIRST=R:GOTO 580
- SECOND=R
- 580 NEXT R
- IF FIRST=-1 OR SECOND=-1 THEN GOTO 595
- 590 TEMP(S,FIRST)=POT
- IF FIRST<>SECOND THEN FIRST=FIRST+1:GOTO 590
- 595 NEXT S
- RETURN
- REM
- REM ********************************************************************
- REM
- REM PRINT THE INITIAL ALL-TRACK POT'S MATRIX
- REM
- 600 LPRINTER REM HARD COPY
- FOR R=NY-1 TO 0 STEP -1 REM FOR ALL GRIDS
- FOR S=0 TO NX-1
- PRINT TAB(10+7*S);INT(1000*IPOT(S,R))/10;"%";
- NEXT S:PRINT:PRINT
- NEXT R
- PRINT CHR$(12):CONSOLE REM CONSOLE I/O
- RETURN
- REM
- REM ************************************************************************
- REM
- REM POD INPUT ROUTINE
- REM
- REM THE FOLLOWING ROUTINE REQUIRES THE USER TO DESIGNATE BOTH THE POD AND
- REM GRID USING THE BITPAD IN SINGLE DATA POINT MODE. THE POD IS EQUAL TO THE
- REM HEIGHT OF THE DATA POINT (IN INCHES) ABOVE THE LOWER LEFT REFERENCE POINT
- REM TIMES 10. THIS ROUTINE IS EXITED BY POINTING TO A DATA POINT OUTSIDE THE
- REM UPPER OR LOWER OR RIGHT BOUNDARIES. THE POD AND GRID MAY BE DESIGNATED IN
- REM EITHER ORDER.
- REM
- 700 PRINT:PRINT "TOUCH GRID+POD,MODE 3"
- POD=-1 : X1=-1
- 710 POKE 3,3 REM BITPAD I/O
- INPUT X,Y,Z REM DATA POINT
- POKE 3,129 REM CONSOLE I/O
- IF X>BX OR Y<CY OR Y>AY THEN GOTO 800 REM EXIT
- IF X<AX THEN POD=(Y-CY)/20 ELSE X1=INT((X-AX)*TX):Y1=INT((Y-CY)*TY)
- IF POD<0 OR X1<0 THEN GOTO 710 REM NEED BOTH
- COVF(X1,Y1)=COVF(X1,Y1)+LOG(1-POD/100)
- PRINT CHR$(7);"GRID";X1+1;",";Y1+1;"WITH POD=";POD;"%"
- REM GAME ROUTINE FOLLOWS
- NUMSORTIE=NUMSORTIE+1 REM COUNT SORTIES
- IF X1<>XTARGET OR Y1<>YTARGET THEN GOTO 700 REM ON TARGET?
- IF TARGET>(1-EXP(COVF(X1,Y1))) THEN GOTO 700 REM POD BIG ENOUGH?
- PRINT "YOU FOUND HIM !!!! ON THE NUMBER";NUMSORTIE;"SORTIE"
- FOR X=1 TO 200 : PRINT CHR$(7); : NEXT X:PRINT
- GOTO 800
- REM
- REM **************************************************************************
- REM
- REM POT ADJUSTMENT ROUTINE
- REM
- 800 TPOF=0 : PRINT "WAIT"
- FOR R=0 TO NY-1 REM FOR ALL GRIDS
- FOR S=0 TO NX-1
- TPOF=TPOF+IPOT(S,R)*EXP(COVF(S,R)) REM RECALC TPOF
- NEXT S
- NEXT R
- REM
- FOR R=0 TO NY-1 REM FOR ALL GRIDS
- FOR S=0 TO NX-1
- APOT(S,R)=IPOT(S,R)*EXP(COVF(S,R))/TPOF
- NEXT S
- NEXT R
- RETURN
- REM
- REM *************************************************************************
- REM
- REM ADJUSTED POT OUTPUT ROUTINE
- REM
- 900 LPRINTER REM HARD COPY
- FOR R=NY-1 TO 0 STEP -1 REM FOR ALL GRIDS
- FOR S=0 TO NX-1
- PRINT TAB(10+7*S);INT(1000*APOT(S,R)+.5)/10;"%";
- NEXT S : PRINT:PRINT
- NEXT R
- PRINT CHR$(12):CONSOLE REM CONSOLE I/O
- RETURN
- REM
- REM *************************************************************************
- REM
- REM POD OUTPUT ROUTINE
- REM
- 1000 LPRINTER REM HARD COPY
- FOR R=NY-1 TO 0 STEP -1 REM FOR ALL GRIDS
- FOR S=0 TO NX-1
- PRINT TAB(10+7*S);INT(100*(1-EXP(COVF(S,R)))+.5);"%";
- NEXT S : PRINT:PRINT
- NEXT R
- PRINT CHR$(12):CONSOLE REM CONSOLE I/O
- RETURN
- REM
- REM *************************************************************************
- REM
- REM ROUTINE TO IDENTIFY GRID COMPOSITE POT'S
- REM IF OFF-MAP POINT IS IDENTIFIED, ROUTINE RETURNS TO COMMAND MENUE
- REM
- 1100 PRINT "SWITCH TO MODE 3"
- 1105 PRINT:PRINT "TOUCH THE PROBE TO ANY GRID"
- POKE 3,3 REM BITPAD I/O
- INPUT X,Y,Z REM DATA POINT
- POKE 3,129 REM CONSOLE I/O
- PRINT CHR$(7)
- IF X<AX OR X>BX OR Y<CY OR Y>AY THEN RETURN REM ONLY EXIT
- X=INT((X-AX)*TX) : Y=INT((Y-CY)*TY) REM WHAT GRID?
- PRINT "FOR GRID";X+1;",";Y+1
- PRINT "THE INITIAL POT WAS";INT(1000*IPOT(X,Y))/10;"%"
- PRINT "THE TOTAL POD IS";INT(100*(1-EXP(COVF(X,Y)))+.5);"%"
- PRINT "THE COMPOSITE POT IS";INT(1000*APOT(X,Y)+.5)/10;"%"
- PRINT : GOTO 1105 REM AGAIN
- RETURN
- REM
- REM ************************************************************************
- REM
- REM ROUTINE TO INCREASE IPOT( ) IN AN AREA OF EMPHASIS
- REM POT IS A MULTIPLIER IN THIS ROUTINE
- REM
- 1200 FOR R=0 TO NY-1 REM FOR ALL GRIDS
- FOR S=0 TO NX-1
- IPOT(S,R)=IPOT(S,R)*(1+TEMP(S,R)/100)
- NEXT S
- NEXT R
- RETURN
- REM
- REM *************************************************************************
- REM
- REM ROUTINE TO RETRIEVE GAME SCENNARIO FROM DISC FILE
- REM
- 2000 INPUT "WHAT IS THE NAME OF YOUR EXERCISE?";ANS$
- RANDOMIZE
- ANS$=LEFT$(ANS$,8)+".GME"
- FILE ANS$ REM SEQUENTIAL FILE
- IF END #1 THEN 2080 REM NO SUCH FILE
- TARGET=RND : TOTAL=0
- FOR R=0 TO NY-1
- FOR S=0 TO NX-1
- READ #1;TEMP(S,R)
- NEXT S
- NEXT R
- PRINT "WAIT"
- FOR R=0 TO NY-1
- FOR S=0 TO NX-1
- TOTAL=TOTAL + TEMP(S,R)
- REM IF TEMP(S,R)<>0 THEN PRINT "GRID=";S+1;",";R+1;\
- REM " VALUE=";INT(100*TEMP(S,R));\
- REM " TARGET=";INT(100*TARGET);" TOTAL=";INT(100*TOTAL)
- IF TOTAL>TARGET THEN XTARGET=S:YTARGET=R:TARGET=2
- NEXT S
- NEXT R
- TARGET=RND
- IF TARGET>.6 THEN TARGET =.4+.2*TARGET REM MAKES IT EASY
- REM PRINT"THE TARGET IS GRID";XTARGET+1;",";YTARGET+1;\
- REM "AND THE MIN POD IS";INT(100*TARGET);"%"
- GOTO 2099
- 2080 PRINT "SOMETHING WRONG HERE"
- 2099 CLOSE (1) : RETURN
- REM
- REM *************************************************************************
- REM
- REM ROUTINE TO SAVE IPOT( ) AS A GAME
- REM
- 3000 INPUT "WHAT NAME DO YOU WANT TO GIVE THIS SCENNARIO (8 CHAR MAX)?";ANS$
- ANS$=LEFT$(ANS$,8)+".GME"
- FILE ANS$
- IF END #1 THEN 3099
- FOR R=0 TO NY-1
- FOR S=0 TO NX-1
- PRINT #1;IPOT(S,R)
- NEXT S
- NEXT R
- 3099 CLOSE (1) :RETURN
- REM *************************************************************************
- REM
- REM QUIT GAME ROUTINE
- REM
- 5000 PRINT:PRINT
- PRINT"YOU QUIT AFTER";NUMSORTIE;"SORTIES WITH A SEARCH EFFECTIVENESS OF";\
- INT(1000*(1-TPOF)+.5)/10;"%"
- PRINT"THE TARGET WAS IN GRID (";XTARGET+1;",";YTARGET+1;") YOU DINGALING"
- PRINT"A COMPOSITE GRID POD OF";INT(100*TARGET);"% WOULD HAVE FOUND HIM"
- INPUT "DO YOU STILL WANT TO QUIT?";ANS$
- IF LEFT$(ANS$,1)<>"Y" THEN RETURN
- END
- REM
- GENERAL PROCEDURE TO USE THIS PROGRAM:
-
- 1. TAPE A REGULARLY GRIDDED MAP ONTO THE BITPAD
-
- 2. WHEN REQUESTED, SWITCH THE BITPAD TO MODE '3' AND TOUCH THE STYLUS TO
- THE UPPER LEFT, UPPER RIGHT, AND THEN LOWER LEFT CORNERS OF THE MAP (IN THAT
- ORDER). YOU WILL BE INFORMED IF THE MAP NEEDS STRAIGHTENING.
-
- 3. SELECT OPTION '1' (TRACK LINE). AFTER ENTERING THE ESTIMATED POT
- (PROBABILITY OF THE TARGET) ON THE CONSOLE, SELECT MODE '1' ON THE BITPAD
- AND THEN TRACE THE TRACKLINE ON THE MAP. HOLD THE PEN DOWN UNTIL THE CONSOLE
- BEEPS. IF NECESSARY, RETRACE THE TRACKLINE.
-
- 4. SELECT OPTION '2' (GENERAL AREA). FOR THIS OPTION YOU MAY ELECT TO
- EITHER OUTLINE THE BOUNDARIES OF THE AREA (AND RELY ON THE PROGRAM TO CENTER
- FILL) OR PUT A DATA POINT IN EVERY GRID. YOU SHOULD AVOID VERY IRREGULAR
- AREAS. EITHER SUBDIVIDE THESE AREAS AND ENTER THEM SEPARATELY OR USE OPTION '1'
- (WHICH DOES NOT CENTER FILL) AND PUT A DATA POINT IN EVERY AFFECTED GRID. ONCE
- AGAIN THE CONSOLE WILL BEEP AFTER 100 DATA POINTS ARE ENTERED.
-
- 5. SELECT OPTION '3' (AREA OF EMPHASIS) - IN MODE '1' TRACE AN AREA'S
- BOUNDARIES. THIS OPTION IS INTENDED TO BE USED FOR INCREASING THE POT OF A
- PORTION OF A TRACK LINE WHERE THE TRACK LINE CROSSES MOUNTAINS OR A STORM
- FRONT. A TYPICAL POT FOR THIS OPTION IS 200% TO 500%. THIS ENTRY IS A
- MULTIPLIER FOR THE EXISTING GRID POT'S AND SHOULD ONLY BE USED AFTER ALL
- TRACKS/GENERAL AREAS HAVE BEEN ENTERED. THINK OF IT AS AN AREA OF INCREASED
- DANGER.
-
- 6. SELECT OPTION '4' (ADD NEW POD). THIS OPTION IS USED TO ENTER ACTUAL
- SEARCH RESULTS IE. POD(PROBABILITY OF DETECTION). WHEN AN AREA IS SEARCHED, THE
- PROBABILITY THAT THE UNDISCOVERED TARGET STILL IS IN THAT AREA, DECREASES.
- SIMILIARLY, THE PROBABILITY THAT THE TARGET IS ELSEWHERE (IN A DIFFERENT GRID),
- INCREASES. THEREFORE THE POD IS USED TO MODIFY THE INITIAL POT AND CREATE
- THE ADJUSTED POT MATRIX.
- THE USER SHOULD SWITCH THE BITPAD TO MODE '3' AND POINT TO THE POD
- (ON THE LEFT SIDE OF THE MAP) AND THEN TO THE PARTICULAR GRID. THE CONSOLE WILL
- BEEP TO INDICATE THAT A POD/GRID PAIR HAS BEEN ENTERED. TO EXIT THIS ROUTINE,
- POINT TO A LOCATION THAT IS ABOVE, BELOW OR TO THE RIGHT OF THE MAP.
-
- 7. SELECT OPTION '5' OR '6' OR'7' - THESE OPTIONS CAUSE HARD COPY OUTPUT
- OF THE "INITIAL POT MAP","POD MAP" OR "COMPOSITE ADJUSTED POT MAP" RESPECTIVELY
- THE COMPOSITE ADJUSTED POT MAP IS DERIVED FROM THE INITIAL POT MAP WITH
- ADJUSTMENTS FOR POD'S.
-
- 8. SELECT OPTION '8' - THIS OPTION CAUSES THE POD AND INITIAL/COMPOSITE
- POT'S FOR THE GRID INDICATED, TO BE LISTED ON THE CONSOLE SCREEN. TO EXIT
- THIS ROUTINE, POINT TO AN AREA OUTSIDE THE MAP BOUNDARIES. GRID (1,1) IS AT
- THE LOWER LEFT.
-
- 9. GENERAL COMMENTS -THIS PROGRAM WORKS BEST IF THE TRACKS/AREAS HAVE BEEN
- PRE-SKETCHED ON THE MAP. IT IS SOMETIMES POSSIBLE TO CANCEL A POT TRACK LINE/
- AREA BY ENTERING A NEGATIVE POT AND THE SAME TRACK AS BEFORE. HOWEVER, STRANGE
- THINGS WILL HAPPEN IF THE EXACT TRACK IS NOT FOLLOWED.
- IN BITPAD MODE '1' (SWITCH STREAM) DATA RATES 1 THROUGH 5 ARE AVAILABLE
- THIS CORRESPONDS TO 1,2,4,8, OR 16 DATA POINTS PER SECOND. ALTERNATELY 120,60,
- 30,15 OR 8 SECONDS FOR 100 DATA POINTS. RATE '4' (16 SECONDS PER TRACK) SEEMS
- TO WORK BEST FOR TRACKS 5 TO 10 INCHES LONG.
-