1
0
mirror of https://github.com/PDP-10/its.git synced 2026-03-20 16:38:16 +00:00

Tic-Tac-Toe game ported to LLOGO

This commit is contained in:
Alexey-Slyusar
2019-03-17 22:26:48 +03:00
parent 3be4f078f2
commit 04dea17890

62
src/bh/ttt.logo Normal file
View File

@@ -0,0 +1,62 @@
;;; Tic-Tac-Toe Game written by Dr. Brian Harvey
;;; Adapted to PDP-10/ITS LLOGO by Alexey Slyusar
;;COMPUTE PROGRAM'S MOVES
TO PICKMOVE :TRIPLES
10 LOCAL 'TRY
20 MAKE 'TRY FIND.WIN :ME
30 IF NOT EMPTYP :TRY OP :TRY
40 MAKE 'TRY FIND.WIN :YOU
50 IF NOT EMPTYP :TRY OP :TRY
60 MAKE 'TRY FIND.FORK
70 IF NOT EMPTYP :TRY OP :TRY
80 MAKE 'TRY FIND.ADVANCE
90 IF NOT EMPTYP :TRY OP :TRY
100 OP FIND [MEMBERP ? (LISTARRAY 'POSITION)] [5 1 3 7 9 2 4 6 8]
END
TO FIND.WIN :WHO
10 OP FILTER 'NUMBERP FIND 'WIN.NOWP :TRIPLES
END
TO WIN.NOWP :TRIPLE
10 OP EQUALP (FILTER [NOT NUMBERP ?] :TRIPLE) (WORD :WHO :WHO)
END
TO FIND.FORK
10 LOCAL 'SINGLES
20 MAKE 'SINGLES SINGLES :ME
30 IF EMPTYP :SINGLES OP []
40 OP REPEATED.NUMBER REDUCE 'WORD :SINGLES
END
TO SINGLES :WHO
10 OP FILTER [SINGLEP ? :WHO] :TRIPLES
END
TO SINGLEP :TRIPLE :WOH
10 OP EQUALP (FILTER [NOT NUMBERP ?] :TRIPLE) :WHO
END
TO REPEATED.NUMBER :SQUARES
10 OP FIND [MEMBER ? ?REST] FILTER 'NUMBERP :SQUARES
END
TO FIND.ADVANCE
10 OP BEST.MOVE FILTER 'NUMBERP FIND [SINGLEP ? :ME] :TRIPLES
END
TO BEST.MOVE :MY.SINGLE
10 LOCAL 'YOUR.SINGLES
20 IF EMPTYP :MY.SINGLE OP []
30 MAKE 'YOUR.SINGLES SINGLES :YOU
40 IF EMPTYP :YOUR.SINGLES OP FIRST :MY.SINGLE
50 TEST (COUNT FILTER [? = FIRST :MY.SINGLE] REDUCE 'WORD :YOUR.SINGLES) > 1
60 OP FIRST :MY.SINGLE
70 OP LAST :MY.SINGLE
END
TO MAKE.TRIPLES
10 OP MAP 'SUBSTITUTE.TRIPE [123 456 789 147 258 369 159 357]
END