1 REM BY JEFF DALTON, CLASS OF '74, NORTHFIELD MOUNT HERMON SCHOOL 2 REM THIS PROGRAM PLAYS THE GAME 'HEXAPAWN' BY A METHOD OUTLINED IN 3 REM 'MATHEMATICAL GAMES' IN MARCH 1962 SCIENTIFIC AMERICAN. 4 REM THE PROGRAM LEARNS BY ELIMINATION OF BAD MOVES. ALL POSITIONS 5 REM ENCOUNTERED BY THE PROGRAM AND THE ACCEPTABLE MOVES FROM THEM 6 REM ARE STORED IN P$(I) 7 REM WHEN THE PROGRAM ENCOUNTERS AN UNFAMILIAR POSITION, THE POSITION 8 REM AND ALL LEGAL MOVES FROM IT ARE ADDED TO THE LIST. 9 REM IF THE PROGRAM LOSES A GAME,IT ERASES THE MOVE THAT LED TO DEFEAT. 10 REM IF IT HITS A POSITION FROM WHICH ALL MOVES HAVE BEEN DELETED 11 REM ( THEY ALL LED TO DEFEAT ), IT ERASES THE MOVE THAT GOT 12 REM IT HERE AND RESIGNS. 14 REMARKABLY TRANSLATED TO OS8 BASIC BY KAY R. FISHER ...DEC 15 PRINT "INSTRUCTIONS";\INPUT C$\IF SEG$(C$,1,1)<>"Y" THEN 110 20 PRINT\PRINT" ","THIS PROGRAM PLAYS THE GAME OF HEXAPAWN." 21 PRINT"HEXAPAWN IS PLAYED WITH CHESS PAWNS ON A 3 BY 3 BOARD. THE PAWNS ARE" 22 PRINT"MOVED AS IN CHESS - ONE SPACE FORWORD TO AN EMPTY SPACE OR ONE SPACE" 30 PRINT"FORWARD AND DIAGONALLY TO CAPTURE AN OPPOSING MAN."\PRINT 31PRINTTAB(9);"ON THE BOARD, YOUR PAWNS ARE 'O', THE COMPUTERS PAWNS ARE '*'" 32 PRINT "AND EMPTY SQUARES ARE '-'. TO ENTER A MOVE, TYPE THE NUMBER OF THE" 40 PRINT "SQUARE YOU WILL MOVE FROM FOLLOWED BY THE NUMBER OF THE SQUARE" 41 PRINT "YOU WILL MOVE TO. (THE NUMBERS ARE SEPARATED BY A COMA.)" 50 PRINT" THE PROGRAM STARTS A SERIES OF GAMES KNOWING ONLY WHEN THE" 51 PRINT"GAME IS WON (A DRAW IS IMPOSSIBLE) AND HOW TO MOVE. IT HAS NO" 52 PRINT "STRATEGY AT FIRST AND JUST MOVES RANDOMLY, HOWEVER, IT LEARNS" 60 PRINT "FROM EACH GAME. THUS, DEFEATING IT BECOMES MORE AND MORE" 61 PRINT "DIFFICULT. ALSO, TO HELP OFFSET YOUR INITIAL ADVANTAGE, YOU WILL" 62 PRINT "NOT BE TOLD HOW TO WIN THE GAME BUT MUST LEARN THIS BY PLAYING" 110 DIM P$(50,63),P$(9) 111 DIM C$(50) 112 RANDOMIZE 114 Q=0 116 PRINT "SINCE I'M A GOOD SPORT, YOU'LL ALWAYS GO FIRST" 120 P=0 122 P$="***---OOO" 124 PRINT 126 PRINT "NUMBERING" 128 PRINT "123" 130 PRINT "456" 132 PRINT "789" 134 PRINT 190 D=-1 192 Q$="O" 194 GOSUB 2000 196 IF M$<>"" THEN 200 198 PRINT "YOU CAN'T MOVE. I WIN."\GOTO 510 200 PRINT 202 PRINT "BOARD" 204 PRINT SEG$(P$,1,3) 206 PRINT SEG$(P$,4,6) 208 PRINT SEG$(P$,7,9)\PRINT 210 PRINT "WHAT IS YOUR MOVE" 212 INPUT A,B 214 GOTO 3010 230 C1$=SEG$(P$,1,A-1)&"-"&SEG$(P$,A+1,9) 232 P$=SEG$(C1$,1,B-1)&"O"&SEG$(C1$,B+1,9) 234 IF POS(P$,"*",1)=0 GOTO 238 236 IF POS(P$,"O",1)<4 GOTO 238 237 GOTO 300 238 PRINT "YOU WIN."\GOTO 500 300 REM COMPUTER'S MOVE 302 P=P+2 310 FOR C=1 TO Q 311 C$=P$(C) 312 IF VAL(SEG$(C$,1,1))<>P GOTO 320 314 IF SEG$(C$,2,10)<>P$ GOTO 320 316 M$=SEG$(C$,11,99) 318 GOTO 400 320 NEXT C 322 Q$="*"\D=1\GOSUB 2000 324 C=Q 326 IF M$<>"" GOTO 400 328 PRINT "I CAN'T MOVE, YOU WIN."\GOTO 500 400 IF M$<>"" GOTO 410 405 PRINT "I RESIGN."\GOTO 500 410 K$=SEG$(M$,1,2) 412 M$=SEG$(M$,3,99) 414 IF RND(0)=<.333333 GOTO 420 416 IF M$<>"" GOTO 410 420 K=C 422 A=VAL(SEG$(K$,1,1)) 424 B=VAL(SEG$(K$,2,99)) 426 C1$=SEG$(P$,1,A-1)&"-"&SEG$(P$,A+1,9) 428 P$=SEG$(C1$,1,B-1)&"*"&SEG$(C1$,B+1,9) 430 IF POS(P$,"O",1)=0 GOTO 438 432 IF POS(P$,"*",7)>6 GOTO 438 434 GOTO 440 438 PRINT "I WIN."\GOTO 510 440 PRINT "I MOVE FROM";A;"TO";B\GOTO 190 500 W2=W2+1 502 I=POS(P$(K),K$,11) 503 IF I<>1 GOTO 520 504 P$(K)=SEG$(P$(K),1,I-1)&SEG$(P$(K),I+2,99) 506 GOTO 520 510 W1=W1+1 520 PRINT\PRINT "BOARD:" 522 PRINT SEG$(P$,1,3) 524 PRINT SEG$(P$,4,6) 526 PRINT SEG$(P$,7,9)\PRINT 528 PRINT "I HAVE WON";W1;"AND YOU HAVE WON";W2; 529 PRINT "OF";W1+W2;"GAMES" 530 PRINT "ANOTHER GAME";\INPUT C$ 532 C$=SEG$(C$,1,1) 534 IF C$="N" THEN 9999 536 IF C$="Y" GOTO 120 538 PRINT "PLEASE ANSWER YES OR NO!" 540 GOTO 530 900 REM DATA**= <- OF MOVE IN GAME> 902 REM IN, -=BLANK, *=COMPUTER'S PAWN, O=PLAYER'S PAWN 904 REM IS <- MOVE FROM><- MOVE TO> 2000 M$="" 2010 FOR J=1 TO 9 2012 IF SEG$(P$,J,J)<>Q$ THEN 2050 2015 T=J+D*3 2017 IF T<1 THEN 2025 2019 IF T>9 THEN 2025 2020 IF SEG$(P$,T,T)<>"-" THEN 2025 2023 M$=M$&STR$(J)&STR$(T) 2025 T=J+D*2\IF T<1 GOTO 2035\IF T>9 GOTO 2035 2026 IF D<>1 GOTO 2028\IF J=1 GOTO 2035 2027 IF J=4 GOTO 2035\IF J=7 GOTO 2035 2028 IF D<>-1 GOTO 2030\IF J=3 GOTO 2035 2029 IF J=6 GOTO 2035\IF J=9 GOTO 2035 2030 IF POS(Q$&"-",SEG$(P$,T,T),1)<>0 THEN 2035 2032 M$=M$&STR$(J)&STR$(T) 2035 T=J+D*4 2037 IF T<1 GOTO 2050\IF T>9 GOTO 2050 2038 IF J=3 GOTO 2050\IF J=7 GOTO 2050 2040 IF POS(Q$&"-",SEG$(P$,T,T),1)<>0 THEN 2050 2045 M$=M$&STR$(J)&STR$(T) 2050 NEXT J 2052 IF D<>1 GOTO 2060\IF M$="" GOTO 2060 2054 Q=Q+1 2056 P$(Q)=STR$(P)&P$&M$ 2060 RETURN 3000 REMARKABLE ROUTINE TO SIMULATE ILLEGAL MOVE SCAN 3010 IF A<1 GOTO 3200 3020 IF A>9 GOTO 3200 3030 IF A<>INT(A) GOTO 3200 3040 IF B<1 GOTO 3200 3050 IF B>9 GOTO 3200 3060 IF B<>INT(B) GOTO 3200 3070 IF POS(M$,STR$(A),1)=0 GOTO 3200 3080 IF POS(M$,STR$(B),1)=0 GOTO 3200 3100 GOTO 230 3200 PRINT "ILLEGAL MOVE" 3210 GOTO 210 9999 END