Tic-tac-toe: Difference between revisions

Added Forth entry
m (→‎{{header|UNIX Shell}}: Added player colors using ANSi escapes.)
(Added Forth entry)
Line 3,787:
Game over. I have won.
</pre>
 
 
 
=={{header|Forth}}==
{{works with|gforth|0.7.3}}
Game between two humans.
 
<lang forth>create board 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
 
\ board: 0=empty, 1=player X, 2=player O
: player. ( player -- ) C" XO" 1+ + @ emit ;
: spot ( n -- addr ) cells board + ;
: clean-board ( -- ) 9 0 do 0 i spot ! loop ;
: show-board
CR ." +---+---+---+ +---+---+---+" CR
3 0 do
." | "
3 0 do
i j 3 * + spot @ player. ." | "
loop
." | "
3 0 do
i j 3 * + . ." | "
loop
CR ." +---+---+---+ +---+---+---+" CR
loop ;
 
: spots-equal ( n1 n2 n3 -- f )
over spot @ swap spot @ = >r spot @ swap spot @ = r> and ;
: spots-win ( n1 n2 n3 -- f )
dup >r spots-equal r> spot @ 0<> and ;
 
: winner-check ( -- player )
0 1 2 spots-win if 0 spot @ exit then
3 4 5 spots-win if 3 spot @ exit then
6 7 8 spots-win if 6 spot @ exit then
0 3 6 spots-win if 0 spot @ exit then
1 4 7 spots-win if 1 spot @ exit then
2 5 8 spots-win if 2 spot @ exit then
0 4 8 spots-win if 0 spot @ exit then
2 4 6 spots-win if 2 spot @ exit then
0 ;
 
: player-move ( player -- )
begin
key dup emit [char] 0 - dup
spot @ 0= if spot ! exit else drop then
again ;
 
: game
clean-board show-board
9 0 do
i 2 mod 1+ dup ." Player " player. ." : "
player-move show-board
winner-check dup 0<> if player. ." wins !" unloop exit else drop then
loop
." Draw!" ;
 
game
</lang>
 
{{out}}
<pre>
+---+---+---+ +---+---+---+
| | | | | 0 | 1 | 2 |
+---+---+---+ +---+---+---+
| | | | | 3 | 4 | 5 |
+---+---+---+ +---+---+---+
| | | | | 6 | 7 | 8 |
+---+---+---+ +---+---+---+
Player X: 0
+---+---+---+ +---+---+---+
| X | | | | 0 | 1 | 2 |
+---+---+---+ +---+---+---+
| | | | | 3 | 4 | 5 |
+---+---+---+ +---+---+---+
| | | | | 6 | 7 | 8 |
+---+---+---+ +---+---+---+
Player O: 3
+---+---+---+ +---+---+---+
| X | | | | 0 | 1 | 2 |
+---+---+---+ +---+---+---+
| O | | | | 3 | 4 | 5 |
+---+---+---+ +---+---+---+
| | | | | 6 | 7 | 8 |
+---+---+---+ +---+---+---+
Player X: 1
+---+---+---+ +---+---+---+
| X | X | | | 0 | 1 | 2 |
+---+---+---+ +---+---+---+
| O | | | | 3 | 4 | 5 |
+---+---+---+ +---+---+---+
| | | | | 6 | 7 | 8 |
+---+---+---+ +---+---+---+
Player O: 4
+---+---+---+ +---+---+---+
| X | X | | | 0 | 1 | 2 |
+---+---+---+ +---+---+---+
| O | O | | | 3 | 4 | 5 |
+---+---+---+ +---+---+---+
| | | | | 6 | 7 | 8 |
+---+---+---+ +---+---+---+
Player X: 2
+---+---+---+ +---+---+---+
| X | X | X | | 0 | 1 | 2 |
+---+---+---+ +---+---+---+
| O | O | | | 3 | 4 | 5 |
+---+---+---+ +---+---+---+
| | | | | 6 | 7 | 8 |
+---+---+---+ +---+---+---+
X wins ! ok
</pre>
 
 
 
 
=={{header|Fortran}}==
Anonymous user