10 REM +++++++++++++++++++++++++++++++++ 11 REM ! Program .... FMG 12 REM ! Utg}va 2 1981-05-17 13 REM ! av (c) Ivan Myrvold 14 REM ! {ndrat av Kalle Lindstr|m 15 REM ! Minne 16 Kbytes 16 REM ! Ins{nt av 837 (Kalle Lindstr|m) 17 REM +++++++++++++++++++++++++++++++++ 18 REM ETT SPEL SOM L[R AV SINA FEL 19 ; CHR$(12%); 20 FOR ]6%=0% TO 7% 21 ; CUR(]6%,0%)CHR$(151%); 22 NEXT ]6% 23 ; CUR(0%,1%)"9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9" : FOR C%=1% TO 6% 24 ; CUR(C%,1%)"f9f9f9f9 9f9f9f9f" : NEXT C% 25 ; CUR(7%,1%)"f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f" 26 RESTORE 260 27 READ R5%,K5% : SETDOT R5%,K5% 28 ONERRORGOTO 30 29 GOTO 27 30 ; : ; "\NSKAR DU SPELREGLERNA?"; : GET ]$ : IF ]$="N" OR ]$="n" 49 31 ; CUR(10%,0%)"FMG st}r f|r French Military Game." 32 ; "Detta {r ett strategiskt spel, d{r det" : ; "g{ller att f}nga motst}ndaren s} att" 33 ; "han inte kan flytta sin bricka." 34 ; "Till detta har du till att disponera tre"; : ; "soldater som du kan flytta." 35 ; "Du f}r flytta fram}t och }t h|ger och v{nster, men inte bak}t. Motst}ndaren f}r d{remot flytta "; 36 ; "i alla riktningar." 37 ; "Motst}ndaren har vunnit n{r han har" : ; "n}tt punkt 1 och n{r du har flyttat" 38 ; "|ver 20 g}nger." 39 INPUTLINE ]5$ 40 FOR Q%=10% TO 21% : ; CUR(Q%,0%)SPACE$(40%) 41 NEXT Q% 42 ; CUR(10%,0%)"Spelplanen {r numrerad s} h{r:" 43 ; CUR(12%,20%)"11" 44 ; CUR(14%,17%)"8 9 10" 45 ; CUR(16%,17%)"5 6 7" 46 ; CUR(18%,17%)"2 3 4" 47 ; CUR(20%,21%)"1" 48 ; : ; "Lycka till!"; : INPUTLINE ]$ 49 ; CHR$(12%); 50 GOSUB 202 51 RESTORE 52 DEFFNT%(X%)=2%^(X%-1%) 53 DIM L%(11%,11%),S%(165%),R%(30%,2%),A%(165%,11%),W%(3%) 54 I%=1% 55 FOR L%=1% TO 9% 56 L1%=FNT%(L%) 57 FOR M%=L%+1% TO 10% 58 M1%=FNT%(M%) 59 FOR R%=M%+1% TO 11% 60 S%(I%)=L1%+M1%+FNT%(R%) 61 I%=I%+1% 62 NEXT R% 63 NEXT M% 64 NEXT L% 65 REM LOAD UP LEARNING CURVE 66 REM #####LOAD DATA #5,34,A########## 67 FOR I%=1% TO 30% 68 FOR J%=1% TO 2% 69 R%(I%,J%)=0% 70 NEXT J% 71 NEXT I% 72 FOR I%=1% TO 11% 73 FOR J%=1% TO 11% 74 READ L%(I%,J%) 75 NEXT J% 76 NEXT I% 77 REM L%(I%,J%)=0% MEANS MOVE I% TO J% NOT LEGAL 78 REM ******************************** 79 REM L%(I%,J%)=1% MEANS MOVE I% TO J% LEGAL BLACK ONLY 80 REM ******************************** 81 REM L%(I%,J%)=2% MEANS MOVE I% TO J% LEGAL BOTH WHT. AND BLK. 82 REM ******************************** 83 B%=6% 84 W%(1%)=1% 85 W%(2%)=2% 86 W%(3%)=4% 87 I0%=1% 88 GOSUB 155 89 GOSUB 224 : GOSUB 225 : GOSUB 227 : GOSUB 240 90 REM MAIN PROGRAM LOOP 91 ; CUR(20%,0%)SPACE$(40%) : ; CUR(20%,0%)"Ditt drag"; 92 ONERRORGOTO 92 93 INPUT X%,Y% : ONERRORGOTO 94 94 ; CUR(21%,0%)SPACE$(40%) : ; CUR(22%,0%)SPACE$(39%) 95 ONERRORGOTO 121 96 REM WAS IT A LEGAL MOVE ? 97 GOSUB 135 98 IF L2%=1% 101 99 ; CUR(22%,0%)"IDIOT!!!! Pr|va igen."SPACE$(18%) 100 GOTO 91 101 REM LEGAL MOVE,WHAT IS WHITE POSITION INDEX (S3%)? 102 ON Y% GOSUB 224,225,226,227,228,229,230,231,232,233,234 103 ON X% GOSUB 246,247,248,249,250,251,252,253,254,255,256 104 GOSUB 155 105 IF I0%<=19% 109 106 ; CUR(21%,0%)"Det var 20 drag, och du har {nnu inte lyckats m}nga mig." : FOR [9%=0% TO 10000% 107 NEXT [9% : ; CUR(21%,0%)SPACE$(40%) : ; CUR(22%,0%)SPACE$(39%) : GOTO 121 108 REM what is blacks best move, if any 109 GOSUB 161 110 IF M4%=0% 124 111 REM MACHINE MAKES MOVE : 112 ; CUR(22%,0%)"Jag flyttar till"M4%SPACE$(20%) 113 ON B% GOSUB 246,247,248,249,250,251,252,253,254,255,256 114 ON M4% GOSUB 235,236,237,238,239,240,241,242,243,244,245 115 R%(I0%,1%)=S3% 116 R%(I0%,2%)=M4% 117 B%=M4% 118 I0=I0%+1% 119 IF B%<>1% 90 120 REM HERE ONLY IF MACHINE WINS : 121 ; CUR(21%,0%)"Jag vann!!!"SPACE$(28%) 122 W%=1% 123 GOTO 126 124 ; CUR(21%,0%)"Jag f|rlorade..."SPACE$(24%) 125 W%=-1% 126 REM UPDATE ARRAY A% 127 GOSUB 175 128 ; CUR(22%,0%)SPACE$(39%) : ; CUR(22%,0%)"\nskar du att spela en g}ng till"; 129 INPUT Z$ 130 ; CUR(21%,0%)SPACE$(40%) : ; CUR(22%,0%)SPACE$(39%) 131 IF Z$="J" OR Z$="JA" OR Z$="j" OR Z$="ja" 257 132 ONERRORGOTO 129 133 REM ####### STORE DATA #5,34,A ##### 134 STOP 135 REM SUBR. TO CHECK WHITES MOVE FOR LEGALITY 136 REM A MOVE IS LEGAL IF STARTING POSITION HAS A WHITE PIECES ON 137 L2%=-1% 138 FOR I2%=1% TO 3% 139 J2%=I2% 140 IF W%(I2%)=X% 144 141 NEXT I2% 142 REM NO WHITE PIECE AT X% 143 GOTO 154 144 REM IF BLACK OCCUPIES Y% THEN ILLEGAL 145 IF B%=Y% 154 146 REM ILLEGAL IF WHITE PIECE ALREADY AT Y% 147 FOR I2%=1% TO 3% 148 IF W%(I2%)=Y% 154 149 NEXT I2% 150 IF L%(X%,Y%)<>2% 154 151 REM LEGAL MOVE FOR WHITE 152 W%(J2%)=Y% 153 L2%=1% 154 RETURN 155 REM SUB. TO CALCULATE NEW WHITE POSITION NUMBER 156 A3%=FNT%(W%(1%))+FNT%(W%(2%))+FNT%(W%(3%)) 157 FOR S3%=1% TO 165% 158 IF S%(S3%)=A3% 160 159 NEXT S3% 160 RETURN 161 REM PICK BLACKS BEST MOVE 162 M4%=0% 163 FOR I4%=1% TO 11% 164 IF L%(B%,I4%)=0% 173 165 REM ADJACENT MOVE FOUND, OCCUPIED BY WHITE? 166 FOR J4%=1% TO 3% 167 IF W%(J4%)=I4% 173 168 NEXT J4% 169 IF M4%=0% 172 170 IF A%(S3%,M4%)>=A%(S3%,I4%) 173 171 REM NEW BEST MOVE 172 M4%=I4% 173 NEXT I4% 174 RETURN 175 REM UPDATE AT GAME END 176 FOR I6%=1% TO I0%-1% 177 S%=R%(I6%,1%) 178 M%=R%(I6%,2%) 179 A%(S%,M%)=A%(S%,M%)+W% 180 NEXT I6% 181 RETURN 182 REM DATA FOR L% ARRAY 183 DATA 0,2,2,2,0,0,0,0,0,0,0 184 DATA 1,0,2,0,2,2,0,0,0,0,0 185 DATA 1,2,0,2,0,2,0,0,0,0,0 186 DATA 1,0,2,0,0,2,2,0,0,0,0 187 DATA 0,1,0,0,0,2,0,2,0,0,0 188 DATA 0,1,1,1,2,0,2,2,2,2,0 189 DATA 0,0,0,1,0,2,0,0,0,2,0 190 DATA 0,0,0,0,1,1,0,0,2,0,2 191 DATA 0,0,0,0,0,1,0,2,0,2,2 192 DATA 0,0,0,0,0,1,1,0,2,0,2 193 DATA 0,0,0,0,0,0,0,2,2,2,0 194 DATA 9,40,9,41,10,40,10,41,11,40,11,41,21,27,21,28,21,40,21,41,21,53,21,54,23,48,11,33,10,34,9,35 195 DATA 22,27,22,28,22,40,22,41,22,53,22,54,9,46,10,47,11,48,47,46,46,47,45,48,47,35,46,34,45,33 196 DATA 23,27,23,28,23,40,23,41,23,53,23,54 197 DATA 16,33,16,34,16,35,16,46,16,47,16,48,28,33,28,34,28,35,28,46,28,47,28,48 198 DATA 33,27,33,28,33,40,33,41,33,53,33,54,34,27,34,28,34,40,34,41,34,53,34,54,35,27,35,28,35,40,35,41,35,53,35,54 199 DATA 40,33,40,34,40,35,40,46,40,47,40,48,45,40,45,41,46,40,46,41,47,40,47,41 200 DATA 35,33,35,48,34,34,34,47,33,35,33,46,23,35,23,46,22,34,22,47,21,33,21,46,21,35,23,33,33,33,35,35,33,48,35,46 201 DATA 21,48 202 FOR \%=0% TO 18% 203 ; CUR(\%,0%)CHR$(151%); 204 NEXT \% 205 FOR K1%=36% TO 45% 206 SETDOT 0%,K1% : SETDOT 8%,K1% : SETDOT 48%,K1% : SETDOT 56%,K1% 207 NEXT K1% 208 FOR K1%=23% TO 58% 209 IF K1%=33% OR K1%=34% OR K1%=35% OR K1%=46% OR K1%=47% OR K1%=48% 211 210 SETDOT 12%,K1% : SETDOT 20%,K1% : SETDOT 24%,K1% : SETDOT 32%,K1% : SETDOT 36%,K1% : SETDOT 44%,K1% 211 NEXT K1% 212 FOR R1%=0% TO 56% 213 IF R1%=9% OR R1%=10% OR R1%=11% OR R1%=21% OR R1%=22% OR R1%=23% OR R1%=33% OR R1%=34% OR R1%=35% 217 214 IF R1%=45% OR R1%=46% OR R1%=47% 217 215 SETDOT R1%,36% : SETDOT R1%,45% 216 IF R1%>11% IF R1%<45% SETDOT R1%,23% : SETDOT R1%,32% : SETDOT R1%,49% : SETDOT R1%,58% 217 NEXT R1% 218 RESTORE 194 219 READ R1%,K1% 220 SETDOT R1%,K1% 221 IF R1%=21% AND K1%=48% THEN 223 222 GOTO 219 223 RETURN 224 ; CUR(17%,20%)"" : RETURN 225 ; CUR(13%,13%)"" : RETURN 226 ; CUR(13%,20%)"" : RETURN 227 ; CUR(13%,26%)"" : RETURN 228 ; CUR(9%,13%)"" : RETURN 229 ; CUR(9%,20%)"" : RETURN 230 ; CUR(9%,26%)"" : RETURN 231 ; CUR(5%,13%)"" : RETURN 232 ; CUR(5%,20%)"" : RETURN 233 ; CUR(5%,26%)"" : RETURN 234 ; CUR(1%,20%)"" : RETURN 235 SETDOT 53%,39% : SETDOT 53%,41% : SETDOT 52%,40% : SETDOT 51%,39% : SETDOT 51%,41% : RETURN 236 SETDOT 41%,26% : SETDOT 41%,28% : SETDOT 40%,27% : SETDOT 39%,26% : SETDOT 39%,28% : RETURN 237 SETDOT 41%,39% : SETDOT 41%,41% : SETDOT 40%,40% : SETDOT 39%,39% : SETDOT 39%,41% : RETURN 238 SETDOT 41%,52% : SETDOT 41%,54% : SETDOT 40%,53% : SETDOT 39%,52% : SETDOT 39%,54% : RETURN 239 SETDOT 29%,26% : SETDOT 29%,28% : SETDOT 28%,27% : SETDOT 27%,26% : SETDOT 27%,28% : RETURN 240 SETDOT 29%,39% : SETDOT 29%,41% : SETDOT 28%,40% : SETDOT 27%,39% : SETDOT 27%,41% : RETURN 241 SETDOT 29%,52% : SETDOT 29%,54% : SETDOT 28%,53% : SETDOT 27%,52% : SETDOT 27%,54% : RETURN 242 SETDOT 17%,26% : SETDOT 17%,28% : SETDOT 16%,27% : SETDOT 15%,26% : SETDOT 15%,28% : RETURN 243 SETDOT 17%,39% : SETDOT 17%,41% : SETDOT 16%,40% : SETDOT 15%,39% : SETDOT 15%,41% : RETURN 244 SETDOT 17%,52% : SETDOT 17%,54% : SETDOT 16%,53% : SETDOT 15%,52% : SETDOT 15%,54% : RETURN 245 SETDOT 5%,39% : SETDOT 5%,41% : SETDOT 4%,40% : SETDOT 3%,39% : SETDOT 3%,41% : RETURN 246 ; CUR(17%,19%)" " : RETURN 247 ; CUR(13%,13%)" " : RETURN 248 ; CUR(13%,19%)" " : RETURN 249 ; CUR(13%,26%)" " : RETURN 250 ; CUR(9%,13%)" " : RETURN 251 ; CUR(9%,19%)" " : RETURN 252 ; CUR(9%,26%)" " : RETURN 253 ; CUR(5%,13%)" " : RETURN 254 ; CUR(5%,19%)" " : RETURN 255 ; CUR(5%,26%)" " : RETURN 256 ; CUR(1%,19%)" " : RETURN 257 FOR ]5%=1% TO 11% 258 ON ]5% GOSUB 246,247,248,249,250,251,252,253,254,255,256 259 NEXT ]5% : GOTO 83 260 DATA 6,28,6,29,6,30,6,31,6,32,6,36,6,37,6,38,6,39,6,41,6,42,6,43,6,44,6,48,6,49,6,50,6,51,6,52,6,53 261 DATA 7,28,7,29,7,30,7,31,7,32,7,36,7,37,7,38,7,39,7,41,7,42,7,43,7,44,7,48,7,49,7,50,7,51,7,52,7,53 262 DATA 8,28,8,29,8,36,8,37,8,39,8,41,8,43,8,44,8,48,8,49,8,52,8,53 263 DATA 9,28,9,29,9,36,9,37,9,39,9,41,9,43,9,44,9,48,9,49 264 DATA 10,28,10,29,10,30,10,31,10,32,10,36,10,37,10,39,10,40,10,41,10,43,10,44,10,48,10,49,10,51,10,52,10,53 265 DATA 11,28,11,29,11,36,11,37,11,43,11,44,11,48,11,49,11,52,11,53 266 DATA 12,28,12,29,12,36,12,37,12,43,12,44,12,48,12,49,12,52,12,53 267 DATA 13,28,13,29,13,36,13,37,13,43,13,44,13,48,13,49,13,52,13,53 268 DATA 14,28,14,29,14,36,14,37,14,43,14,44,14,48,14,49,14,50,14,51,14,52,14,53 269 DATA 15,28,15,29,15,36,15,37,15,43,15,44,15,48,15,49,15,50,15,51,15,52,15,53