10 REM +++++++++++++++++++++++++++++++++ 11 REM ! Program .... TURNABLK 12 REM ! Utg}va 2.0 81-02-21 13 REM ! av ROBERT SEIMANN 14 REM ! Copyright CREATIV COMPUTING 15 REM ! Minne 16 Kbytes 16 REM +++++++++++++++++++++++++++++++++ 17 REM ********************** 18 REM * * 19 REM * TURN A BLOCK * 20 REM * * 21 REM * VER 2.0 / 21-02-81 * 22 REM * * 23 REM * ORIGINAL CC AUG 80 * 24 REM * * 25 REM * CONVERTED TO ABC80 * 26 REM * * 27 REM * BY * 28 REM * * 29 REM * ROBERT SEIMANN (C) * 30 REM * * 31 REM ********************** 32 REM 33 ; CHR$(12%); 34 DIM V%(3%,3%),B%(3%,3%) 35 RANDOMIZE 36 FOR I%=1% TO 3% 37 FOR J%=1% TO 3% 38 READ V%(I%,J%) 39 NEXT J% 40 NEXT I% 41 DATA 1,2,1,2,3,2,1,2,1 42 ; CHR$(151%)' <,,,,,,,,,,,,,,,,,,,,,,,l' 43 ; CHR$(151%)' 5 WELCOME TO TURNABLOCK j' 44 ; CHR$(151%)' #########################' 45 H%=0% : C%=0% 46 REM INTI 47 FOR I%=1% TO 3% 48 FOR J%=1% TO 3% 49 IF V%(I%,J%)=2% THEN 52 50 B%(I%,J%)=1% 51 GOTO 53 52 B%(I%,J%)=0% 53 NEXT J% 54 NEXT I% 55 GOSUB 117 56 IF C%=0% AND H%=0% THEN ; CUR(21%,0%)'TYPE H FOR HELP.' 57 ; CUR(22%,0%)'DO YOU WANT TO MOVE FIRST (Y/N) ?'CHR$(7%); 58 GET A$ 59 IF A$='Y' THEN ; CUR(21%,0%)SPACE$(73%) : GOTO 79 60 IF A$='N' THEN ; CUR(21%,0%)SPACE$(73%) : GOTO 65 61 IF A$<>'H' THEN 55 62 GOSUB 215 63 GOSUB 232 64 GOTO 55 65 GOSUB 135 66 IF S%=0% THEN 69 67 GOSUB 155 68 GOTO 70 69 GOSUB 188 70 ; CUR(5%,25%)CHR$(135%)'MY MOVE IS';M% 71 GOSUB 200 72 GOSUB 208 73 GOSUB 117 74 IF P%<>0% THEN 79 75 ; CUR(10%,28%)CHR$(135%)'I WIN !' 76 OUT 6%,7% 77 C%=C%+1% 78 GOTO 108 79 ONERRORGOTO 79 80 IF F%=0% THEN GOSUB 117 81 ; CUR(18%,25%)SPACE$(15%) 82 ; CUR(18%,25%)CHR$(135%)'YOUR MOVE '; 83 INPUT M% 84 IF M%=0% THEN 73 85 IF M%>0% THEN 88 86 ; CUR(12%,27%)CHR$(135%)'YOU LOSE !' 87 GOTO 75 88 GOSUB 200 89 IF I9%0% THEN 65 105 ; CUR(10%,28%)CHR$(135%)'YOU WIN !' 106 OUT 6%,153% 107 H%=H%+1% 108 ; CUR(21%,5%)'ANOTHER GAME (Y/N) ?'; 109 GET A$ : ; A$ 110 ; CUR(10%,27%)SPACE$(11%) 111 ; CUR(12%,27%)SPACE$(11%) 112 IF A$='Y' THEN 46 113 IF A$<>'N' THEN 108 114 ; CUR(10%,24%)CHR$(135%)'YOU WON';H%;' GAMES' 115 ; CUR(12%,24%)CHR$(135%)'I WON';C%;' GAMES' 116 ; CUR(21%,0%); : END 117 REM SHOW BOARD 118 IF F%=0% THEN GOSUB 253 119 P%=0% 120 FOR I%=1% TO 3% 121 FOR J%=1% TO 3% 122 IF B%(I%,J%)=1% THEN 127 123 FOR R%=0% TO 2% 124 ; CUR(R%+5%*I%,6%*J%)'5' 125 NEXT R% 126 GOTO 131 127 P%=P%+1% 128 FOR R%=0% TO 2% 129 ; CUR(R%+5%*I%,6%*J%)'99991' 130 NEXT R% 131 NEXT J% 132 ; 133 NEXT I% 134 RETURN 135 REM EVALUATE NIM SUM OF BOARD 136 B1%=0% 137 B2%=0% 138 FOR I%=1% TO 3% 139 FOR J%=1% TO 3% 140 IF B%(I%,J%)=0% THEN 151 141 V1%=V%(I%,J%) 142 IF V1%=1% THEN 145 143 IF V1%=2% THEN 147 144 IF V1%=3% THEN 149 145 B1%=1%-B1% 146 GOTO 151 147 B2%=1%-B2% 148 GOTO 151 149 B1%=1%-B1% 150 B2%=1%-B2% 151 NEXT J% 152 NEXT I% 153 S%=B1%+B2% 154 RETURN 155 REM FIND WINNING MOVE 156 M%=0% 157 FOR I1%=1% TO 3% 158 FOR J1%=1% TO 3% 159 IF B%(I1%,J1%)=0% THEN 185 160 FOR I9%=I1% TO 3% 161 FOR J9%=J1% TO 3% 162 W1%=B1% 163 W2%=B2% 164 FOR I%=I1% TO I9% 165 FOR J%=J1% TO J9% 166 V1%=V%(I%,J%) 167 IF V1%=1% THEN 170 168 IF V1%=2% THEN 172 169 IF V1%=3% THEN 174 170 W1%=1%-W1% 171 GOTO 176 172 W2%=1%-W2% 173 GOTO 176 174 W1%=1%-W1% 175 W2%=1%-W2% 176 NEXT J% 177 NEXT I% 178 S%=W1%+W2% 179 IF S%<>0% THEN 183 180 IF M%=0% THEN 182 181 IF RND<.5 THEN 183 182 M%=10%*(3%*(I1%-1%)+J1%)+(3%*(I9%-1%)+J9%) 183 NEXT J9% 184 NEXT I9% 185 NEXT J1% 186 NEXT I1% 187 RETURN 188 M%=0% 189 FOR I1%=1% TO 3% 190 FOR J1%=1% TO 3% 191 IF B%(I1%,J1%)=0% THEN 197 192 IF M%=0% THEN 194 193 IF RND<.5 THEN 197 194 I9%=I1%+INT((3%-I1%+1%)*RND) 195 J9%=J1%+INT((3%-J1%+1%)*RND) 196 M%=10%*(3%*(I1%-1%)+J1%)+3%*(I9%-1%)+J9% 197 NEXT J1% 198 NEXT I1% 199 RETURN 200 REM CONVERT MOVE TO COORDINATE POINTS 201 M1%=INT(M%/10%) 202 I1%=INT((M1%-1%)/3%)+1% 203 J1%=M1%-3%*(I1%-1%) 204 M9%=M%-10%*M1% 205 I9%=INT((M9%-1%)/3%)+1% 206 J9%=M9%-3%*(I9%-1%) 207 RETURN 208 REM MAKE MOVE ON BOARD 209 FOR I%=I1% TO I9% 210 FOR J%=J1% TO J9% 211 B%(I%,J%)=1%-B%(I%,J%) 212 NEXT J% 213 NEXT I% 214 RETURN 215 REM INSTRUCTIONS 216 ; CHR$(12%) 217 ; : ; 'TURNABLOCK IS PLAYED ON A 3 BY 3 BOARD' 218 ; 'WITH 9 "OTHELLO" PIECES (2-COLOR CHIPS)' 219 ; 'BLACK IS SHOWN AS 'CHR$(151%)'91'CHR$(135%)'AND WHITE AS ""' 220 ; 221 ; 'WE TAKE TURNS FLIPPING A BLOCK OF PIECES'; 222 ; 'WHERE THE BLOCK MAY BE ANY SIZE RECTANG-LE (1x1 THROUGH 3x3) WITHIN '; 223 ; 'THE BOARD.' 224 ; 225 ; 'BUT THE LEFT UPPER CORNER OF THE BLOCK MUST BE A BLACK PIECE.' 226 ; 227 ; 'THE LAST PERSON WHOSE MOVE MAKES A BOARDWITH ALL WHITE PIECES IS THE WINNER.' 228 ; : ; 'GOOD LUCK !' 229 ; 230 ; 'HIT RETURN TO CONTINUE.' : GET A$ 231 RETURN 232 REM MOVE INSTRUCTIONS 233 ; CHR$(12%); 234 ; 'ENTER YOUR MOVE AS A 2-DIGIT NUMBER.' 235 ; 'THE FIRST DIGIT POINTS TO THE LEFT UPPERCORNER OF THE BLOCK YOU WISH TO FILP.' 236 ; '(THAT SQUARE MUST HAVE A BLACK PIECE)' 237 ; 'THE SECOND DIGIT POINTS TO THE OPPOSITE CORNER OF THE BLOCK.' 238 ; 239 ; 'THE BOARD IS NUMBERED THIS WAY:' 240 ; 241 ; ' 1 2 3' 242 ; ' 4 5 6' 243 ; ' 7 8 9' 244 ; 245 ; 'FOR EXAMPLE :' : ; : ; ' MOVE 11 WOULD FLIP CELL 1' 246 ; ' MOVE 49 WOULD FLIP CELLS 456789' 247 ; ' MOVE 26 WOULD FLIP CELLS 2356' 248 ; 249 ; 'ENTER A NEGATIVE NUMBER TO GIVE UP IN THE MIDDLE OF A GAME.' 250 F%=0% : ; 251 ; 'HIT RETURN TO CONTINUE.' : GET A$ 252 ; CHR$(12%) : RETURN 253 REM GRAPHIC SUB 254 FOR R%=4% TO 19% 255 ; CUR(R%,0%);CHR$(151%); : ; 256 NEXT R% 257 FOR R%=4% TO 18% 258 FOR K%=5% TO 23% STEP 6% 259 IF R%=4% AND K%=8% THEN ; CUR(R%,K%)'7' : GOTO 261 260 ; CUR(R%,K%)'5' 261 NEXT K% 262 NEXT R% 263 ; CUR(4%,5%)'7#####7#####7#####' 264 ; CUR(9%,5%)"7#####7#####7#####" 265 ; CUR(14%,5%)'7#####7#####7#####' 266 ; CUR(19%,5%)'##################!' 267 F%=1% 268 RETURN