1
0
mirror of https://github.com/PDP-10/its.git synced 2026-03-24 17:36:15 +00:00

Tic-Tac-Toe game ported to LLOGO v 0.001

This commit is contained in:
Alexey-Slyusar
2019-05-12 18:24:04 +04:00
parent 8936d9039a
commit 19f312f07f

View File

@@ -1,49 +1,109 @@
;;; Tic-Tac-Toe Game written by Dr. Brian Harvey
;;; Adapted to PDP-10/ITS LLOGO by Alexey Slyusar
;; version 0.01
;; OVERALL ORCHESTRATION
; debugged code
TO TTT
10 LOCAL 'ME
20 LOCAL 'YOU
30 LOCAL 'POSITION
40 DRAW.BOARD
50 INIT
60 IF ALREADY.WONP :ME [PRINT [I WIN!] STOP]
70 IF TIEDP [PRINT [TIE GAME!] STOP]
80 YOUPLAY GETMOVE
90 IF ALREADY.WONP :YOU [PRINT [YOU WIN!] STOP]
100 IF TIEDP [PRINT [TIE GAME!] STOP]
110 MEPLAY GETMOVE
30 INIT
40 IF ALREADY.WONP :ME PRINT [$I WIN!$] STOP
50 IF TIEDP PRINT [$TIE GAME!$] STOP
60 YOUPLAY GETMOVE
70 IF ALREADY.WONP :YOU PRINT [$YOU WIN!$] STOP
80 IF TIEDP PRINT [$TIE GAME!$] STOP
90 MEPLAY GETMOVE
100 GO 40
END
TO MAKE.TRIPLES
10 OP MAP "SUBSTITUTE.TRIPLE [123 456 789 147 258 369 159 357]
10 OP MAP 'SUBSTITUTE.TRIPLE [123 456 789 147 258 369 159 357]
END
TO SUBSTITUTE.TRIPLE :COMBINATION
10 OP MAP [ITEM ? :POSITION] :COMBINATION
10 OP MAP [SUBSTITUTE.TRIPLE.HPROC ?] :COMBINATION
END
TO SUBSTITUTE.TRIPLE.HPROC :I
10 OP ITEM :I LISTARRAY 'POSITION
END
TO ALREADY.WONP :PLAYER
10 OP MEMBERP (WORD :PLAYER :PLAYER :PLAYER) (MAKE.TRIPLES)
10 OP MEMBERP (WORD :PLAYER :PLAYER :PLAYER)(MAKE.TRIPLES)
END
TO TIEDP
10 OP NOT REDUCE 'OR MAP.SE 'NUMBERP LISTARRAY 'POSITION
10 OP NOT REDUCE 'OR MAP 'NUMBERP LISTARRAY 'POSITION
END
TO YOUPLAY :SQUARE
10 DRAW :YOU :SQUARE
20 SETITEM :SQUARE :POSITION :YOU
10 (STORE (POSITION :SQUARE) :YOU)
END
;YOUPLAY DEFINED
TO MEPLAY :SQUARE
10 DRAW :ME :SQUARE
20 SETITEM :SQUARE :POSITION :YOU
10 (STORE (POSITION :SQUARE) :ME)
END
;MEPLAY DEFINED
;;COMPUTE PROGRAM'S MOVES
;; INITIALIZATION
TO INIT
10 (ARRAY POSITION T 9)
20 (FILLARRAY 'POSITION [1 2 3 4 5 6 7 8 9])
30 PRINT [$DO YOU WANT TO PLAY FIRST (X)$]
40 PRINT [$OR SECOND (O)? TYPE X OR O:$]
45 CR
50 CHOOSE
60 PRINT [$FOR EACH MOVE, TYPE A DIGIT 1-9.$]
END
;INIT DEFINED
TO CHOOSE
10 LOCAL 'SIDE
20 MAKE 'SIDE (READCH)
;30 PRINT :SIDE
40 IF EQUAL :SIDE 'X CHOOSEX STOP
50 IF EQUAL :SIDE 'O CHOOSEO STOP
60 PRINT [$HUH? TYPE X OR O:$]
70 GO 20
END
;CHOOSE DEFINED
TO CHOOSEO
10 MAKE 'ME 'X
20 MAKE 'YOU 'O
END
;CHOOSEO DEFINED
TO CHOOSEX
10 MAKE 'ME 'O
20 MAKE 'YOU 'X
END
;CHOOSEX DEFINED
;; GET OPPONENTS MOVES
TO GETMOVE
10 LOCAL 'SQUARE
20 TYPE [$YOUR MOVE:$]
30 MAKE 'SQUARE READCH
40 PRINT :SQUARE
50 IF NUMBERP :SQUARE IF AND (:SQUARE > 0)(:SQUARE < 10) IF FREEP :SQUARE OP :S!
QUARE
60 PRINT [$NOT A VALID MOVE.$]
70 GO 20
END
;GETMOVE DEFINED
TO FREEP :SQUARE
10 OP NUMBERP ITEM :SQUARE (LISTARRAY 'POSITION)
END
;FREEP DEFINED
;;COMPUTE PROGRAMS MOVES
; not debugged yet section
TO PICKMOVE :TRIPLES
10 LOCAL 'TRY
@@ -99,6 +159,5 @@ TO BEST.MOVE :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
;; LOAD PROCEDURES FROM LIB.LOGO
RF LIB > DSK BH