From 04dea17890d8b1cff1af8265d57c9c114c45f319 Mon Sep 17 00:00:00 2001 From: Alexey-Slyusar Date: Sun, 17 Mar 2019 22:26:48 +0300 Subject: [PATCH] Tic-Tac-Toe game ported to LLOGO --- src/bh/ttt.logo | 62 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 src/bh/ttt.logo diff --git a/src/bh/ttt.logo b/src/bh/ttt.logo new file mode 100644 index 00000000..6a3be211 --- /dev/null +++ b/src/bh/ttt.logo @@ -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