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: {
}
});
}
|