summaryrefslogtreecommitdiffstats
path: root/res/tictactoe.erl
blob: abbc78e0ba333682ce66aef5bf5bcb6044d4453b (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
-module(tictactoe).

-export([new/0]).
-export([play/4]).
-export([check/1]).

new() ->
    {undefined, undefined, undefined,
     undefined, undefined, undefined,
     undefined, undefined, undefined}.

play(Who, X, Y, Board) ->
    setelement((Y - 1) * 3 + X, Board, Who).

check(Board) ->
    case Board of
        {x, x, x,
         _, _, _,
         _, _, _} -> {victory, x};

        {_, _, _,
         x, x, x,
         _, _, _} -> {victory, x};

        {_, _, _,
         _, _, _,
         x, x, x} -> {victory, x};

        {x, _, _,
         x, _, _,
         x, _, _} -> {victory, x};

        {_, x, _,
         _, x, _,
         _, x, _} -> {victory, x};

        {_, _, x,
         _, _, x,
         _, _, x} -> {victory, x};

        {x, _, _,
         _, x, _,
         _, _, x} -> {victory, x};

        {_, _, x,
         _, x, _,
         x, _, _} -> {victory, x};

        {o, o, o,
         _, _, _,
         _, _, _} -> {victory, o};

        {_, _, _,
         o, o, o,
         _, _, _} -> {victory, o};

        {_, _, _,
         _, _, _,
         o, o, o} -> {victory, o};

        {o, _, _,
         o, _, _,
         o, _, _} -> {victory, o};

        {_, o, _,
         _, o, _,
         _, o, _} -> {victory, o};

        {_, _, o,
         _, _, o,
         _, _, o} -> {victory, o};

        {o, _, _,
         _, o, _,
         _, _, o} -> {victory, o};

        {_, _, o,
         _, o, _,
         o, _, _} -> {victory, o};

        {A, B, C,
         D, E, F,
         G, H, I} when A =/= undefined, B =/= undefined, C =/= undefined,
                       D =/= undefined, E =/= undefined, F =/= undefined,
                       G =/= undefined, H =/= undefined, I =/= undefined ->
            draw;

        _ -> ok
    end.