aboutsummaryrefslogtreecommitdiff
path: root/src/quadrowple/static/main.js
blob: 008658cff716343733f7201721cfb793f1f91014 (plain)
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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
window.onload = function () {
    var transactionData = new Vue({
        el: '#data',
        data: {
            status: "Loading...",
            playing: false
        },
        methods: {
            newGame: function () {
                if (this.playing) {
                    fetch(new Request(`/quadrowple/new`))
                } else {
                    this.startGame()
                }
            },
            startGame: function () {
                console.log("created")
                var mouseDown = function (e) {
                    col = Math.floor(e.x / 50);
                    if (0 <= col <= 6) {
                        fetch(new Request(`/quadrowple/game/${col}`))
                    }
                }
                document.addEventListener("click", mouseDown);
                var playInterval;
                var playGame = function (t) {
                    fetch(new Request(`/quadrowple/game`)).then(response => response.json())
                        .then(response => {
                            var c = document.getElementById("canvas");
                            var ctx = c.getContext("2d");
                            ctx.fillStyle = "#eee"
                            ctx.fillRect(0, 0, 351, 301)

                            if (response.restart) {
                                t.playing = false
                                t.status = "The game has been forfeited"
                                clearInterval(playInterval)
                                return
                            } else if (response.winner != undefined) {
                                clearInterval(playInterval)
                                if (response.winner) {
                                    t.status = "You won!"
                                } else {
                                    t.status = "You lose!"
                                }
                            } else if (response.turn) {
                                t.status = "It's your turn!"
                            } else {
                                t.status = "Waiting for other player..."
                            }

                            ctx.strokeStyle = "black"
                            for (var i = 0; i <= 7; i++) {
                                ctx.moveTo(50 * i, 0);
                                ctx.lineTo(50 * i, 300);
                                ctx.stroke();
                            }
                            for (var i = 0; i <= 6; i++) {
                                ctx.moveTo(0, 50 * i);
                                ctx.lineTo(350, 50 * i);
                                ctx.stroke();
                            }

                            for (var col = 0; col < 7; col++) {
                                for (var row = 0; row < 6; row++) {
                                    if (response.game.board[col][row] == undefined) {
                                        continue
                                    } else if (response.game.board[col][row] == 0) {
                                        ctx.fillStyle = "#0000FF";
                                    } else {
                                        ctx.fillStyle = "#FF0000";
                                    }
                                    ctx.beginPath();
                                    ctx.arc(25 + 50 * col, 50 * (5 - row) + 25, 23, 0, 2 * Math.PI);
                                    ctx.fill();
                                }
                            }
                        });
                }
                var loadInterval = undefined
                var loadStatus = function (recurse, t) {
                    fetch(new Request(`/quadrowple/status`)).then(response => response.json())
                        .then(response => {
                            if (response.waiting) {
                                t.status = "Waiting..."
                                if (recurse) {
                                    loadInterval = window.setInterval(loadStatus, 1000, false, t)
                                }
                            } else {
                                t.status = "Playing..."
                                t.playing = true
                                clearInterval(loadInterval)
                                playInterval = window.setInterval(playGame, 1000, t)
                            }
                        });
                }
                loadStatus(true, this)
            }
        },
        created() {
            this.startGame();
        },
        computed: {

        }
    });
}