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:
101
src/bh/ttt.logo
101
src/bh/ttt.logo
@@ -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
|
||||
Reference in New Issue
Block a user