File HEX.BA (BASIC source file)

Directory of image this file is from
This file as a plain text file

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><POSITION><LIST OF MOVES>
902 REM IN<POSITION>, -=BLANK, *=COMPUTER'S PAWN, O=PLAYER'S PAWN
904 REM <LIST OF MOVES> IS <- MOVE FROM><- MOVE TO><LIST OF MOVES>
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



Feel free to contact me, David Gesswein djg@pdp8online.com with any questions, comments on the web site, or if you have related equipment, documentation, software etc. you are willing to part with.  I am interested in anything PDP-8 related, computers, peripherals used with them, DEC or third party, or documentation. 

PDP-8 Home Page   PDP-8 Site Map   PDP-8 Site Search